agentleFS
flurdyflurdy/agent-skills/skills/plan-to-backlog/SKILL.md

plan-to-backlog

Skill9 starsChanged 3 months agoMITView on GitHub

Materialize an approved cited plan into proportionate Beads tracking when the user asks for durable ownership. Recommends no item, one item, or a bounded epic; checks owners and duplicates; previews every write; applies only after exact confirmation.

  • Reads credentials

The file

Show its rules and text

We split this skill into the rules it gives an agent

49 rules. About 0 are common, 35 are distinctive, and 14 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈35

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 14

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Do not call /triage to classify or apply the plan.

    line 64
  2. Distinctive:

    Never create one bead per plan step.

    line 70
  3. Distinctive:

    Never infer plan approval from a filename, heading, ticket status, or tracking recommendation.

    line 71
  4. Distinctive:

    Never choose silently between plausible existing owners or duplicates.

    line 73
  5. Distinctive:

    Never add a dependency merely to represent preferred execution order.

    line 74
  6. Distinctive:

    Never close, delete, supersede, or automatically roll back a bead.

    line 75
  7. Very specific:

    Never use bd promote to turn a durable task into an epic.

    line 76
  8. Distinctive:

    Never use a broad graph write in v1.

    line 77
  9. Distinctive:

    Read the complete plan.

    line 94
  10. Distinctive:

    If it cannot be distinguished from drafts or captured exactly, ask the user to save or cite it and stop.

    line 117
  11. Distinctive:

    When a shell heredoc is the only stdin mechanism, use a quoted delimiter that does not occur in the text so no content is expanded or …

    line 122
  12. Very specific:

    If approval is absent or ambiguous, continue only as a read-only preview and set readiness to needs-clarification.

    line 139
  13. Distinctive:

    If no active Beads database is available, render a tracker-neutral breakdown when useful, mark apply unavailable, and stop before …

    line 165
  14. Distinctive:

    Search in this order, using only supported read forms:

    line 168
  15. Distinctive:

    Every child must have:

    line 223
  16. Very specific:

    If fewer children pass, collapse to single-item.

    line 231
  17. Very specific:

    Use stable local references such as owner, child-1, and child-2.

    line 243
  18. Distinctive:

    Default priority is P2 unless source evidence justifies another value.

    line 258
  19. Distinctive:

    Use only these write classes:

    line 273
  20. Very specific:

    Do not include unrelated field edits.

    line 280
  21. Very specific:

    Create a canonical text representation containing proposalVersion, the source fingerprint and normalization, readiness, disposition, items, …

    line 284
  22. Distinctive:

    every proposed/reused item.

    line 308
  23. Distinctive:

    every parent and blocking relationship with rationale.

    line 309
  24. Very specific:

    When readiness is ready and the write set is non-empty, use AskUserQuestion immediately before apply.

    line 319
  25. Distinctive:

    verify every reused ID and relevant graph relationship.

    line 343
  26. Very specific:

    Run every mutation through ~/.agents/skills/plan-to-backlog/scripts/confirmed-bd.sh --directory <directory>, passing the owning store …

    line 351
  27. Very specific:

    run update-type only for a confirmed durable-owner conversion.

    line 372
  28. Very specific:

    run set-parent for confirmed parent links on reused children.

    line 375
  29. Very specific:

    run add-blocker for confirmed genuine blockers after both IDs are resolved.

    line 376
  30. Distinctive:

    stop before operations that depend on the failed result.

    line 396
  31. Distinctive:

    do not claim full application.

    line 399
  32. Distinctive:

    do not delete or roll back successful creations.

    line 400
  33. Distinctive:

    After success, re-read the graph and compare actual IDs, parents, and dependencies with the confirmed proposal.

    line 403
  34. Distinctive:

    Every rerun starts from the source, not from assumptions about the previous session.

    line 409
  35. Distinctive:

    Search by source fingerprint, proposal ref, source citation, title, and outcome.

    line 410
  36. Distinctive:

    Source inaccessible: stop without a disposition or writes.

    line 419
  37. Distinctive:

    Plan too vague: ask focused questions; do not materialize mechanics.

    line 421
  38. Distinctive:

    Required Beads capability unavailable: use a proven permitted fallback or block the affected operation.

    line 425
  39. Distinctive:

    Declined confirmation: no writes.

    line 428
  40. Distinctive:

    Partial failure: stop dependent actions and return the result ledger.

    line 429
  41. Very specific:

    Do not revise the technical plan.

    line 446
  42. Distinctive:

    Do not perform general backlog cleanup discovered during searches.

    line 447
  43. Distinctive:

    Do not create Jira/Trello items or cross-system links.

    line 448
  44. Distinctive:

    Do not create tracker items for tests, commits, agents, reviews, retries, or handoffs.

    line 449
  45. Very specific:

    Do not use raw bd close, bd delete, bd supersede, or bd promote commands.

    line 450
  46. Distinctive:

    Do not bypass the confirmed-action helper for Beads mutations.

    line 451
  47. Distinctive:

    Do not write to a store other than the one resolved or chosen in step 2.

    line 452
  48. Distinctive:

    Do not persist source or proposal text outside its cited source.

    line 453
  49. Distinctive:

    Do not claim transactionality.

    line 454

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Plan to Backlog

