SSD Nodes Learn 🎉 VPS $5.50/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-21

Hister self-host করে নিজের পড়া কনটেন্ট খুঁজুন

VPS-এ Hister চালিয়ে পড়া পেজ ও রাখা ফাইলের full-text search করুন। v0.17.0-এ binary ও Docker install, TLS, login এবং MCP endpoint সেটআপ দেখুন।

Hister কী এবং কী নয়

Hister একটি self-hosted ব্যক্তিগত search engine। এটি আপনি পড়া পেজ এবং সংরক্ষণ করা ফাইলের সম্পূর্ণ টেক্সট index করে। এরপর web interface, terminal client, HTTP API অথবা AI (artificial intelligence) assistant থেকে সেই collection search করা যায়। Hister একটি প্রশ্নের উত্তর দেয়: আমি এটি কোথায় পড়েছিলাম।

বেশিরভাগ পাঠক এই ধারণার সঙ্গে SearXNG-এর মাধ্যমে পরিচিত হন। তবে দুটি একই tool নয়। SearXNG একটি metasearch proxy। আপনার query SearXNG-এ যায়। এটি আপনার হয়ে অন্য search engine-গুলোকে query করে এবং tracking সরিয়ে তাদের result ফেরত দেয়। Index সেই search engine-গুলোর কাছেই থাকে। Hister আপনার দেওয়া content থেকে নিজস্ব index তৈরি করে। এর মধ্যে browser extension দিয়ে captured page, imported browser history, crawled URL এবং আপনার নির্দিষ্ট করা directory-র file থাকতে পারে। একটি self-hosted SearXNG instance আপনাকে public web-এ private access দেয়। Hister আপনার নিজের পড়া content search করার সুবিধা দেয়। কাজ দুটি আলাদা। তাই একই box-এ দুটিই চালানো স্বাভাবিক।

Hister AGPLv3 (GNU Affero General Public License, version 3) বা পরবর্তী সংস্করণের অধীনে free software। এতে telemetry নেই এবং কোনো cloud service প্রয়োজন হয় না। এই guide-এ version v0.17.0 নির্দিষ্ট করা হয়েছে। 2026-07-28 তারিখে এটিই current release ছিল। কোনো কিছু copy করার আগে releases page-এ current tag পরীক্ষা করুন। এরপর সেখানে পাওয়া tag নির্দিষ্ট করে দিন।

একটি VPS-এ Hister নিজে host করার কারণ

কোনো index সম্পূর্ণ হলেই কেবল তা কার্যকর হয়। আপনি পড়ার সময় server চালু থাকলেই index সম্পূর্ণ হতে পারে। একটি laptop দিনের অর্ধেক সময় sleep mode-এ থাকে। সেই সময় phone-এ খোলা page কখনো laptop-এ পৌঁছায় না, এবং রাতের import-ও শুরু হয় না। একটি VPS (virtual private server) চালু থাকে। তাই আপনার প্রতিটি device একই index-এ data পাঠায়, এবং আপনি ঘুমানোর সময়ও crawler কাজ করে।

দ্বিতীয় কারণ হলো পৃথকীকরণ। app section-এ user_handling: true সেট করলে একই instance-এ প্রতিটি account-এর নিজস্ব credentials এবং নিজস্ব document collection থাকে। ফলে একটি server-এ household বা ছোট team-এর সবাইকে রাখা যায়, কিন্তু কেউ অন্য কারও পড়া content search করতে পারে না।

তৃতীয় কারণ হলো connectivity। VPS-এ আগে থেকেই একটি public hostname এবং certificate থাকে। আপনি নিয়ন্ত্রণ করেন না এমন network থেকে server-এ পৌঁছানোর জন্য browser extension-এর এগুলো প্রয়োজন।

ইনস্টল করার পদ্ধতি এক: release binary

Hister প্রতিটি platform-এর জন্য একটি binary release করে। এটি checksums file-সহ download করুন এবং ইনস্টল করার আগে verification করুন।

