Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/qawolf/cli/agents-mdgit clone --depth 1 https://github.com/qawolf/cliWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.01844 | $0.01844 |
| Opus 5 | $0.00922 | $0.00922 |
| Sonnet 5 | $0.00369 | $0.00369 |
| Haiku 4.5 | $0.00184 | $0.00184 |
Grade A, and why
cli AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 131 lines — stays where its author put it; the contents beside it link to each section on GitHub.
@qawolf/cli — Agent Instructions
CLI for agents, CI, and humans to interact with QA Wolf. TypeScript, Bun runtime, Commander.js framework.
See CONTRIBUTING.md for human contributor setup.
Commands
bun install # install dependencies
bun run dev # run CLI in development
bun run dev -- <args> # pass args to CLI (e.g. -- --help)
bun run build # JS bundle → dist/cli.js + dist/cli.js.map (uses --outdir; bun rejects --sourcemap=external with --outfile)
bun run build:binary # standalone binary → dist/qawolf
bun run typecheck # tsc --noEmit
bun run lint # oxlint
bun run lint:fix # oxlint with auto-fix
bun run format:check # oxfmt check
bun run format # oxfmt write
bun run knip # dead-code / unused-dep detection
bun run test # bun test
bun run test:watch # bun test --watch
Testing
Tests use Bun's test runner. Run a single test file with bun run test <path>. Place test files next to the code they test, named *.test.ts.
Project Structure
src/
├── main.ts # Entry point — createProgram().parse()
├── core/ # Pure functions and types — zero I/O
│ ├── androidBins.ts # Android SDK binary paths per platform
│ ├── androidTargets.ts # Android target parsing helpers
│ ├── batchMap.ts # bounded-concurrency async map
│ ├── errors.ts # errorMessage, isNoEntError, isTimeoutError
│ ├── flowMeta.ts # extractFlowMeta, targetToBrowser, flowBasename
│ ├── formatSeconds.ts # formatSeconds
│ ├── messages/ # user-facing strings (auth, doctor, flows, init, install, runner)
│ ├── nodeModulesBins.ts # node_modules/.bin shim candidates per platform
│ ├── paths.ts # getConfigDir
│ ├── patternArgs.ts # CLI pattern argument parsing
│ ├── pluralize.ts # pluralize
│ ├── sleep.ts # sleep
│ ├── types.ts # BrowserName, VideoMode, TraceMode, HarMode, TestCounts
│ └── version.ts # isNewerVersion
├── shell/ # I/O executors — process spawning, UI, API clients
│ ├── appium/ # Android emulator + Appium server lifecycle
│ ├── commandContext.ts # CommandContext, CommandResult types
│ ├── exit.ts # exitCodes, exit
│ ├── fs.ts # filesystem helpers
│ ├── logger.ts # pino-based structured logger
│ ├── manifest/ # bundle manifest read/lookup
│ ├── npm.ts # resolveNpmCommand
│ ├── npmRegistry.ts # fetchLatestVersion (update-check registry lookup)
│ ├── platform/ # tRPC client, getIdentity, signed-URL/bundle download, team storage
│ ├── reporter/ # Reporter interface, console + JUnit + composite reporters
│ ├── resolveExport.ts # ESM export resolution
│ ├── signals/ # SignalRegistry for graceful shutdown
│ ├── spawn.ts # defaultSpawn, SpawnFn
│ ├── testkit.ts # configureTestkit
│ ├── ui/ # createUI, detectOutputMode, OutputMode (clack + renderers)
│ └── workerCommand.ts # worker-subprocess command wiring
├── domains/ # Business logic — one directory per bounded context
│ ├── auth/ # resolveApiKey, validateApiKey, saveApiKey
│ ├── config/ # loadConfig (not yet wired)
│ ├── doctor/ # runChecks, renderResults
│ ├── emails/ # configureEmails (not yet wired)
│ ├── flows/ # expandPatterns, peekFlowMeta, flowsList, pull/
│ ├── init/ # init handler + templates
│ ├── install/ # installBrowsers, installBrowserList
│ ├── interactiveRunner/ # remote runners: launch, stop, keepalive, runFlow, journal, screenshot, act, exec
│ ├── runner/ # the LOCAL execution engine: flowsRun, runWebFlow, runAndroidFlow, worker dispatch + pool
│ └── updateCheck/ # startUpdateCheck: new-version notice after commands
└── commands/ # Thin CLI glue — Commander registration + composite root
├── context.ts # withContext() Commander action wrapper
├── program.ts # createProgram() factory
├── auth/ # login, logout, whoami handlers
├── doctor/ # doctor handler
├── flows/ # flows run/list/pull handlers; runDefaults composite root
├── init/ # init handler
├── install/ # install browsers/android handlers
└── runner/ # lifecycle/run/interact registrations (domains/interactiveRunner)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 131 lines · 1,844 tokens per session scan A 79bfa97e6c89
cli AGENTS.md is an instructions file published in the GitHub repository qawolf/cli (3,446 stars, last pushed 3d ago), licensed Apache-2.0. It adds 1,844 tokens to every session, about $0.0092 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other instructions, from other repositories
agent-qa AGENTS.md
AGENTS.md instructions for vostride/agent-qa, covering agent-qa agent instructions, branding, repo map, commands and code style.
argus AGENTS.md
Instructions for chriswu727/argus, covering argus — agent guide, setup, web mode (works everywhere), wire it into the mcp host and using argus within the host task.
autoframe CLAUDE.md
Instructions for kint4/autoframe, covering autoframe — claude instructions, what is autoframe?, stack (non-negotiable), file locations and folder structure.
playwright-fieldkit AGENTS.md
Instructions for jpbaking/playwright-fieldkit: Follow the Portable Agent Authoring guides for every skill or harness change.
sniff AGENTS.md
Instructions for Aboudjem/sniff, covering agents.md: sniff, what this repo is, how an agent should use sniff, handling the playwright setup gate and finding output schema.
sniff CLAUDE.md
Instructions for Aboudjem/sniff, covering project, constraints, technology stack, conventions and architecture.