factory-triage

factory-triage is a command for coding agents from watt-mind/factory. It costs 0 tokens per session (2,110 once invoked), scanned A, original, Apache-2.0.

A workflow for finding open Linear issues, a team's tracked work items, and turning suitable ones into tasks an agent can implement.

In plain words
What is it for?
Use it to resolve the repository's Linear team, claim issues one at a time, specify them, and leave unsuitable items unchanged or close them.
Why use it?
It fills in missing requirements and manages assignment labels so issues are clear and not picked up by multiple agents.

Command

Part of the core plugin — 13 commands, 4 agents shipped together

Install

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.

agentmods
npx agentmods add commands/watt-mind/factory/factory-triage
Clone the repo
git clone --depth 1 https://github.com/watt-mind/factory

Or install core, the plugin that ships this one along with the rest of its 13 commands, 4 agents.

Wrote 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.

agentmods badge for factory-triage

README.md
[![agentmods](https://agentmods.dev/badge/commands/watt-mind/factory/factory-triage.svg)](https://agentmods.dev/commands/watt-mind/factory/factory-triage)
Your own site
<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>
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,110 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 4d ago against content hash 20d538ca3c73, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

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.

plugins/core/commands/factory-triage.md · 52 lines

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):

  1. Run the mechanical template guard first, don't re-derive it by hand. factory label-guard --repo <this repo> --apply checks every Todo + ai:agent-ready ticket in scope for the two §5 sections that are mechanically load-bearing — Owned Paths (what dispatch's collision check reads) and Verification Command/an evidence line (what "done" runs) — and demotes anything failing straight to Triage with a comment, no LLM judgment needed for that part. Run it before working the Triage pile so those demotions are already in it. It deliberately does not check Problem & 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.
  2. 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.
  3. Specify — investigate the codebase enough to write the full §5 AI-ready template: Problem & Context, observable Acceptance Criteria, Source File Pointers and Owned Paths (strictly verify path existence on origin/<base> for all entries in Source File Pointers and Owned Paths prior to promoting to ai: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 a Verification Command that 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.
  4. Route — correct project, canonical type:* + area:* labels, evidence-based priority. Add the source:* label if missing (source:human for owner-filed items, source:agent/source:sentry/source:client-support by 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.

Read the full file on GitHub · 52 lines

Changes

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.

  1. 4d ago First seen · 52 lines · 0 tokens per session scan A 20d538ca3c73

Subscribe to this mod's changes

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.