cd /tmp
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_linux_amd64
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_checksums.txt
sha256sum --ignore-missing -c hister_0.17.0_checksums.txt

সফল ফলাফল হলো একমাত্র hister_0.17.0_linux_amd64: OK line। FAILED line দেখা গেলে download ক্ষতিগ্রস্ত বা পরিবর্তিত হয়েছে। তাই ইনস্টল না করে এটি আবার fetch করুন।

Binary ইনস্টল করুন। এরপর একটি system account এবং এটি ব্যবহার করবে এমন directory তৈরি করুন।

sudo install -m 755 /tmp/hister_0.17.0_linux_amd64 /usr/local/bin/hister
sudo useradd --system --home-dir /var/lib/hister --shell /usr/sbin/nologin hister
sudo install -d -o hister -g hister -m 750 /var/lib/hister
sudo install -d -m 755 /etc/hister
sudo hister create-config /etc/hister/config.yml

create-config একটি default configuration file লেখে এবং এই machine-এ binary চালানো যায় কি না, সেটিও নিশ্চিত করে। ভুল architecture-এর জন্য করা download এখানেই cannot execute binary file: Exec format error সহ ব্যর্থ হবে।

প্রয়োজনীয় কয়েকটি setting সম্পাদনা করুন। Generated file-এর বাকি অংশ অপরিবর্তিত রাখতে পারেন।

app:
  directory: /var/lib/hister
  access_token: 'paste-a-long-random-string-here'
server:
  address: 127.0.0.1:4433
  base_url: https://hister.example.com

openssl rand -hex 32 দিয়ে token তৈরি করুন। এখন file-টিতে একটি credential আছে। তাই service শুরু হওয়ার আগেই এর permission সীমিত করুন।

sudo chown root:hister /etc/hister/config.yml
sudo chmod 640 /etc/hister/config.yml

systemd-এর অধীনে চালান

/etc/systemd/system/hister.service লিখুন:

[Unit]
Description=Hister personal search engine
After=network-online.target
Wants=network-online.target

[Service]
User=hister
Group=hister
Environment=HISTER_CONFIG=/etc/hister/config.yml
ExecStart=/usr/local/bin/hister listen
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/hister

[Install]
WantedBy=multi-user.target

HISTER_CONFIG হলো configuration path-এর জন্য নথিভুক্ত environment variable। তাই unit-টি hister account-এর home directory-এর ওপর নির্ভর করে না। ProtectSystem=strict এই service-এর জন্য পুরো filesystem read-only করে। তাই ReadWritePaths-এ data directory উল্লেখ করতে হয়। ProtectHome=yes service-এর কাছ থেকে /home আড়াল করে। ফলে /home-এর অধীনে monitor করা directory indexer-এর কাছে খালি দেখাবে। সেখানে থাকা file index করতে হলে ওই line বাদ দিন।

sudo systemctl daemon-reload
sudo systemctl enable --now hister
systemctl status hister --no-pager
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:4433/

শেষ command-এ কোনো HTTP status code দেখা গেলে বুঝবেন process-টি listening করছে। curl: (7) Failed to connect দেখালে process-টি listening করছে না। journalctl -u hister -n 50 --no-pager এর কারণ জানাবে।

ইনস্টল করার পদ্ধতি দুই: Docker Compose

Image-টি GitHub container registry-তে প্রকাশিত হয়েছে এবং প্রতিটি release-এর জন্য একটি করে tag রয়েছে।

services:
  hister:
    image: ghcr.io/asciimoo/hister:v0.17.0
    container_name: hister
    user: '1000:1000'
    restart: unless-stopped
    environment:
      - HISTER__SERVER__ADDRESS=0.0.0.0:4433
      - HISTER__SERVER__BASE_URL=https://hister.example.com
      - HISTER__APP__ACCESS_TOKEN=${HISTER_ACCESS_TOKEN}
    volumes:
      - ./data:/hister/data
    ports:
      - 127.0.0.1:4433:4433

