The canonical CLI for Lob — direct mail, address verification, and campaigns. For humans and AI agents.
brew install voska/tap/loby
All 29 v1 resources behind one binary. Mailers, verifications, campaigns, lookups — same flag conventions, same JSON envelope, same exit codes.
Structured stdout, hints on stderr, never mixed. Every mutation is reversible by intent: --dry-run, idempotency keys, semantic exit codes.
--json · default for agents--plain · tab-separated--select id,to.city--dry-run on every write--results-only strips envelope--quiet for bare IDsSingle static Go binary, zero runtime dependencies. Hand-rolled net/http over Lob's API — no third-party HTTP client, no junk transitive deps.
net/httpThe skill is a plain SKILL.md file plus three reference docs — works with any agent framework that reads the canonical ~/.{agent}/skills/<name>/SKILL.md layout (Claude Code, Codex, Factory Droid, etc).
mkdir -p ~/.claude/skills/loby && \
curl -fsSL lobycli.com/skill/SKILL.md \
-o ~/.claude/skills/loby/SKILL.md
Pull the full bundle — SKILL.md plus commands, recipes, and resources — from the same URL space at /skill/. The skill teaches the agent to prefer --json, run --dry-run before live mutations, and use loby schema --json as the source of truth.
loby schema [cmd] --json dumps the full command tree — agents discover the surface without scraping help text.
loby events tail --event-type postcard.created --json emits one NDJSON event per line — pipe into jq or a webhook bridge.
exit codes
Authoritative: loby exit-codes --json