Proposal-first. May recommend no backlog change. Never writes without confirmation.

Turn an approved architecture or implementation plan into the smallest justified durable Beads structure. Inspect the cited plan and existing work, decide whether no item, one focused item, or a bounded epic is warranted, preview the exact write set, then apply only that confirmed proposal.

The canonical behavior and thresholds are defined in the plan-to-backlog contract.

When to use

Select this skill dynamically, or through /plan-to-backlog, only when:

  • an /architect or implementation plan has been explicitly approved;
  • the plan has a stable source or exact capturable session text;
  • the user explicitly asks to create or reconcile durable Beads ownership rather than continue planning; and
  • no-item versus single-item versus epic is still a meaningful decision.

The existence or approval of a plan alone is not a trigger. Do not use this skill for raw ideas or Jira intake (/triage), plan refinement (/architect), retrospective backlog quality (/backlog-groom), or cross-system reconciliation (/tracking-sweep or /trello-beads).

Usage

/plan-to-backlog <plan-source>

Accepted sources:

  • repository or workspace Markdown path;
  • Bead ID whose description, design, notes, or linked specification contains the plan;
  • Jira or Confluence key/URL when the runtime can retrieve the complete plan; or
  • the exact current-session /architect result.

There is no invocation that bypasses preview. An initial request to "apply" still follows the full source, proposal, and confirmation procedure.

Ownership boundary

  • /architect owns technical planning and remains read-only.
  • /triage owns unstructured prompt/Jira intake and explicit --human-review tracking of pending human decisions; it hands approved implementation plans here without creating children.
  • /plan-to-backlog alone owns approved implementation-plan disposition, proposal, confirmation, apply, and recovery. It does not establish ownership of an unapproved human decision.
  • /backlog-groom remains retrospective and read-only by default.

Do not call /triage to classify or apply the plan. Similar low-level Beads lookups do not change this skill's ownership of the plan-specific policy.

Safety invariants

  • Stay read-only until the exact proposal has been rendered and confirmed.
  • Never create one bead per plan step.
  • Never infer plan approval from a filename, heading, ticket status, or tracking recommendation.
  • Never choose silently between plausible existing owners or duplicates.
  • Never add a dependency merely to represent preferred execution order.
  • Never close, delete, supersede, or automatically roll back a bead.
  • Never use bd promote to turn a durable task into an epic; it promotes wisps only.
  • Never use a broad graph write in v1; apply individual commands so every result is attributable in the ledger.
  • A changed source, tracker graph, or proposal invalidates confirmation.

1. Resolve and approve the source

Parse <plan-source> and load only the complete plan needed for materialization.

Resolve the installed stdin-only hashing helper at ~/.agents/skills/plan-to-backlog/scripts/sha256-stdin.sh. Never place plan text in shell arguments. File sources use raw bytes. Bead, Jira, Confluence, and session text use --canonical-text, which normalizes UTF-8 text to LF line endings and exactly one trailing newline (utf8-lf-final-newline-v1). Record the selected normalization with the source.