প্রতিটি configuration key-এর জন্য HISTER__<SECTION>__<KEY> আকারের একটি environment override রয়েছে। এখানে separator হিসেবে দুটি underscore ব্যবহৃত হয়। তাই container deployment-এর জন্য mounted config file প্রয়োজন হয় না। HISTER_ACCESS_TOKEN-কে compose file-এর পাশে থাকা একটি .env file-এ রাখুন। আপনি যদি file সম্পাদনা করতে চান, docker run --rm ghcr.io/asciimoo/hister:v0.17.0 create-config > config.yml চালিয়ে default value দেখুন।

উপরের দুটি লাইন সহজেই ভুলভাবে প্রয়োগ করা হয়। দুটিই বোঝা গুরুত্বপূর্ণ।

Container-এর ভেতরের address অবশ্যই 0.0.0.0:4433 হতে হবে। Container-এর নিজস্ব network namespace থাকে। তাই সেখানে 127.0.0.1-এ bind করা কোনো process শুধু ওই container-এর ভেতর থেকেই reachable হয়। ফলে published port forward করার জন্য কোনো destination পায় না।

Published port 127.0.0.1:4433:4433 আকারে লিখতে হবে, 4433:4433 নয়। Docker নিজস্ব netfilter rule যোগ করে port publish করে। এই rule-গুলো ufw rule-এর আগে evaluate হয়। তাই কোনো host-এ ufw status port-টিকে closed দেখালেও সাধারণ 4433:4433 Internet থেকে reachable থাকে। Host side-কে 127.0.0.1-এ bind করলে reverse proxy-ই প্রবেশের একমাত্র পথ থাকে। একই সমস্যা server-এর প্রতিটি container-এর ক্ষেত্রেই প্রযোজ্য। VPS-এ Docker Compose-এ এই বিষয়ের বাকি অংশ ব্যাখ্যা করা হয়েছে।

Default image-টি UID 1000 এবং GID 1000 হিসেবে চলে। তাই ./data এই account-এর জন্য writable হতে হবে। তা না হলে permission error দিয়ে startup-এর সময় container বন্ধ হয়ে যায়। sudo chown -R 1000:1000 ./data এটি ঠিক করে। এই number-গুলো অপরিচিত হলে আগে কোন UID ও GID হিসেবে container file লেখে পড়ুন।

ব্যক্তিগত search index প্রকাশ করা কেন সবচেয়ে ঝুঁকিপূর্ণ

Hister ডিফল্টভাবে 127.0.0.1:4433-এ listening করে, এবং এই default ইচ্ছাকৃত। এক মাস ব্যবহারের পর index-এ কী থাকে তা ভাবুন: internal wiki page, invoice, আপনি logged in থাকা অবস্থায় খোলা support ticket, password reset page এবং আপনি পড়া অন্যান্য সবকিছুর সম্পূর্ণ text। Project documentation-এ বিষয়টি সরাসরি বলা আছে: "Hister আপনার সম্পূর্ণ browsing history, page content-সহ, server-এ পাঠায় এবং server থেকে গ্রহণ করে।"

ফাঁস হওয়া password database এখনও crack করতে হয়। ফাঁস হওয়া personal index plain text অবস্থায় থাকে এবং ইতিমধ্যেই searchable হয়। তাই দেখতে ছোট self-hosted app-এর মতো হলেও এটিকে আরও সতর্কতার সঙ্গে সুরক্ষিত করতে হবে।

এখান থেকে দুটি বিষয় স্পষ্ট হয়। Hister ডিফল্টভাবে কোনো authentication চায় না। তাই শুধু reverse proxy ব্যবহার করলে hostname জানা যেকোনো ব্যক্তি আপনার পড়া বিষয়গুলোর searchable copy দেখতে পারে। MCP endpoint-ও ডিফল্টভাবে /mcp-এ serve করা হয়। Token ছাড়া endpoint-এ পৌঁছাতে পারে এমন যেকোনো client index-এ search চালাতে পারে।

