zread skill
zread is a CLI that generates wiki documentation from code in the current
workspace using an LLM. Output lives under ./.zread/wiki/ in the workspace;
public repos can also be viewed at https://zread.ai.
This skill is intended for agent use. Read generated files directly from disk,
and use --stdio as the default mode for any zread command instead of trying
to parse the human TUI.
On-disk layout (read these directly)
Always run zread from the workspace root. After a successful generation:
./.zread/wiki/current — text file containing the active version id
(e.g. 2026-03-12-010203).
./.zread/wiki/versions/<id>/wiki.json — TOC: {id, generated_at, language, pages: [{slug, title, file, section, group, level}]}.
./.zread/wiki/versions/<id>/<file> — page markdown referenced by pages[*].file.
./.zread/wiki/drafts/ — in-progress generation; presence means a previous
run did not finish. drafts/wiki.json exists once the catalog phase
completed.
~/.zread/config.yaml — global config (LLM provider, language, concurrency).
~/.zread/login.json — presence indicates the user has logged in.
To answer questions about a codebase that already has zread output, read these
files directly with the file tools — do not invoke zread browse.
Commands
| Command |
Purpose |
Key flags |
zread generate |
Generate wiki for cwd |
-y/--yes, --draft resume|clear|cancel, --skip-failed, --stdio |
zread browse |
Serve docs at http://localhost:9681+ and open browser |
--generate, --version <id>, --host, --port, --stdio |
zread login |
OAuth into BigModel/Z.AI to obtain an API key |
--custom, --model, --stdio |
zread config |
Edit ~/.zread/config.yaml |
--stdio |
zread update |
Self-update CLI |
--stdio |
zread version |
Print version |
--stdio |
--stdio is supported on every command and turns the process into a JSON-line
machine protocol on stdin/stdout. See
references/stdio-protocol.md for the wire
format (events, waiting_for, done, quit). Load it whenever zread is
invoked from another program/agent.
Decision tree for an AI agent
User wants to read existing wiki content?
- Check
./.zread/wiki/current. If present, read wiki.json and the page
markdown directly. No CLI invocation needed.
- For known public GitHub repos, prefer the
mcp__zread__* tools
(get_repo_structure, read_file, search_doc) over running the CLI.
User wants to (re)generate docs?
- Confirm with the user first —
generate is long-running, calls an LLM,
and writes files. Get explicit consent in unfamiliar directories.
- Verify
~/.zread/login.json exists or ~/.zread/config.yaml has an
llm.api_key. If neither, run zread login first.
- If
./.zread/wiki/drafts/ exists, decide:
- resume previous run →
zread generate --draft resume -y
- throw away and start fresh →
zread generate --draft clear -y
- Otherwise:
zread generate -y.
- To not block on a few failing pages: add
--skip-failed.
User wants to view docs in a browser?
zread browse (add --generate to bootstrap if no wiki exists yet).
User wants to script zread / consume output programmatically?
- Use
--stdio and follow stdio-protocol.md. Do not screen-scrape the TUI.
Non-interactive invocation rules
- Always pass
-y to generate when running unattended; otherwise it stops
at a catalog confirmation gate.
- Always set
--draft explicitly when a draft may exist, so the command does
not prompt.
- For any command run from another agent/script, use
--stdio so output is
parseable JSON instead of ANSI TUI frames.
zread writes logs to ~/.zread/log/zread.log — read this if a run fails
silently.
Safety / blast radius
generate consumes LLM tokens (real cost) and can run for many minutes on
large repos. Confirm before launching.
generate writes only under ./.zread/ and does not commit anything to
git. It is safe to delete ./.zread/wiki/drafts/ to recover from a stuck
state.
update replaces the zread binary in place and is hard to reverse — only
run it when the user explicitly asks.
login opens a browser for OAuth; do not run it in a non-interactive
context unless the user has asked for it.
Reference files
1---2name: zread3description: Produce and consume a wiki-style knowledge base for a code repository via the `zread` CLI and its on-disk output under `./.zread/wiki/`. Use this skill whenever the user wants to understand, onboard onto, explore, summarize, map, or get an overview of an unfamiliar codebase; asks for architecture docs, a project wiki, a repo walkthrough, module/package explanations, or "what does this repo do"; wants to generate, regenerate, resume, browse, or serve code documentation locally; or mentions zread / zread.ai directly. Also use it proactively before diving into a large unknown repo — if `./.zread/wiki/current` exists, read the generated pages instead of crawling source file-by-file; if it doesn't, consider offering to run `zread generate`. The trigger is the intent (understand a codebase through generated docs), not the literal word "zread".4---56# zread skill78`zread` is a CLI that generates wiki documentation from code in the current9workspace using an LLM. Output lives under `./.zread/wiki/` in the workspace;10public repos can also be viewed at https://zread.ai.1112This skill is intended for agent use. Read generated files directly from disk,13and use `--stdio` as the default mode for any zread command instead of trying14to parse the human TUI.1516## On-disk layout (read these directly)1718Always run `zread` from the workspace root. After a successful generation:1920- `./.zread/wiki/current` — text file containing the active version id21 (e.g. `2026-03-12-010203`).22- `./.zread/wiki/versions/<id>/wiki.json` — TOC: `{id, generated_at, language,23 pages: [{slug, title, file, section, group, level}]}`.24- `./.zread/wiki/versions/<id>/<file>` — page markdown referenced by `pages[*].file`.25- `./.zread/wiki/drafts/` — in-progress generation; presence means a previous26 run did not finish. `drafts/wiki.json` exists once the catalog phase27 completed.28- `~/.zread/config.yaml` — global config (LLM provider, language, concurrency).29- `~/.zread/login.json` — presence indicates the user has logged in.3031To answer questions about a codebase that already has zread output, read these32files directly with the file tools — do not invoke `zread browse`.3334## Commands3536| Command | Purpose | Key flags |37|---|---|---|38| `zread generate` | Generate wiki for cwd | `-y/--yes`, `--draft resume\|clear\|cancel`, `--skip-failed`, `--stdio` |39| `zread browse` | Serve docs at http://localhost:9681+ and open browser | `--generate`, `--version <id>`, `--host`, `--port`, `--stdio` |40| `zread login` | OAuth into BigModel/Z.AI to obtain an API key | `--custom`, `--model`, `--stdio` |41| `zread config` | Edit `~/.zread/config.yaml` | `--stdio` |42| `zread update` | Self-update CLI | `--stdio` |43| `zread version` | Print version | `--stdio` |4445`--stdio` is supported on every command and turns the process into a JSON-line46machine protocol on stdin/stdout. See47[references/stdio-protocol.md](./references/stdio-protocol.md) for the wire48format (events, `waiting_for`, `done`, `quit`). Load it whenever zread is49invoked from another program/agent.5051## Decision tree for an AI agent52531. **User wants to read existing wiki content?**54 - Check `./.zread/wiki/current`. If present, read `wiki.json` and the page55 markdown directly. No CLI invocation needed.56 - For known *public* GitHub repos, prefer the `mcp__zread__*` tools57 (`get_repo_structure`, `read_file`, `search_doc`) over running the CLI.58592. **User wants to (re)generate docs?**60 - Confirm with the user first — `generate` is long-running, calls an LLM,61 and writes files. Get explicit consent in unfamiliar directories.62 - Verify `~/.zread/login.json` exists or `~/.zread/config.yaml` has an63 `llm.api_key`. If neither, run `zread login` first.64 - If `./.zread/wiki/drafts/` exists, decide:65 - resume previous run → `zread generate --draft resume -y`66 - throw away and start fresh → `zread generate --draft clear -y`67 - Otherwise: `zread generate -y`.68 - To not block on a few failing pages: add `--skip-failed`.69703. **User wants to view docs in a browser?**71 - `zread browse` (add `--generate` to bootstrap if no wiki exists yet).72734. **User wants to script zread / consume output programmatically?**74 - Use `--stdio` and follow stdio-protocol.md. Do not screen-scrape the TUI.7576## Non-interactive invocation rules7778- Always pass `-y` to `generate` when running unattended; otherwise it stops79 at a catalog confirmation gate.80- Always set `--draft` explicitly when a draft may exist, so the command does81 not prompt.82- For any command run from another agent/script, use `--stdio` so output is83 parseable JSON instead of ANSI TUI frames.84- `zread` writes logs to `~/.zread/log/zread.log` — read this if a run fails85 silently.8687## Safety / blast radius8889- `generate` consumes LLM tokens (real cost) and can run for many minutes on90 large repos. Confirm before launching.91- `generate` writes only under `./.zread/` and does not commit anything to92 git. It is safe to delete `./.zread/wiki/drafts/` to recover from a stuck93 state.94- `update` replaces the zread binary in place and is hard to reverse — only95 run it when the user explicitly asks.96- `login` opens a browser for OAuth; do not run it in a non-interactive97 context unless the user has asked for it.9899## Reference files100101- [references/stdio-protocol.md](./references/stdio-protocol.md) — JSON-line102 wire protocol shared by every command's `--stdio` mode. Load when103 programmatically driving zread.