Offline, agent-native CLI for the Agno developer documentation. One HTTP GET → 3,200 pages indexed in SQLite + FTS5 → ~10-30 ms per query.
agno-docs-pp-cli which "how do teams work"
agno-docs-pp-cli context teams
agno-docs-pp-cli examples "PostgresDb" --language pythoncurl -sSf https://raw.githubusercontent.com/sekai1710/agno-docs-pp-cli/main/install.sh | bashThat script:
- checks for the Go toolchain (≥1.26)
- runs
go install -tags sqlite_fts5 github.com/sekai1710/agno-docs-pp-cli/cmd/agno-docs-pp-cli@latest - runs the first
sync(~5 seconds, downloadsdocs.agno.com/llms-full.txtonce) - tells you how to use it
If you prefer manual install:
go install -tags sqlite_fts5 github.com/sekai1710/agno-docs-pp-cli/cmd/agno-docs-pp-cli@latest
agno-docs-pp-cli syncThe sqlite_fts5 tag is required — go-sqlite3 ships FTS5 behind it.
agno-docs-pp-cli doctor # health check
agno-docs-pp-cli sections # map of the docs
agno-docs-pp-cli which "knowledge embedder" -n 3 # top-3 pages
agno-docs-pp-cli context agents # full page body
agno-docs-pp-cli examples "team coordinate" --language pythonEvery leaf command supports --json for agent consumption and --db <path> to override the DB location (default ~/.local/share/agno-docs-pp-cli/data.db).
| Command | What it does |
|---|---|
sync |
Fetch docs.agno.com/llms-full.txt and rebuild the index. Re-run weekly. |
which |
Top-N pages for a topic, with snippet. Start here in any agent workflow. |
find |
Same FTS as which, longer list, CLI-flavoured output. |
context |
Full markdown body of one page (by slug or full URL). |
examples |
Paste-ready code blocks. Filter with --language python|bash|json|yaml. |
sections |
List sections (e.g. models/providers/native) with page counts. |
doctor |
Pages, examples, last sync time, db path. |
version |
Print the CLI version. |
The CLI is framework-agnostic. --json output drops into anything that can shell out.
A complete Agno Toolkit lives at examples/agent-toolkit.py. Copy it into your project and:
from agent_toolkit import AgnoDocsTool
agent = Agent(
model=OpenRouter(id="google/gemini-2.5-flash"),
tools=[AgnoDocsTool()],
instructions=["Always call agno_docs_which before answering Agno questions."],
)Four tools are registered: agno_docs_which, agno_docs_context, agno_docs_examples, agno_docs_sections. All async, all asyncio.to_thread-wrapped, all subprocess-isolated (a CLI crash cannot take down your agent).
- LangChain / LangGraph — wrap as a
Toolviasubprocess.run. - Claude Code / Cursor — call directly from
Bash/MultiEdit. - CrewAI / AutoGen — same subprocess pattern as Agno.
- Shell —
agno-docs-pp-cli which … --json | jq.
docs.agno.com publishes llms-full.txt — every page of the site concatenated into one plain-text markdown file, formatted per the llms.txt convention:
# Approvals
Source: https://docs.agno.com/agent-os/approvals/overview
Manage approval workflows for agents and teams via the AgentOS Control Panel.
...
The CLI is a small pipeline around that single source:
fetch llms-full.txt (10 MB, 1 HTTP GET)
↓
parse on "# Title\nSource: <url>" boundaries (one regexp, no HTML)
↓
SQLite + FTS5 (porter unicode61, content-table + auto-sync triggers)
↓
which / find / context / examples / sections / doctor
Total Go source: ~1,100 lines. No HTML scraper, no headless browser, no auth, no rate limiting — because the source is a single file maintained by the docs team specifically for this purpose.
If an LLM coding agent calls Agno APIs, it needs grounded reference. The three bad alternatives:
- Let it guess. Hallucinated imports, made-up args, dead URLs.
- Web-fetch
docs.agno.com. Slow, HTML parsing, breaks when the site rebuilds. - Scrape and re-scrape. Brittle. Every page change breaks something.
llms-full.txt solves the source problem. This CLI solves the integration problem: turn the 9.9 MB blob into a 30 ms FTS5 query with JSON output suitable for any agent framework.
BLZ is an excellent general-purpose MCP server for any llms.txt source. If you already use BLZ inside an MCP-aware client (Claude Desktop, Cursor's MCP wiring, etc.), point BLZ at https://docs.agno.com/llms-full.txt and you're done.
This CLI is the complementary path:
| Property | BLZ (MCP server) | agno-docs-pp-cli |
|---|---|---|
| Transport | MCP stdio | Standalone CLI binary |
| Setup | Install BLZ + add a source | go install + sync |
| Sources | Any llms.txt |
Agno (this repo) / sibling per-source repos |
| Integrates with | MCP-aware clients only | Any subprocess-capable runtime |
| Where it runs | Beside your MCP client | Anywhere you can exec a binary |
| Domain-specific commands | Generic search | which / context / examples |
| Typical latency | ~50-80 ms | ~10-30 ms |
Pick BLZ when you want one tool that handles many llms.txt sources in MCP clients.
Pick this CLI when you want a single self-contained binary on a server, in CI, or wired into a non-MCP agent.
You can run both side by side.
Generated with Printing Press, with one twist on the usual recipe: instead of mirroring a REST API, the generator is pointed at docs.agno.com/llms-full.txt and emits a docs lookup CLI. The llms-full.txt source path is the same insight the BLZ project popularized for MCP search — here applied to a single Go binary.
The repository also preserves the original benchmark methodology under benchmark/ for reference.
git clone https://github.com/sekai1710/agno-docs-pp-cli
cd agno-docs-pp-cli
make build # ./agno-docs-pp-cli
./agno-docs-pp-cli sync --file ./testdata/llms-full.txt
./agno-docs-pp-cli doctor --json | jq
make install # → $GOBIN/agno-docs-pp-cliOr skip make and use go install -tags sqlite_fts5 ./cmd/agno-docs-pp-cli.
MIT. See LICENSE.