Service প্রথমবার localhost-এর বাইরে প্রকাশ করার আগেই authentication configure করুন। একজন user-এর জন্য শুধু app.access_token প্রয়োজন। Browser extension, terminal client এবং যেকোনো MCP client একই shared secret পাঠাবে। একাধিক user-এর জন্য user_handling: true সেট করুন এবং account তৈরি করুন:

sudo -u hister hister create-user alice --admin --config /etc/hister/config.yml

Command-টি অন্তত 8 অক্ষরের password চাইবে। প্রতিটি account-এর নিজস্ব document এবং personal API token থাকে। Owner profile page থেকে অথবা hister update-user-এ --regen-token flag ব্যবহার করে token পুনরায় তৈরি করতে পারেন। নতুন token তৈরি হলে আগের token সঙ্গে সঙ্গে invalid হয়ে যায়। তাই ওই account ব্যবহার করা প্রতিটি device পরে update করতে হবে।

উদ্দেশ্য না থাকলে app.public পরিবর্তন করবেন না। Public mode-এ unauthenticated search, preview, file serving এবং MCP search অনুমোদিত থাকে। তবে write, history access এবং admin operation তখনও block থাকে।

Reverse proxy, TLS এবং firewall

Hister নিজে HTTPS সরবরাহ করে না। তাই এর সামনে TLS (transport layer security) termination করুন। Caddy ব্যবহার করাই সবচেয়ে সহজ উপায়, কারণ এটি ACME (automatic certificate management environment) ব্যবহার করে নিজে certificate অনুরোধ ও renewal করে।

hister.example.com {
    reverse_proxy 127.0.0.1:4433
}

sudo systemctl reload caddy দিয়ে এটি reload করুন। Certificate issue হওয়ার আগে 2টি শর্ত পূরণ হতে হবে: hister.example.com-এর A record-কে এই server-এর দিকে নির্দেশ করতে হবে এবং port 80 খোলা থাকতে হবে, কারণ HTTP-01 challenge-এর উত্তর সেখানেই দেওয়া হয়। যেকোনো একটি শর্ত পূরণ না হলে browser page-এর পরিবর্তে TLS error দেখায় এবং Caddy log-এ ব্যর্থ challenge বারবার দেখা যায়।

এরপর অন্য সবকিছু বন্ধ করুন।

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Port 4433 ইচ্ছাকৃতভাবে ওই তালিকায় রাখা হয়নি।

server.base_url-এ browser-এ লেখা ঠিকানাটিই থাকতে হবে, scheme-সহ। এটি না মিললে interface unstyled text এবং missing image-সহ load হয়, কারণ server base_url থেকে asset link তৈরি করে। এরপর browser এমন একটি origin থেকে সেগুলো request করে, যেটি উত্তর দেয় না। একই URL browser extension-এও দিন।

ইনডেক্স পূরণ করা

ব্রাউজার extension-ই প্রধান collector। এটি Mozilla Add-ons বা Chrome Web Store থেকে install করুন, options page খুলে server URL হিসেবে https://hister.example.com সেট করুন এবং access token paste করুন। এরপর আপনি যে প্রতিটি page visit করেন, extension সেটির title, full text, HTML এবং favicon সংগ্রহ করে আপনার server-এ পাঠায়। Extraction client side-এ, browser-এর ভেতরেই হয়। Extension কোনো third party-এর সঙ্গে যোগাযোগ করে না। এটি যে একমাত্র বাইরের request করে, সেটি page favicon-এর জন্য।

Client-side extraction-এর কারণেই private index তৈরি করা সম্ভব হয়। Login এবং rendering-এর পরে extension একটি page ঠিক আপনার দেখার মতো অবস্থায় দেখতে পায়। তাই internal wiki page বা paid article সঠিকভাবে index হয় এবং আপনার server-এর credentials-এর প্রয়োজন হয় না। এর অর্থ হলো আপনি যা দেখেন, সবই index-এর candidate হতে পারে। তাই আরও content যোগ করার আগে skip rules নির্ধারণ করা জরুরি।

