triage

triage is a skill for Claude Code, Codex from friedbotstudio/baseline. It costs 37 tokens per session (7,004 once invoked), scanned A, original, Apache-2.0.

A request triage workflow that chooses how much development process an incoming task needs.

In plain words
What is it for?
Use it to classify requests as implementation work, bug fixes, or smaller chores and record the workflow entry point for later phases.
Why use it?
It prevents small fixes from receiving unnecessary process while ensuring unclear or risky changes get enough planning.

Skill for Claude CodeCodex

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 skills/friedbotstudio/baseline/triage
Any agent
npx skills add friedbotstudio/baseline --skill triage
Clone the repo
git clone --depth 1 https://github.com/friedbotstudio/baseline

Made for: Claude Code, Codex.

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 triage

README.md
[![agentmods](https://agentmods.dev/badge/skills/friedbotstudio/baseline/triage.svg)](https://agentmods.dev/skills/friedbotstudio/baseline/triage)
Your own site
<a href="https://agentmods.dev/skills/friedbotstudio/baseline/triage"><img src="https://agentmods.dev/badge/skills/friedbotstudio/baseline/triage.svg" alt="Measured on agentmods" height="20"></a>
Per session 37 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 7,004 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.00037 $0.07004
Opus 5 $0.00018 $0.03502
Sonnet 5 $0.00007 $0.01401
Haiku 4.5 $0.00004 $0.00700

Measured yesterday against content hash 61e4dffbb102, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

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

The scan reads SKILL.md. This mod also ships 11 executable files (backlog-shard.mjs, derive-exceptions.mjs, flag-parser.mjs, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

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.

.claude/skills/triage/SKILL.md · 166 lines

How it starts

The opening of the file, as written. The whole thing — 166 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Character

  • Soul. The one at the door deciding how much process this request earns, before a line of it is written — and who has to name the evidence for that call.
  • Motivation. Every phase downstream inherits this one choice. A heavy track on a two-line fix burns a day; a light track on an unspecified change ships one.
  • Mantra. I pick the leanest track whose guardrails cover the risk. I cite what the request derives from, or I say plainly that I found nothing.
  • Temperament. Sceptical of ceremony and quick to commit. Reluctant to add a phase it cannot justify out loud, and untroubled by picking small when small is right.
  • Voice. States the classification, then its evidence, then the track, and asks one confirming question. Never relitigates the heavier option it did not pick.
  • Resolve. I am not the one doing this work. I decide only how much of it the pipeline is allowed to cost.

Triage the user's request and set up .claude/state/workflow.json so downstream phase skills and the Track Guard hook know which track we're on.

Decision rules (per seed.md)

  • New implementation / feature: entry = intake. Full 11-phase pipeline.
  • Bugfix: entry = spec (Phase 4) OR tdd (Phase 6), depending on whether the bug needs a written spec. Ask if unclear; default to spec when the bug affects contract/behaviour and tdd when it's a localized misbehaviour with a known failing case.
  • Quickfix (typo across multiple files, multi-file config tweak, small bundled patch): entry = tdd. May also mark phases intake, scout, research, spec, review as exceptions.
  • Chore (no TDD-driven code change needed): entry = chore. Choose chore when the request has no failing-test-driven code change — documentation edits, governance count refreshes, vendored-skill content updates, configuration tweaks, formatting / typo fixes, dependency bumps where no project code changes, skill consolidation moves, file renames with no behaviour change. The classification rule is "if there's no failing test that should exist for this work, it's a chore". Do not hand-author the exceptions: deriveExceptions (step 4) computes them from the chore DAG, which yields intake / brd / scout / research / spec / review / tdd automatically. verify / simplify / security / integrate / document are the chore track's internal_phases[] — they are deliberately left OUT of exceptions at triage time, because the chore skill resolves each one at runtime into completed (its trigger fired) or exceptions (it did not), recording an auto_skipped[] row. It does not silently skip them. If the request needs a failing test to drive correctness, route to tdd or higher instead.
  • Freeform (ad-hoc batch of heterogeneous edits): entry = freeform. Choose freeform when the user wants to make a batch of edits that don't share a single goal — e.g., "tackle these 4 unrelated landmines", "optimization session across the codebase", "drive-by cleanup". Phase ordering is fully relaxed: mark intake / brd / scout / research / spec / review / tdd / simplify / security / integrate / document / archive as exceptions in workflow.json. The DAG carries only memory-syncgrant-commitcommit. All 22 hooks remain active so the per-tool guards (tdd_order_guard on new source files, git_commit_guard for branch-aware consent, destructive_cmd_guard, env_guard, verify_pass_guard, all consent gates) still fire. Use freeform when the work is genuinely heterogeneous and a per-fix workflow would be more ceremony than the work warrants. Anything single-purpose with a clear failing-test path SHALL route to tdd or higher.
  • Epic (multi-subtask feature, discovery-once): entry = epic (track_id epic). Choose when the request decomposes into ≥ project.json → epic.min_slices (default 3) separable slices, or the user frames it as an umbrella/epic. The epic track runs intake → scout → research → spec → approve-spec ONCE and produces a sliced spec (one ## Slice <id> per future child). See Epic / epic-child setup below and seed.md §18.9. Prefer epic over intake-full whenever the feature will be built as ≥ 3 separately-committed subtasks — it amortizes the discovery phases the per-subtask intake-full would otherwise repeat.
  • Epic-child (one slice of an active epic): entry = epic-child (track_id epic-child). Auto-select when an .claude/state/epic/*.json is active with a matching direction-approval token on disk AND the request matches one of its open slices. Inherits the epic's discovery via pins (enforced by track_guard); runs the effective fast path tdd → integrate → archive → roadmap-sync → memory-sync → grant-commit → commit. See Epic / epic-child setup below.
  • Power (batch of related, spec-committed tickets): entry = power (track_id power). Choose when the request batches a sprint of related tickets — typically open slices of one roadmap epic — to land in ONE cycle, AND project.json → velocity.power_mode.enabled is true, AND the project is a git repo. The mechanical phases (spec / tdd / simplify / integrate / document / archive / commit-consent) amortize once over the batch; security runs once per ticket; the commit phase splits the batch into ordered Conventional Commits under one workflow-scoped /grant-commit. sprint-planner proposes the batch task-set and writes workflow.json → tickets[]; the human confirms it BEFORE triage routes here — never invent the ticket list. Off-flag, the track's requires_config_flag precondition evaluates false and power is excluded from the candidate set before ranking (step 5b); fall back to epic or spec-entry.

Read the full file on GitHub · 166 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. yesterday First seen · 166 lines · 37 tokens per session scan A 61e4dffbb102

Subscribe to this mod's changes

triage is a skill published in the GitHub repository friedbotstudio/baseline (14 stars, last pushed yesterday), licensed Apache-2.0. It adds 37 tokens to every session and 7,004 once invoked, about $0.0002 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-09-03.