You can't tell what your agent doesn't know until the code breaks

AI coding agents return outdated code and hallucinate apis — confidently. fugg gives them docs matched to the version in your project, read like files (ls, cat, grep), frozen when published.

$curl -fsSL https://fugg.dev/install | sh
beta — invite-only

the problem, shown

without fugg
~/app — agent session
add embeddings for the doc chunks
I'll add embeddings with the OpenAI API.
Update(embed.py)
+ response = openai.Embedding.create( + model="text-embedding-ada-002", ...)
Bash(python embed.py)
APIRemovedInV1: openai.Embedding is no longer supported in openai>=1.0.0
Let me look this up.
WebSearch("openai python embeddings api")
10 results — v0.28 tutorials, migration threads, three different answers
WebFetch(github.com/openai/openai-python/discussions/742)
40k characters into context
Update(embed.py)
Bash(python embed.py)
done — eventually
25 tool calls30k tokenseventually right
with fugg
~/app — agent session
add embeddings for the doc chunks
Checking the docs for your openai version first.
Bash(fugg grep -n 'embeddings' /docs/openai/api/latest/)
guides/embeddings.md:42: client.embeddings.create(
Bash(fugg sed -n '38,52p' /docs/openai/api/latest/guides/embeddings.md)
15 lines — the exact section, from the frozen snapshot
Update(embed.py)
+ client.embeddings.create( + model="text-embedding-3-small", input=chunks)
Bash(python embed.py)
done — runs on the first try
3 calls3k tokensright first try

how it plugs in

  • 1 — install

    one command puts the fugg cli on your machine. works with any agent that can run shell commands — claude code, cursor, codex, your own.

  • 2 — tell your agent once

    add one line to your agent's instruction file (CLAUDE.md, AGENTS.md): "check docs with fugg before using an external api." that's the whole integration.

  • 3 — it just reads

    from then on the agent runs fugg grep and fugg cat on its own, the same way it reads your project files. nothing else to configure.

read docs the way your agent reads files

Your agent already runs ls, cat, and grep on your code all day. fugg is just more files. No mcp server to configure, no tool catalog loaded into context, nothing new to learn — one line in your agent's instructions and it starts reading. It pulls the section it needs, not the whole site.

$ fugg ls /docs/vercel/nextjs/latest/
README.md getting-started/ guides/ migrations/
$ fugg grep -n 'proxy' /docs/vercel/nextjs/latest/migrations/v16-upgrade.md
633:## `middleware` to `proxy`
641:mv middleware.ts proxy.ts
$ fugg sed -n '633,646p' /docs/vercel/nextjs/latest/migrations/v16-upgrade.md
… 14 lines into context, not a 600-line page …

frozen after publish

$ fugg cat /docs/expo/docs/sdk-50/sdk/sqlite.md | shasum
3f9c11a2c88d…e4a1 # aug 12
$ fugg cat /docs/expo/docs/sdk-50/sdk/sqlite.md | shasum
3f9c11a2c88d…e4a1 # aug 27 — identical
$ fugg head -3 /docs/expo/docs/sdk-50/sdk/sqlite.md
site: expo/docs version: sdk-50

Once a snapshot publishes, it doesn't change — the same bytes this week and next, so the same question gets the same answer. Every read says exactly which snapshot it came from: site, version, file, lines. Want a different version? Ask for it: latest, v15, whatever.

how it goes

01 — you ask

you hand your agent an ordinary task: add embeddings for the doc chunks.

02 — it guesses

training data is a year old. the agent writes the old openai api — it looks right, and it breaks. the web-search detour that follows burns your quota.

03 — with fugg, it checks

the agent greps the docs for the version you're actually on — frozen, version-matched, exact — and reads 15 lines, not a whole site.

04 — you merge

the diff on your screen runs on the first try. 3 calls, 3k tokens, done.

one session
> add embeddings for the doc chunks
agent writes, from training data:
  response = openai.Embedding.create(...)
[err] APIRemovedInV1 — gone in openai>=1.0.0
web search: three contradicting answers, 40k characters… 25 calls, 30k tokens
$ fugg grep -n 'embeddings' /docs/openai/api/latest/
guides/embeddings.md:42: client.embeddings.create(
$ fugg sed -n '38,52p' …/guides/embeddings.md
… 15 lines — the current api, verbatim …
agent writes:
  client.embeddings.create(
    model="text-embedding-3-small", input=chunks)
[done] runs on the first try — 3 calls, 3k tokens

already tried something?

  • context7 & docs mcps

    they search an index and send your agent whatever ranks best — and the index updates under you. fugg doesn't rank anything: your agent reads a fixed docs tree for the version you name, and the same read returns the same bytes.

  • web search

    the agent skims some page and paraphrases it — you can't tell which page, or for which version. every fugg read carries its address: site, version, file, line range. open the same path and you'll read the same words it did.

  • your own rag pipeline

    chunking, embeddings, re-indexing every release — a pipeline you maintain forever. fugg is just files. nothing to re-index, nothing to re-rank.

FUGGbench Leaderboard

Every entry is a curated, versioned snapshot agents can shell into. FUGGbench scores each corpus on how well it can be navigated, parsed, and grounded by an LLM — not just whether it exists.

preview
SiteScoreStructFreshVersionCold NavScored
92969592842h ago
90959590804h ago
88929584866h ago
86889578823h ago
85909586704h ago
82859580785h ago
78808888707h ago
68609050648h ago

about

fugg is an agent tool that gives your agent shell access to a frozen, versioned set of docs for the library versions you actually use. built by General Frontier.

  • agent-first built for agents to read, not humans to browse
  • plain files, plain commands if your agent can read a file, it can use fugg

get it running

$curl -fsSL https://fugg.dev/install | sh

then fugg sites lists everything that's indexed. one line in your agent's instructions, and it reads for itself.