Single-user install-এ skip rules rules.json-এ থাকে। একাধিক user থাকলে এগুলো database-এ user-ভিত্তিকভাবে থাকে। Web interface-এর Rules tab-ই এগুলো edit করার সবচেয়ে সহজ উপায়। এগুলো full URL-এর বিরুদ্ধে প্রয়োগ করা Go regular expression:

^https://mail\.example\.com
^https://bank\.example\.com
.*?utm_source=

^mail.example.com-এর মতো pattern কখনো match করবে না, কারণ পরীক্ষা করা string https:// দিয়ে শুরু হয়। Query string থাকা যেকোনো URL-এ শেষের $-ও ব্যর্থ হবে, কারণ matching-এর সময় query parameter রাখা হয়।

Existing history import করা হয় browser-এর নিজস্ব database পড়ে। তাই এই command browser profile থাকা machine-এ চালাতে হবে। সেই machine হলো আপনার laptop, VPS নয়। সেখানে একই binary install করে server-এর দিকে নির্দেশ করুন:

export HISTER_TOKEN='your-access-token'
hister import browser firefox -u https://hister.example.com -t "$HISTER_TOKEN"

Import browser-import-YYYY-MM-DD নামে একটি resumable job হিসেবে চলে। তাই এটি interrupt করে পরে আবার চালু করতে পারেন। Linkwarden, Karakeep, Wallabag, Linkding, Readeck এবং Shaarli-সহ bookmark service-গুলোর import-ও একইভাবে হয়। আবার import চালালে আগের import-এর পর নতুন হওয়া item-গুলোই fetch করা হয়।

Config-এ directory-এর নাম উল্লেখ করে server-এর file index করা যায়:

indexer:
  directories:
    - path: '/var/lib/hister/documents'
      label: 'documents'
      filetypes: ['pdf', 'docx', 'md', 'txt']

PDF, DOCX, Markdown, Org mode এবং valid UTF-8 text file full text হিসেবে পড়া হয়। Photo এবং video এই তালিকায় নেই। তাই image library-এর জন্য text-এর বদলে face, স্থান এবং date index করে এমন server প্রয়োজন। এই কাজের জন্য সাধারণত PhotoPrism এবং Immich তুলনা করা হয়। hister index https://example.com দিয়ে একটি page যোগ করা যায়। অন্য tool-এর জন্য পুরো site-কে পরিষ্কার text-এ রূপান্তর করা আলাদা কাজ। এটি page-কে পরিষ্কার text-এ রূপান্তরকারী self-hosted crawler দিয়ে করা হয়।

Search field-ভিত্তিক। তাই query language পড়তে দশ মিনিট সময় দিলে সুবিধা হবে:

"connection reset" domain:github.com added:<30d
title:(wireguard|nftables) -tutorial sort:-visits

MCP-এর মাধ্যমে একটি coding agent-কে আপনার নিজস্ব index-এর সঙ্গে যুক্ত করুন

MCP (model context protocol) হলো এমন একটি interface, যার মাধ্যমে assistant কোনো server-এ থাকা tool ব্যবহার করে। Hister একই base URL-এর অধীনে streamable HTTP transport ব্যবহার করে এটিকে POST /mcp-এ চালু করে এবং search, get_previewget_history প্রকাশ করে। Authentication-এর জন্য API-এর অন্যান্য অংশের মতো একই bearer token ব্যবহার করা হয়।

{
  "mcpServers": {
    "hister": {
      "url": "https://hister.example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_ACCESS_TOKEN"
      }
    }
  }
}

X-Access-Token header, Authorization-এর বিকল্প হিসেবে কাজ করে।

