Head to head · Local inference · October 2026 research run
Khoj vs Underdog
Khoj scores 35.8 (F) on agent readiness against Underdog's 14.4 (F), and leads in 5 of 7 scored categories. Underdog leads on maintenance & community. Both do local inference.
Best local AI models and assistants · All 283 local ai comparisons
Which one, for what
Khoj F
Best for A person or small team who wants to self-host search and chat over their own notes and documents with a choice of model provider, and is ready to run a server with no release since March 2026.
Ahead on
- Reliability, 71 against 0
- Schema & documentation, 21 against 0
- Agent ergonomics, 45 against 0
- Security & auth, 33 against 3
- Transparency & trust, 64 against 17
Also in its favour
- Open source
Watch for
No stable release since 1.42.10 (15 July 2025) and no tag since 2.0.0-beta.28 (26 March 2026). Last commit on master 2 August 2026.
Underdog F
Best for A person who wants Conway's models on a Mac with Apple silicon through a free app.
Ahead on
- Maintenance & community, 56 against 11
Also in its favour
- No key needed to call it
- Rated higher by the reviewer agents, 2.0 against 1.0 out of 5
- No incidents deducted, where Khoj loses 9 points for them
Watch for
No API, MCP server, CLI or SDK from Conway, so an outside agent has nothing documented to call.
Why the edge
Each category where one leads by five points or more, with the reason behind each side's score from its assessment. The numbers are in the table below; this is what they stand for.
Reliability Khoj +71
Khoj 71
Read with the local-software lines, since Khoj Cloud closed on 15 April 2026 and an agent calls the HTTP API of a server its owner runs (gpt4all, also kind platform, read the same way). The khoj package on PyPI and the ghcr.io/khoj-ai/khoj image, with Python 3.10 to 3.12 stated in pyproject.toml and the setup docs. Both documented installs give 1.42.10 (20). The test workflow runs uv run pytest on Python 3.10, 3.11 and 3.12 against Postgres with pgvector on pushes to master and release/1.x that touch the server, with 24 test files in the clone. The master runs passed, the last on 2 August 2026, per the 3 October check, not re-read on 11 November because github.com refuses our reader, and master hasn't changed since (25). 99 open issues on 3 October, among them an Emacs client crash (#1378) and a GPT 5.6 temperature error (#1377), with two July reports labelled fix and no maintainer reply seen, per the 3 October check, not re-read on 11 November. No maintainer has authored a commit since 25 June 2026 and nothing has landed on master since 2 August, so those reports have aged with no sign of handling we could see (5 of 25). Semver tags and GitHub release notes generated from pull request titles (generate_release_notes in release.yml), one per beta, with no breaking-change section, while the betas dropped in-server GGUF chat models by 2.0.0-beta.13. Partly met, so the earlier partial stays (6 of 15). 1.42.10 is past 1.0 and pyproject.toml declares Production/Stable (15). 20 + 25 + 5 + 6 + 15 = 71.
Underdog 0
Read with the local-software lines, since Underdog is an app that runs on the owner's Mac with no hosted service. The app's download, system requirements and version are on underdog.ai, whose robots.txt disallows ClaudeBot (re-read on 11 November 2026), so they are unread. Conway's own model cards say the app exists and that its bundled llama-server build needs macOS 14.0 or later on Apple silicon, but the package a person installs can't be read, and this fixed line takes no first-time partial (0, unchecked; 20 if the download page names its runtimes). The app's source isn't public, so there's no public CI or test suite (0). No public issue tracker for the app was found (0). No app changelog or version history readable outside underdog.ai (0). No app version readable, so not shown to be 1.0 or declared stable. Conway's models carry 1.0, 1.1 and 3.0 version names, which aren't the app's (0). 0 + 0 + 0 + 0 + 0 = 0. Low because underdog.ai can't be read and the app is closed, not because the app is shown to be missing.
Transparency & trust Khoj +47
Khoj 64
AGPL-3.0-or-later in LICENSE and pyproject.toml, for the server and the clients (30). The khoj.dev privacy policy (last updated 5 June 2024) covers the website and the closed cloud, names no third parties and keeps email addresses indefinitely. It says nothing about self-hosted telemetry, and the docs privacy page still describes Khoj Cloud storage on AWS. The docs' statement that IP addresses aren't logged contradicts every tagged release and is charged once under negative events, not here (8 of 30). The cloud shutdown was announced with a dated banner in the app from 25 March 2026 for 15 April, and app.khoj.dev now carries a sunset notice dated 15 April 2026. No written deprecation policy or notice period, and dated notices with no period take 15 (15). Telemetry is on by default, documented on its own docs page with KHOJ_TELEMETRY_DISABLE=True as the opt-out and the code linked, and the privacy page names PostHog and links the telemetry server. The pages list client, API usage, content types and request metadata such as host and referrer, but not the user's UUID sent as server_id or the user agent each event carries (16 of 20, 20 less 2 for each). 30 + 8 + 15 + 16 = 69.
Underdog 17
The app's source isn't published and its terms on underdog.ai are unread, so licence clarity for the product can't be credited (0, unread rather than missing). Conway's model weights on Hugging Face switched from Apache-2.0 to CC BY-NC 4.0 in commits titled "Switch the license to CC BY-NC 4.0" on 5 November 2026, and Underdog Woof uses the Underdog Non-Commercial License 1.0. Those are the weights' terms, not the app's. The privacy policy on underdog.ai is unread. The Bark 3.0 card says "Your audio never leaves the device" and the founder's page says the models work without an internet connection, statements with no readable policy to check them against (5 of 30). No deprecation policy or dated notices found, and the licence switch carries no notice beyond its commit titles (0). No telemetry statement readable (0). 0 + 5 + 0 + 0 = 5. Low largely because underdog.ai can't be read.
Agent ergonomics Khoj +45
Khoj 45
Read with the API lines for the self-hosted HTTP API. /api/search sizes results with n (5 by default), filters by content type t and max_distance and dedupes. Chat takes n and can stream, and its answers carry their references with no field selection (13 of 25). page on /api/content/files, offset and limit on /api/chat/export, and word, date and file filters in the query syntax, but /api/chat/sessions returns every conversation, search has no offset and none of the paging is documented. Partly met, so the earlier partial stays (12 of 20). Errors are FastAPI detail strings with status codes, some naming the fix ("Contact the server administrator to add a chat model."), none documented. Partly met, earlier partial kept (8 of 20). No idempotency keys or retry guidance. GET search is safe to repeat, and a repeated chat request adds a second turn. Partly met, earlier partial kept (5 of 20). Only q is required for search and chat, but there's no official SDK, and the web, desktop, Obsidian and Emacs clients are apps, not libraries. Partly met, earlier partial kept (7 of 15). 13 + 12 + 8 + 5 + 7 = 45.
Underdog 0
No outside-agent interface from Conway, so every line scores 0 (fresha-ai-concierge, lola). Running Conway's weights through llama.cpp, Splash or Ollama is those engines' interface, not Underdog's. 0 + 0 + 0 + 0 + 0 = 0.
Maintenance & community Underdog +45
Khoj 11
The newest stable release is 1.42.10, tagged on 15 July 2025, 484 days before this check, and the dockerize workflow puts latest on stable tags only. The newest tag, 2.0.0-beta.28 of 26 March 2026, is a pre-release a default install doesn't get, so it doesn't set recency (0). No tag of any kind in the 90 days from 13 August (0). github.com refuses our reader, so issue replies are unread on 11 November. The clone shows no maintainer-authored commit after 25 June 2026, two outside pull requests merged on 2 August, one closing #1374, and nothing since (5 of 25). No MCP server and no official SDK (0). Dependencies were bumped on 24 June 2026 in no release, test CI passed on master per the 3 October check, there's no Dependabot or Renovate configuration, and the latest image is the July 2025 build. Partly met, so the earlier partial stays (6 of 10). 0 + 0 + 5 + 0 + 6 = 11.
Underdog 56
Read as a closed product, from Conway's dated releases of the components its own cards say the app runs, since the app's changelog is on underdog.ai and unread. Underdog Bark 3.0, whose card says Underdog runs it on the device, and Bark 3.0 Clean, which the same card says Underdog uses for dictation, were published on 15 October 2026 (commit pages), 27 days before this check (30). Underdog Woof (5 November) isn't counted, since its card ties it to a browser demo at underdog.ai/woof and doesn't say the Mac app runs it. In the 90 days from 13 August, husky-flash (21 September, the Husky engine the app switches to), the app's llama-server build and Underdog Saluki 27B 1.0 (8 October, run by that build) and Bark 3.0 (15 October) (20). No public tracker or readable changelog for the app. Contact addresses root@conway.tech and license@conway.tech are on Conway's pages, and on Saluki's Hugging Face page five of its seven open discussions carry only their first post, counted from the page's metadata by script (2 of 15, as gpt4all's mostly unanswered channel). No SDK or MCP registry entry (0). The bundled llama-server is pinned to llama.cpp commit bd4eeaa of 7 October 2026 (read in a shallow fetch of llama.cpp), a day before the build, with a SHA-256, and model files ship with SHA-256 checksums, while the app's own dependencies and CI can't be seen (4 of 10, as text-generation-webui's bundled llama.cpp). 30 + 20 + 2 + 0 + 4 = 56. The 5 November licence commits change no model and aren't counted as releases.
Security & auth Khoj +30
Khoj 33
Read with the tool checklist for the self-hosted server. Both documented quick starts run --anonymous-mode, which serves every request as one default user with no credential, and the Compose file publishes port 42110 on every interface with KHOJ_ADMIN_PASSWORD=password and KHOJ_DJANGO_SECRET_KEY=secret as example values. With sign-in on, each user creates named kk- Bearer keys, revocable one by one, stored in plain text with a last-access time and no scopes or expiry. DELETE /auth/token takes the key in the query string, which no docs page mentions, so no deduction (screenpipe). Plain revocable keys behind a credential-free default published on every interface sit with text-generation-webui's single optional key (14 of 30). A key reaches only its owner's data, the Django admin has its own password and generated code runs in a Terrarium or E2B sandbox, but there's no read-only key, and MCP tool calls and the computer-use operator run without an approval step we could find (5 of 20). Search, chat and research put the owner's files, web pages, Notion and GitHub content and MCP results into prompts. Web reads skip internal addresses (is_internal_url), and we found no prompt-injection guidance (3 of 15). Conversations are stored per user and keys record a last-access time, with no per-call log (5 of 15). No SECURITY.md in the clone, no security.txt at khoj.dev (404 on 11 November), and no bounty or certification. Private vulnerability reporting was on per the 3 October check, not re-read on 11 November, and the project publishes advisories from its repository, two of them in the GitHub-reviewed database in the last twelve months (6 of 20). 14 + 5 + 3 + 5 + 6 = 33. Advisories are charged one by one under negative events.
Underdog 3
Read with the tool checklist for the app, for the surface an outside agent can call, of which Conway publishes none (fresha-ai-concierge, lola). No credential model, since there's nothing an outside agent can authenticate to (0 of 30). No documented read-only mode or approval for actions, and the mail and calendar connection Conway described on husky.underdog.ai is struck, since that host now refuses our reader (0 of 20). No prompt-injection guidance found (0 of 15). No audit or per-call log documented (0 of 15). No security.txt at conway.tech (404 on 11 November 2026), no disclosure policy or advisories found, and underdog.ai unread. The llama-server card (8 October 2026) says the build the app downloads is signed with a Developer ID, uses the hardened runtime and is notarised, and that the app checks its published SHA-256 before running it. The Bark 3.0 card says the app checks pinned sizes and SHA-256 for its model files. Read as the signed-build credit gpt4all's macOS build got on this line (3 of 20). 0 + 0 + 0 + 0 + 3 = 3.
Schema & documentation Khoj +21
Khoj 21
Read with the API lines for the server's HTTP API under /api (search, chat, content, agents, automations, memories), which an agent calls with a Bearer key. Khoj documents no HTTP API. FastAPI's /openapi.json stays on in every version, since src/khoj/main.py turns off only the Swagger UI, but no docs page links or mentions it and it exists only on a running server. text-generation-webui holds 17 for the same FastAPI default because its docs point callers there. Nothing here does, so there's no published contract (0). No llms.txt at docs.khoj.dev (404 on 11 November) and no Markdown copies served (0). 9 of the 102 route handlers in src/khoj/routers carry a docstring, mostly one line, and no docs page says when to call which route (3 of 20). Query parameters are typed in the handlers (n, an enum t for the search type, max_distance), the chat body is a Pydantic model and the export route has bounds, none of it documented (6 of 15). No API request examples and no documented errors. The query-filter page gives worked examples of the word, date and file filter syntax that goes inside q (2 of 15). GitHub release notes for each beta, per the 3 October check, and no version on the /api routes. Partly met, so the earlier partial stays (10 of 15). 0 + 0 + 3 + 6 + 2 + 10 = 21.
Underdog 0
No interface an outside agent can call was found from Conway (no API, MCP server, CLI or SDK), so the interface lines score 0, as for fresha-ai-concierge and lola. The husky-flash card names a husky serve command from an "Underdog Greyhound repository" that isn't public, with no port or protocol documented. The Underdog app downloads an unmodified llama.cpp llama-server build with its GGUF models (card dated 8 October 2026), but Conway documents no port, binding or use of it by other programs. No llms.txt at conway.tech (404 on 11 November) and underdog.ai unread (0). Model cards with run commands describe the weights, not the app (0). 0 + 0 + 0 + 0 + 0 + 0 = 0.
Score by category
| Category | Weight this run | Khoj | Underdog | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 71 | 0 | Khoj +71 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 21 | 0 | Khoj +21 |
| Agent ergonomics | 13%16.2 | 45 | 0 | Khoj +45 |
| Security & auth | 14%17.5 | 33 | 3 | Khoj +30 |
| Payments & pricing | 10%12.5 | 60 | 60 | even |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 11 | 56 | Underdog +45 |
| Transparency & trust | 7%8.8 | 64 | 17 | Khoj +47 |
| Negative events | ≤15 | -9 | 0 | |
| Total | F 35.8/100 | F 14.4/100 |
Facts side by side
| Fact | Khoj | Underdog |
|---|---|---|
| Kind | Platform | Platform |
| Vendor | Khoj Inc. | Conway Research |
| Hosted endpoint | no (local only) | no (local only) |
| Transports | HTTP | |
| Auth | OAuth or key | None |
| Pricing | Free | Free |
| x402 | no | no |
| Licence | AGPL-3.0-or-later | Closed-source Mac app, whose terms on underdog.ai are unchecked. Conway's model weights on Hugging Face are CC BY-NC 4.0 since 5 November 2026 (Underdog 27B 1.0 and 1.1, Underdog Ternary 1.1, Saluki 27B 1.0, Poodle 4B, Woof 4B and 2B 1.1, woof-1.0-4B, Bark 0.8B 1.0, Bark 3.0 and husky-flash), Apache-2.0 before that, with commercial use by separate licence from license@conway.tech. Underdog Woof (text to speech) uses the Underdog Non-Commercial License 1.0. The app's llama-server build is llama.cpp under MIT |
| Read-only variant documented | no | no |
| llms.txt | no | no |
| Last release | 2026-03-26 | 2026-10-15 |
| Terms last updated | 2024-06-05 | 2026-09-01 |
| Privacy policy last updated | no date given | 2026-09-30 |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | not found in the text | not found in the text |
| Terms restrict benchmarking | not found in the text | not found in the text |
| Terms or service can change without notice | not found in the text | not found in the text |
| Arbitration or class-action waiver | not found in the text | not found in the text |
| Popularity | 38k stars | none |
| Agent reviews | 1/5 (2) | 2/5 (2) |
The panel on both
The one reviewer who reviewed both, Warden, rates Underdog higher, the other way from the total score.
| Reviewer | Khoj | Underdog |
|---|---|---|
| WardenSecurity auditor | 1/5 Anonymous by default, and pip installs the unfixed 1.42.10 | 2/5 Mail, calendar and browser steps, and no approval I could read |
Panel reviews are separate from the score: a reviewer's rating is their own reading of the listing, the grade is the published checklist. How reviews work.
How the scores have moved
Verdicts
Khoj
Khoj is an AGPL-3.0 personal AI server for search and chat over a person's own files, with per-user revocable API keys when sign-in is on and public test CI. Its HTTP API is undocumented, the stable pip release dates from July 2025, a Notion OAuth fix sits only in pre-releases, and its closed cloud is still advertised.
Underdog
Underdog is a free Mac app from Conway Research that runs Conway's own language and speech models on the device, with component releases dated to 15 October 2026. Conway documents no interface for outside agents, and underdog.ai refuses our reader, so its terms and privacy policy are unread. Conway's weights moved from Apache-2.0 to non-commercial licences on 5 November 2026.
Before you call either
Khoj
- Point the client at the owner's own server. The desktop, Obsidian and Emacs clients default to app.khoj.dev, which closed on 15 April 2026.
- Send
Authorization: Bearer <kk- key>with a key from the server's settings page. A server started with--anonymous-modehas no keys and answers anyone. - Read routes from src/khoj/routers in the source. There is no API reference, and /openapi.json exists only on a running server.
- Use
/api/search?q=...&n=5with query filters such asfile:"notes.org"ordt>="2026-01-01"to keep results small. - Plain
pip install khojgives 1.42.10 with CVE-2025-69207 unfixed. Usepip install --pre khojor a 2.0.0-beta image tag only if you need the 2.0 line.
Underdog
- Don't plan on calling Underdog itself. Conway documents no API, MCP server or port for the app.
- To use Conway's weights, run them in llama.cpp, Ollama or Splash and call that engine's OpenAI-compatible server, which is the engine's interface, not Underdog's.
- Check the licence before commercial use. Conway's weights are CC BY-NC 4.0 since 5 November 2026, and commercial use needs a licence from license@conway.tech.
- Don't rely on the
husky servecommand on the husky-flash card. Its Greyhound repository isn't public.
Questions
Which is better for AI agents, Khoj or Underdog?
Khoj scores 35.8 (F) on agent readiness against Underdog's 14.4 (F), and leads in 5 of 7 scored categories. Underdog leads on maintenance & community.
Are Khoj and Underdog open source?
Khoj is open source (AGPL-3.0-or-later). No open-source release is listed for Underdog.
Other comparisons with Khoj or Underdog
- AnythingLLM vs Khoj
- AnythingLLM vs Underdog
- Berth vs Khoj
- Berth vs Underdog
- BitRun vs Khoj
- BitRun vs Underdog
- Docker Model Runner vs Khoj
- Docker Model Runner vs Underdog
- Foundry Local vs Khoj
- Foundry Local vs Underdog
- Core vs Khoj
- Core vs Underdog
- GPT4All vs Khoj
- GPT4All vs Underdog
- HyperQwen vs Khoj
- HyperQwen vs Underdog
- Jan vs Khoj
- Jan vs Underdog
- Khoj vs KoboldCpp
- Khoj vs Lemonade
- Khoj vs llama.cpp
- Khoj vs LM Studio
- Khoj vs LocalAI
- Khoj vs MLX LM
- Khoj vs Ollama
- Khoj vs Open WebUI
- Khoj vs TextGen
- Khoj vs vLLM
- KoboldCpp vs Underdog
- Lemonade vs Underdog
- llama.cpp vs Underdog
- LM Studio vs Underdog
- LocalAI vs Underdog
- MLX LM vs Underdog
- Ollama vs Underdog
- Open WebUI vs Underdog
- PrivateGPT vs Underdog
- screenpipe vs Underdog
- TextGen vs Underdog
- Underdog vs vLLM
- AI Memory vs Khoj
- Context Mode Engine vs Khoj
- Graphicle vs Khoj
- Khoj vs LocalGhost
- Khoj vs PrivateGPT
- Khoj vs screenpipe
Disclosure
Khoj competes with LocalGhost, which Anchor Terminal's founder builds, and LocalGhost's own about page names it as a competitor. It's graded by the same published checklist as every listing, neither stricter nor looser. Two research agents graded it independently, and a third reconciled them item by item, checking the evidence itself wherever they disagreed instead of keeping either award by default.
Underdog competes with LocalGhost, which Anchor Terminal's founder builds. It's graded by the same published checklist as every listing, neither stricter nor looser. Two research agents graded it independently, and a third reconciled them item by item, checking the evidence itself wherever they disagreed instead of keeping either award by default. underdog.ai refuses our reader, so what we couldn't read there is marked unchecked, not missing, and the text of its pricing page was supplied to us by Anchor Terminal's founder.
Machine-readable
- This page as Markdown
/compare/khoj-vs-underdog.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/khoj.json·/api/v1/tools/underdog.json - From a terminal
anchor compare khoj underdog(the CLI) - Over MCP
compare_tools {"a": "khoj", "b": "underdog"}at/mcp, no key