File source

  1. Resolve the path without editing it.
  2. Read the complete plan.
  3. Stream the exact file bytes to the hashing helper through standard input.

Bead source

  1. Resolve the owning store first with ~/.agents/skills/next/scripts/next-select resolve <id>; never infer it from the ID or the current directory. On ambiguous or unavailable, ask or report and stop. Then run bd -C <directory> show <id> --json --include-comments.
  2. Identify the exact description, design, notes, comments, or specification text being consumed.
  3. Stream that exact logical text to the hashing helper's --canonical-text mode through standard input.

Jira or Confluence source

  1. Fetch the cited issue/page with the available connector.
  2. Identify the exact plan body and linked material being consumed.
  3. Stream only the sanitized exact plan text to the hashing helper's --canonical-text mode through standard input.

Session source

  1. Identify the exact finalized plan in the current session.
  2. If it cannot be distinguished from drafts or captured exactly, ask the user to save or cite it and stop.
  3. Stream the exact finalized text to the hashing helper's --canonical-text mode through standard input.

When a shell heredoc is the only stdin mechanism, use a quoted delimiter that does not occur in the text so no content is expanded or truncated. Canonical-text mode makes the heredoc's terminal newline deterministic. Never include credentials, .env contents, keys, tokens, or irrelevant personal data.

Record:

source.kind
source.locator
source.title
source.fingerprint
source.normalization
source.approvalEvidence

Approval must be explicit in the current run or cited from a specific approval statement. If approval is absent or ambiguous, continue only as a read-only preview and set readiness to needs-clarification; apply is unavailable.

2. Gather Beads context read-only

Choose the owning store before any read. New items have no ID yet, so ownership follows outcome (see the beads skill): cross-project work belongs in the validated workspace root store; work wholly owned by one repository belongs in that repository's store. List the candidates read-only:

~/.agents/skills/next/scripts/next-select stores

In local mode (workspace: false) the single local entry owns the work. At a workspace root pick the store whose outcome matches and record its directory; a store listed with usable: false blocks apply for items it would own — report the error, do not fall back to the workspace store. Every later bd read and every helper call uses that directory.

Run:

bd -C <directory> status
bd -C <directory> list --status=open

If no active Beads database is available, render a tracker-neutral breakdown when useful, mark apply unavailable, and stop before confirmation.

Search in this order, using only supported read forms:

  1. bd list --metadata-field plan_source_sha256=<source-fingerprint> --status open,in_progress,blocked,deferred,closed --json. Some Beads versions require a query for bd search even with metadata filters; use the query-free bd list form.
  2. source locator through metadata, external references, specification IDs, descriptions, and notes;
  3. high-signal outcome keywords across open and closed work;
  4. likely owners' parents, children, and dependencies with bd show and bd children.

Inspect high-signal matches rather than auditing the whole backlog. Classify each as:

  • owner — already owns the complete durable outcome;
  • duplicate — competing representation of the same outcome;
  • related — relevant but materially different; or
  • not-relevant — inspected and excluded.

An exact existing owner is reused. Closed work is evidence, not automatically an active owner. If two plausible owners remain, list both with evidence, set readiness to needs-clarification, and ask the user to resolve ownership.

3. Select readiness and disposition

Use this schema:

readiness: ready | needs-clarification
disposition: no-item | single-item | epic

Omit disposition when readiness is needs-clarification and the missing decision could change the shape.

No item

Choose no-item when an existing bead/tree already owns the complete outcome, or the plan contains only execution mechanics under one existing owner. Cite the owner and evidence. The write set is empty and no confirmation is needed.

Single item

Choose single-item when one independently valuable durable outcome remains. Keep coding, tests, review, documentation of the same change, rollout, commits, retries, agents, and handoffs in the item's design or execution checklist.

Epic

Thresholds and the child test below are the shared sizing criteria; this skill applies them to plan disposition.

The normal threshold is three to six direct children. Allow two only when they cross a genuine ownership, repository, release, or independently shippable boundary and the aggregate outcome itself needs tracking. More than six requires clustering or clarification.