এখানে মূল সুবিধা হলো agent কী অনুসন্ধান করে। Open web search আজ যে ফলাফলকে উচ্চ rank দেয়, সেটিই ফেরত দেয়। দ্রুত পরিবর্তনশীল software-এর ক্ষেত্রে সেটি প্রায়ই এমন version-এর documentation হয়, যা আপনি ব্যবহার করছেন না। আপনার নিজস্ব index ইতিমধ্যে পড়ে সংরক্ষণ করার জন্য বেছে নেওয়া page ফেরত দেয়। get_preview সংরক্ষিত copy পরিবেশন করে। তাই মূল page offline হয়ে গেলেও উত্তরটি পাওয়া যায়। Public result-ও চাইলে agent-কে উভয় source দিন: SearXNG-নির্ভর browser search skill open web-কে একটি পৃথক tool হিসেবে যুক্ত করে। একটির বেশি endpoint চালালে VPS-এ MCP server host করা পড়ে দেখা উপযোগী, কারণ প্রতিটি endpoint-এর ক্ষেত্রেই এই exposure সমস্যাটি থাকে।

Disk, backup এবং রক্ষণাবেক্ষণ

ডকুমেন্টেশনে compressed preview-সহ প্রতিটি indexed page-এর আকার প্রায় 100 KB ধরা হয়েছে। তাই এক লাখ page-এর আকার প্রায় 10 GB। কোনো quota system নেই। দুটি setting-কে প্রায়ই এক বলে ভুল করা হয়: indexer.max_file_size_mb (ডিফল্টভাবে 1 MiB) একটি watched file-এর সর্বোচ্চ আকার নির্ধারণ করে, আর server.max_batch_body_size (ডিফল্টভাবে 40 MiB) একটি API request-এর সর্বোচ্চ আকার নির্ধারণ করে।

app.directory-এ নির্ধারিত directory-তে per-language index file-সহ index.db, account ও job-এর জন্য db.sqlite3, preview-এর জন্য data/html/ এবং rules.json থাকে। Backup নিতে service বন্ধ করে পুরো directory এবং config file কপি করতে হয়। hister export backup.json migration-এর জন্য document-গুলো JSON হিসেবে লেখে। এটি server backup নয়।

দুটি maintenance command জানা দরকার। hister reindex search index পুনর্নির্মাণ করে। Indexer setting পরিবর্তনের পরে এটি চালানো প্রয়োজন। বড় import চলাকালে memory usage বাড়লে indexer section-এ detect_languages: false সেট করুন এবং পুনরায় index তৈরি করুন। hister cleanup deletion-এর পরে পড়ে থাকা orphaned preview ও favicon file মুছে দেয়।

Deletion একটি query হিসেবে কাজ করে। তাই আগে dry mode-এ চালান:

hister delete 'domain:example.com' --dry --verbose

কোনো collector সেটি এখনও submit করলে deleted page আবার ফিরে আসবে। তাই deletion-এর আগে skip rule যোগ করুন।

আপনি code পরিবর্তন করলেই AGPLv3 প্রাসঙ্গিক হয়। অপরিবর্তিত copy নিজে ব্যবহার করলে কোনো বাধ্যবাধকতা নেই। Hister পরিবর্তন করে network-এর মাধ্যমে অন্যদের আপনার version ব্যবহার করতে দিলে licence অনুযায়ী তাদের modified source দেওয়ার ব্যবস্থা করতে হবে।

ব্যর্থতার ধরন এবং যে বার্তাগুলো দেখবেন

সার্ভার চালু হয় না। Port 4433 ইতিমধ্যে ব্যবহৃত হচ্ছে, অথবা config file-এ YAML syntax error আছে। কোন process port-টি ব্যবহার করছে তা sudo ss -lntp | grep 4433 দেখায়, আর journalctl -u hister -n 50 --no-pager parse error দেখায়।

