using zigman in practice
zigman puts the Zig language reference one keystroke away — for when you're mid-edit and can't remember the exact form of a builtin, a switch prong, or a sentinel type, and don't want to lose your place to a browser. this is the practical playbook.
the one habit
when you're unsure how a Zig *language* feature is spelled or behaves, look it up instead of guessing:
zigman casting
you don't need the exact section name. type the word you have in your head — zigman resolves it to the obvious section, and only asks you to choose when it's genuinely ambiguous.
zigman optional # opens "Optionals"
zigman error union # opens "Error Union Type"
zigman comptime # opens "comptime"
zigman sentinel # ambiguous -> lists Sentinel-Terminated Arrays / Pointers / Slices
when you don't know the word
browse or filter the table of contents, then open one:
zigman -l # every section, indented by depth
zigman -l error # just the sections about errors
zigman labeled block # multi-word: lists Blocks, Labeled-switch/while/for
the rule of thumb: zigman -l <word> to find the name, then zigman <name> to read it.
everyday workflows
- **a compile error names a concept you're shaky on** — read that section first.
zig build complains about @intCast arity? zigman @intCast shows the current single-argument form.
- **you forget exact syntax mid-write** —
zigman for(loop captures + index),
zigman switch (prongs, ranges, exhaustiveness), zigman slices (slicing semantics).
- **you're reviewing and want to be sure before asserting "Zig does X"** — look it up
rather than trusting memory; the reference is the source of truth.
- **you need an older release's behavior** — pin the version:
zigman -V 0.15.1 comptime
- **you'd rather see it in the browser** (full page, links, search) — open the section
there instead: zigman -o comptime
it composes
output is plain markdown on stdout, so pipe it anywhere:
zigman comptime | glow - # pretty-render
zigman switch | rg -i "inline" # grep within a section
zigman -l | fzf # fuzzy-pick a section to read
on a terminal it pages through $PAGER (default less -FRX); piped, it stays raw.
using zigman from an AI agent
zigman ships an agentskills.io skill at skills/zigman/SKILL.md. the behavior it installs is simple and high-value: *read the reference instead of guessing Zig semantics.* it works in any skills-aware harness (Claude Code, opencode, Pi, Cursor, …) — point the client at the skill directory and make sure the zigman binary is on PATH. the agent then runs zigman <topic> (via its shell tool) before writing tricky Zig, which measurably reduces version-stale guesses like the old @intCast(u8, x) form.
print the skill, or a shell completion, straight from the binary:
cat "$(dirname "$(command -v zigman)")"/../skills/zigman/SKILL.md # if installed from source
zigman --completions zsh # tab-complete section names
what zigman is not
zigman covers the **language**, not the standard library. for std.ArrayList, std.Io, std.fmt, allocators, and the rest, read the std source directly — zig env reports .std_dir (a path relative to $HOME):
rg --type zig 'pub fn ' "$HOME/$(zig env | sed -n 's/.*\.std_dir = "\(.*\)",/\1/p')/array_list.zig"
install & source
curl -fsSL https://nate.tngl.io/zigman/install.sh | sh, or build from source with zig build (zig 0.16+). source and issues: tangled.org/zzstoatzz.io/zigman.