Every child must have:

  1. an observable outcome;
  2. its own acceptance evidence;
  3. value if a sibling changes, is delayed, or is omitted;
  4. an independent close/reprioritize/assign lifecycle; and
  5. outcome language rather than work-phase language.

If fewer children pass, collapse to single-item.

A dependency is genuine only when the dependent cannot satisfy its acceptance criteria until the prerequisite outcome exists. Planning order, coding before tests, review after implementation, and shared context do not qualify.

4. Build the proposal

Set proposalVersion to 1 and obtain generatedAt from the no-argument ~/.agents/skills/plan-to-backlog/scripts/utc-now.sh helper. Exclude generatedAt from fingerprint input so time alone cannot invalidate an unchanged proposal.

Use stable local references such as owner, child-1, and child-2. Each proposed item contains:

ref
action: reuse | create | update-type
existingId
type
priority
title
scope
acceptance
sourceCitation

Default priority is P2 unless source evidence justifies another value. Priority never justifies a separate child by itself.

Relationships contain:

kind: parent | blocking
from
to
rationale

Build an ordered logical write set containing stable proposal refs, call templates, and the expected result for every mutation. A template that needs a newly created ID uses an explicit placeholder such as ${owner.actualId}; it never guesses the future Beads ID. Use only these write classes:

  • bd create for a new owner or child;
  • bd update <id> --type epic for an explicitly confirmed durable owner conversion;
  • bd update <id> --parent <owner-id> for an explicitly confirmed reused-child parent;
  • bd dep add <dependent-id> <prerequisite-id> for a justified blocker.

Do not include unrelated field edits. New items include a human-readable source citation and metadata keys for plan_source, plan_source_sha256, and plan_proposal_ref. Preserve existing external references.

Create a canonical text representation containing proposalVersion, the source fingerprint and normalization, readiness, disposition, items, relationships, and logical write set with stable-ref placeholders. Exclude generatedAt, runtime-resolved actual IDs, and the later execution-guard arguments. Stream the canonical text to the stdin-only hashing helper to obtain the proposal fingerprint. After hashing, render guarded call templates using that fingerprint for both proposal and confirmation arguments; the guard envelope and later ledger-based placeholder substitution are not part of the logical write set.

Render the proposal

Render this header before any mutation:

Plan-to-Backlog Proposal — READ-ONLY
Proposal-first. May recommend no backlog change. Nothing has been changed.

Then show:

  1. proposalVersion and generatedAt;
  2. source locator, fingerprint, and approval evidence;
  3. readiness, disposition, and rationale;
  4. existing-owner and duplicate evidence;
  5. every proposed/reused item;
  6. every parent and blocking relationship with rationale;
  7. the ordered guarded helper call templates, including every stable-ref placeholder;
  8. warnings and open questions;
  9. the proposal fingerprint.

For no-item or needs-clarification, stop after the preview and next action. Do not show an apply choice.

Confirm the exact proposal

When readiness is ready and the write set is non-empty, use AskUserQuestion immediately before apply. The question names the proposal fingerprint and exact counts, for example:

Apply proposal abc123: create one epic and three children, reuse one existing child, update one parent link, and add one blocking dependency?

Offer:

  1. Apply exact proposal — run only the displayed write set.
  2. Revise proposal — return to read-only analysis and render a new fingerprint.
  3. Decline — stop with no changes.

Declining, abandoning, or answering ambiguously performs no writes.

Confirmation authorizes only the displayed fingerprint. It does not authorize additional fixes, duplicate cleanup, closures, rollback, or changed commands.

Apply the confirmed proposal

Immediately before the first write:

  1. re-read and re-hash the source;
  2. rerun every source, locator, outcome, owner, and duplicate query used to build the proposal, then compare every classification;
  3. verify every reused ID and relevant graph relationship;
  4. rebuild the canonical proposal and verify its fingerprint equals the confirmed value;
  5. prepare one matching preflight per create. Run each preflight only immediately before its corresponding create, after every required runtime ID is present in the ledger.

Any material drift stops apply and renders a new read-only proposal for fresh confirmation.

