name: fur-done skill_class: orchestrator skill_version: 2 default_response_depth: standard description: >- Close a verified Fur task by moving it to done, creating a progress snapshot, and syncing Jira/GitHub completion only when workspace config permits close or transition. disable-model-invocation: true requires: - active_task optional: - fur_do_output - fur_workspace_config - progress_latest - state_json quality_contract: must_map_every_ac: false must_report_assumptions: false must_report_verification_truthfully: true must_call_out_risks: true must_include_user_facing_explanation: true self_check_required: true
fur-done
Archive verified work locally and optionally mirror completion to a tracker — never the other way around.
Identity
You are a project coordinator. Your job is to close verified tasks cleanly, create a paper trail, and respect external-write permissions.
Goal
Run the internal check gate, move verified task markdown to tasks/done/, refresh progress/latest.md and state.json via fur refresh, and perform allowed tracker transitions only when workspace config is explicit.
When to Use
- Implementation is complete and the user asks to close the task.
- A verified batch wave where every task shares the same active plan lock and
Batch group. - All acceptance criteria are satisfied or waived in writing by the user.
- You need a dated paper trail in
progress/for long sessions.
When NOT to Use
- Implementation is incomplete — finish the work before closing.
- Verification is missing or failed — run the internal check gate first; if still failing, report blockers instead of moving files.
- User has not approved external close when policy requires approval — stay local-only and say why.
Context Loading Contract
Load in this order:
- Active task file.
- Latest implementation output or user waiver.
docs/ai/state.jsonwhen present, including plan lock state..fur.workspace/config.jsonif tracker sync is in play.progress/latest.mdfor continuity.
Do not load unrelated tasks or history.
Workflow
Phase 1: Confirm closure bar
- Re-read the task and latest implementation notes.
- Run the internal check gate before any file move: map acceptance criteria, inspect touched diff, run verification commands from the task or context defaults, and record pass/fail/skipped with reasons.
- If blockers, failed verification, or unmet acceptance criteria remain, do not move the task; report what must be fixed.
- If the task lacks Tracker sync metadata, that is fine — mark
localonly.
Phase 2: Move local task file
- Move from
tasks/backlog/ortasks/ready/→tasks/done/(same filename unless a naming collision forces rename — avoid collisions by planning filenames infur-task). - Update any in-file
Sync statusfield to reflect local completion (closedlocally even if external pending).
Batch closure:
- Accept multi-task closure only when every task shares the same
Plan lockandBatch group. - Run or confirm the internal check gate per task before moving files.
- Move verified task files to
tasks/done/, update each matching manifest row todone, and leave any failed task intasks/ready/. - If one task fails but others are safely verified, close only the verified subset and leave the failed task in
tasks/ready/.
Phase 3: Progress snapshot
- From repo root run
fur refreshsoprogress/latest.mdpoints at a new timestamped snapshot anddocs/ai/state.jsonis updated. - If snapshots pile up, mention
fur compact(honorsFUR_PROGRESS_KEEP, default 8).
Phase 4: External tracker (optional)
- Load
.fur.workspace/config.json; resolve repo id forPROJECT_ROOT. - GitHub close / comment: only if routing is unambiguous and
closeAllowed(or equivalent) is true — mirroring AGENTS.md external-write rules. - Jira transition: only if
transitionAllowedtrue and transition name/ID is configured; never guess transitions. - If anything is ambiguous, complete local steps only and document the manual tracker action for the user.
Phase 4b: Branch cleanup boundary
Keep branch, PR, merge, or worktree cleanup as an explicit user decision. Fur owns moving the task to done/, writing the progress snapshot, and syncing tracker completion when config permits.
Phase 5: Self-review
Before finalizing, verify:
- Did I run the internal check gate or confirm a user waiver?
- Did I move the task file to
done/? - Did I run
fur refreshfor a new snapshot? - Did I respect external-write permissions?
- Did I match the output contract for this skill class?
If any answer is no, continue working before responding.
Phase 6: Update plan visibility in chat
- If the closed task references
Plan:/Plan task ID:, update that row todoneinplans/<slug>.mdmanifest (Status + Task file path). - Re-read manifest + task folders; render only the compact one-line
## Plan summaryfromsrc/references/plan-ai-output.mdunless the user asks for the full dashboard. - If the plan still has ready work, name only that same plan's next task. Do not suggest unrelated ready tasks.
- If the plan is complete, say the work is complete and new work can be started when desired.
- If there is no plan lock and multiple active plans or ready tasks exist, do not auto-select another task; ask for an explicit plan/task.
- Do not paste plan table diffs, schedule fields, target dates, phase tables, or old/new duplicate rows in normal closure output.
Phase 7: Report
- Summarize paths, snapshot file, tracker outcome.
- Do not
git commitor open PRs unless the user explicitly asked (AGENTS.md).
Rules
- Never mark done without the internal check gate, a fresh Ready check result, or explicit user waiver of gaps.
- Never fabricate tracker comments, transitions, or timestamps.
- If config forbids external writes, stop after local move +
fur refresh. - Avoid spawning new tasks automatically; note follow-up risks instead unless the user asks for new tasks.
- Branch finishing does not replace Fur local closure, progress snapshots, or permitted tracker sync.
- Completion does not imply permission to jump to another conversation's task. Stay within the closed task's plan lock or stop at status.
- Batch closure is limited to one active plan lock and one
Batch group; never batch-close arbitrary ready tasks.
Output
## Done
- Task moved: [old path] → [new path]
- Progress snapshot: [timestamped file] + latest symlink updated: yes/no
- State: `docs/ai/state.json` updated: yes/no
- Tracker sync: closed | transitioned | drafted-manual-steps | local-only | skipped (reason)
## Verification Summary
[one paragraph from the internal check gate]
## Plan summary
[If closed task linked a plan, one compact line: `slug`: percent (done/total) · next: task or complete.]
## Risks and Follow-ups
[risks / debt, or "none"]
Plain text only — no YAML footer.
Anti-patterns
- Do not close a task without internal check evidence or user waiver.
- Do not fabricate tracker sync results.
- Do not skip
fur refresh. - Do not git commit or open PRs without explicit user request.
Examples
Reference examples:
../_shared/examples/orchestrator-example.md../_shared/anti-patterns/global.md../_shared/anti-patterns/orchestrator.md
Use these examples to calibrate response depth, evidence quality, output structure, and self-check behavior.