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.