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 commands/watt-mind/factory/factory-triagegit clone --depth 1 https://github.com/watt-mind/factoryWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/watt-mind/factory/factory-triage)<a href="https://agentmods.dev/commands/watt-mind/factory/factory-triage"><img src="https://agentmods.dev/badge/commands/watt-mind/factory/factory-triage.svg" alt="Measured on agentmods" height="20"></a>What 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.00000 | $0.02110 |
| Opus 5 | $0.00000 | $0.01055 |
| Sonnet 5 | $0.00000 | $0.00422 |
| Haiku 4.5 | $0.00000 | $0.00211 |
Grade A, and why
factory-triage 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 4d ago.
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 — 52 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Triage the open Linear issues for the repository I'm currently in: turn raw Triage tickets into fully specified, agent-dispatchable ones where possible.
Resolve the team from the repo via config/repos.yaml (docs/protocol.md §1). Use factory ticket; on failure retry once then fall back to factory ticket raw per the floor. Interpret $ARGUMENTS as specific issue IDs, a max count, or "all" (workspace-wide); default is this repo's team, up to 10 issues.
Claim what you are triaging
Before working an issue, mark it so it appears in Agents In Flight and no other agent picks it up: set assignee to yourself and add ai:in-progress + agent:<your-harness>. Leave the state alone — a ticket being specified is still Triage; In Progress means implementation is underway and would misrepresent it.
Remove ai:in-progress when you finish that issue, whether you promoted it, held it, or closed it. A claim marker left behind makes a finished ticket look live forever. (The reaper clears stale ones after 45 minutes of silence, but relying on that means a lost 45 minutes.)
Claim one issue at a time as you get to it, not all of them up front — a batch claimed and then abandoned blocks the queue for everything you never reached.
Answered holds come first. Before the Triage pile, check for tickets carrying ai:blocked (in Blocked or Triage) that have a comment newer than the label's application — the orchestrator's gate resurfaces exactly these, and a human answer that sits unread costs a round-trip through the slowest part of the pipeline. For each: read the reply, remove ai:blocked, then re-run promote-or-hold below with the answer in hand (and record the decision in the product-decisions doc where it belongs). If the reply doesn't actually resolve the hold, comment a sharper question and re-add ai:blocked — removing and re-adding is required, not optional: the fresh label event is what resets the orchestrator's reply detection, and a hold that keeps the old label event gets re-examined every tick forever.
For each issue in Triage state, plus any Todo issue that is missing the ai:agent-ready label or carries it without actually satisfying §5 (see step 0 below):
- Run the mechanical template guard first, don't re-derive it by hand.
factory label-guard --repo <this repo> --applychecks everyTodo+ai:agent-readyticket in scope for the two §5 sections that are mechanically load-bearing —Owned Paths(what dispatch's collision check reads) andVerification Command/an evidence line (what "done" runs) — and demotes anything failing straight toTriagewith a comment, no LLM judgment needed for that part. Run it before working theTriagepile so those demotions are already in it. It deliberately does not checkProblem & Context/Acceptance Criteria/Source File Pointers— those vary too much in legitimate format to check safely by regex (an early version did, and flagged an Urgent, fully-actionable ticket as broken). So still use judgment on anything that looks off in those three sections as you work a ticket normally — the guard catches the mechanical case (a ticket like CLNT-871/872, built from a 4-section support-ticket format rather than the §5 template), not spec-quality judgment calls. - Sanity check — is it a duplicate of an existing issue, already fixed in the codebase or git history, or obsolete? If so, say which and mark it (duplicate → link + cancel, fixed → comment with evidence + close). Check "already fixed" against
origin/<base>, per the floor's Checkout freshness rule — a behind-trunk working tree answers this question wrong in the expensive direction. Confirm with me before canceling anything non-obvious. - Specify — investigate the codebase enough to write the full §5 AI-ready template:
Problem & Context, observableAcceptance Criteria,Source File PointersandOwned Paths(strictly verify path existence onorigin/<base>for all entries inSource File PointersandOwned Pathsprior to promoting toai:agent-ready— a pointer or owned path to a nonexistent or moved path breaks concurrency checks or sends the implementation agent to a file that isn't there), and aVerification Commandthat actually runs in this repo. Assess verification gate adequacy: ensure the command tests the ticket's primary failure mode and is not blind to its primary risk (e.g. typecheck commands covering excluded directories, or vacuous test suites); when gates are known-weak or have coverage gaps, explicitly document compensating checks or verification gaps in the description. For non-code work, the evidence line replaces the verification command. - Route — correct project, canonical
type:*+area:*labels, evidence-based priority. Add thesource:*label if missing (source:humanfor owner-filed items,source:agent/source:sentry/source:client-supportby origin) — triage is the backstop that keeps source attribution complete. Read the issue's current state before writing — the GitHub integration may have moved it already.
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.
- 4d ago First seen · 52 lines · 0 tokens per session scan A 20d538ca3c73
factory-triage is a command published in the GitHub repository watt-mind/factory (12 stars, last pushed today), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 2,110 tokens. 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-31.
Other commands, from other repositories
release
Prepare, cut, and verify a warren release — tracker audits, version bump, CHANGELOG curation, ROADMAP update, push, then watch the pipeline through to published artifacts.
check
Run the full local quality gate — TypeScript check, build, dependency audit (prod-only), skill registry validate. Fast pre-commit / pre-suggestdeploy sweep.
app-init
Start a new mobile app project — runs requirements intake, then CEO vision, then PRD + architecture in parallel.
app-status
Show the current state of the project — vision, sprint goal, board, blockers, daily report.
app-recover
Recover an interrupted run — reconcile the ledger, the board, the worktrees and the wave, then restart from a known state.
app-context
Create a deterministic provenance manifest before an agent starts work.