Interface লোড হয়, কিন্তু ভাঙা দেখায়। এলোমেলো text এবং অনুপস্থিত image-এর অর্থ হলো server.base_url address bar-এর URL-এর সঙ্গে মেলে না। শেষে থাকা slash-ও mismatch হিসেবে গণ্য হয়।

Extension সংযোগ করে না। Extension-এ থাকা server URL-টি base_url-এর সমান হতে হবে, server চালু এবং current থাকতে হবে, এবং মাঝখানের firewall কোনো page message না দেখিয়েই সংযোগ আটকে দিতে পারে। Firefox extension-এর log সাধারণ console-এ রাখে না: about:debugging#/runtime/this-firefox খুলে Hister extension পরীক্ষা করুন।

Startup-এর সময় container বন্ধ হয়ে যায়। ./data-এ permission error দেখালে বুঝবেন directory-টির owner UID 1000 নয়। Default image-এর ভেতরের account-এর UID হলো 1000।

Admin route থেকে 403 Forbidden দেখা যায়। User handling চালু থাকলে POST /api/reindex এবং POST /api/cleanup শুধু admin-এর জন্য নির্ধারিত থাকে। তাই সাধারণ account-এর অনুরোধ প্রত্যাখ্যান করা হয়।

Import চলার সময় memory বৃদ্ধি পায়। বড় history-র ওপর language detection চালানোই সাধারণত এর কারণ। detect_languages: false সেট করুন এবং এরপর hister reindex চালান।

FAQ

Hister এবং SearXNG-এর মধ্যে পার্থক্য কী?

SearXNG একটি metasearch proxy। এটি আপনার query public engine-গুলোর কাছে পাঠায় এবং tracking সরিয়ে তাদের ফলাফল ফেরত দেয়। তাই index ওই engine-গুলোর মালিকানাধীন। Hister আপনার দেখা page এবং সংরক্ষিত file-এর নিজস্ব full-text index তৈরি করে। তাই Hister-এর উত্তর হয় “আমি এটি কোথায় পড়েছিলাম”, আর SearXNG-এর উত্তর হয় “ওয়েব কী বলছে”। তারা ভিন্ন সমস্যার সমাধান করে। অনেকে একই server-এ দুটিই চালান।

আমার সম্পূর্ণ browsing history কি VPS-এ রাখা নিরাপদ?

শুধু আগে exposure-এর ব্যবস্থা করলে। Hister 127.0.0.1:4433-এ bind করে এবং defaultভাবে কোনো authentication প্রয়োজন হয় না। app.access_token অথবা user_handling: true সেট করুন, সামনে TLS-সহ একটি reverse proxy রাখুন, এবং firewall-এ port 4433 বন্ধ রাখুন। আপনার পড়া বিষয়বস্তুর full-text index plain text হিসেবে থাকে। তাই port-এ পৌঁছাতে পারা যে কেউ কোনো কিছু crack না করেই সব পড়তে পারে।

Browser extension কি প্রয়োজন, নাকি শুধু history import করতে পারি?

Import একবারের backfill কাজ। এটি browser-এর নিজস্ব history database পড়ে। তাই server-এর বদলে browser profile থাকা computer-এ এটি চালাতে হয়। এরপর extension index হালনাগাদ রাখে। Page render হওয়ার পরে browser-এ content extract করার কারণে login-এর আড়ালে থাকা page-ও এটি capture করতে পারে। সাধারণ setup হলো একবার import করা, তারপর extension ব্যবহার করা।

হ্যাঁ। Hister একটি MCP (model context protocol) server, যা আপনার base URL-এর POST /mcp-এ থাকে এবং search, get_previewget_history প্রকাশ করে। Authorization: Bearer header-এ access token রেখে client-কে https://your-host/mcp-এ নির্দেশ করুন। এরপর agent public search engine-এ বর্তমানে যে ফলাফলকে rank করা হয় তার বদলে, আপনি যে documentation সত্যিই পড়েছেন এবং যে version-এ পড়েছেন, সেটিই search করবে।