Run every mutation through ~/.agents/skills/plan-to-backlog/scripts/confirmed-bd.sh --directory <directory>, passing the owning store chosen in step 2 plus the rebuilt proposal fingerprint and the confirmed fingerprint separately. The helper refuses a directory without a usable .beads store. Never invoke mutating bd commands directly. The helper rejects mismatched fingerprints, unsupported actions/flags, missing source citation metadata, and commands outside the bounded create/update-parent/ update-type/add-blocker surface.

Maintain a ledger map from each stable proposal ref to either its confirmed reused ID or the actual ID returned by a successful create. Immediately before each helper call, resolve only the declared ${ref.actualId} placeholders from that map and validate the resolved IDs. This ledger-based reference resolution does not change the confirmed logical operation. A missing, ambiguous, or invalid mapping fails the operation before the helper call; never substitute an undeclared ID or alter static arguments.

Apply one operation at a time in this order:

  1. resolve the operation's currently available stable-ref placeholders;
  2. immediately before each create, run preflight-create with those exact resolved arguments; it executes bd create --dry-run;
  3. reuse or create the owner with create and record its actual ID;
  4. run update-type only for a confirmed durable-owner conversion; it executes bd update --type epic;
  5. resolve the owner ID, then preflight and create each child with its confirmed parent;
  6. run set-parent for confirmed parent links on reused children;
  7. run add-blocker for confirmed genuine blockers after both IDs are resolved;
  8. re-read the resulting owner, children, and dependencies.

The helper requests JSON output and returns the underlying command status. Capture each returned ID immediately. A successful preflight authorizes nothing and must be followed by the matching confirmed create call only when its turn is reached. Do not run a later operation until the current result is understood and recorded.

Result ledger

Render one row per proposed item and relationship:

Proposal refActionActual IDStatusErrorRecovery

Statuses are reused, created, updated, failed, skipped, or declined.

On failure:

  • preserve every successful ID and action;
  • stop before operations that depend on the failed result;
  • mark later dependent operations skipped;
  • report the exact bounded error;
  • do not claim full application;
  • do not delete or roll back successful creations; and
  • give one safe rerun instruction using the same source.

After success, re-read the graph and compare actual IDs, parents, and dependencies with the confirmed proposal. Report mismatches honestly rather than repairing them without another proposal and confirmation.

Reruns and partial recovery

Every rerun starts from the source, not from assumptions about the previous session. Search by source fingerprint, proposal ref, source citation, title, and outcome. Reuse confirmed matches and propose only missing or corrective operations.

A rerun after partial application must never create a second tree. If metadata is unavailable or conflicting evidence prevents safe matching, set readiness to needs-clarification and show the candidate IDs.

Failure and degradation

  • Source inaccessible: stop without a disposition or writes.
  • Source unapproved: preview only; apply unavailable.
  • Plan too vague: ask focused questions; do not materialize mechanics.
  • No Beads database: tracker-neutral breakdown only; apply unavailable.
  • Ambiguous owner/duplicate: require resolution before disposition or apply.
  • More than six credible children: cluster or clarify.
  • Required Beads capability unavailable: use a proven permitted fallback or block the affected operation.
  • Source/tracker/proposal drift: invalidate confirmation and rerender.
  • Declined confirmation: no writes.
  • Partial failure: stop dependent actions and return the result ledger.

Output summary

End every run with:

Source: <locator> @ <fingerprint>
Readiness: <ready | needs-clarification>
Disposition: <no-item | single-item | epic | unresolved>
Proposal: <fingerprint or unavailable>
Writes: <none | declined | N succeeded, M failed, K skipped>
Next: <single safe action>

Guardrails

  • Do not revise the technical plan; return material uncertainty to /architect.
  • Do not perform general backlog cleanup discovered during searches.
  • Do not create Jira/Trello items or cross-system links.
  • Do not create tracker items for tests, commits, agents, reviews, retries, or handoffs.
  • Do not use raw bd close, bd delete, bd supersede, or bd promote commands.
  • Do not bypass the confirmed-action helper for Beads mutations.
  • Do not write to a store other than the one resolved or chosen in step 2.
  • Do not persist source or proposal text outside its cited source.
  • Do not claim transactionality; Beads writes may partially succeed.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.