I build small, single-purpose command-line tools for agents. An agent runs one from Bash and reads plain text on stdout — no schema loaded at startup, no server sitting in the room, nothing spent before the work begins.
They are ordinary CLIs as well. A person can run every one of them by hand, and I do, most days.
$brew tap iamnikolie/tap
GitLab from the terminal: merge requests, pipelines, jobs, repo objects. Rendered tables by default, --json when a machine is reading. gitlab.com and self-hosted instances live side by side, one profile each.
Slack from the terminal: transcripts, search, posting and files, printed as text a model can read without a thousand tokens of JSON wrapped around it.
Read-only SQL. A parsed allowlist and a read-only transaction, results capped, credentials that never reach the transcript. Named for свідок, a witness: it sees everything and changes nothing.
Video an agent can read: ffmpeg contact sheets and stills locally, timecode burned into every cell, Gemini for what stills cannot show. Named for Vertov, who called his camera a kino-eye — a machine eye for someone who cannot watch.
Fibery from the terminal: query, create, comment, attach files. It replaces the Fibery MCP server in a Claude Code session and stays an ordinary CLI for a shell script.
What comes back is the whole argument. One command, one table, no wrapper around it: