Source profileQuality 94/100

eugenelim/agent-ready-repo/.agents/skills/workspace-status/SKILL.md

workspace-status

Use this skill to orient at session start, check initiative queue state, or see what's ready to work on next. Reads workspace.toml and surfaces ready-to-start items, blocked items with reason, parallel candidates, and active signals. Triggers on "workspace status", "where am I", "orient me", "session start", "what's ready", "show the queue", "what's next", "what should I work on", "check workspace", or any cold-start orientation request. Offers to initialise workspace.toml if absent. Also reconc

Source repository stars
17
Declared platforms
0
Static risk flags
2
Last source update
2026-08-28
Source checked
2026-08-28

Decision brief

What it does: where it fits

Read the local workspace.toml and surface the current queue state across all active initiatives. Run this at every session start — it replaces reading multiple product docs by hand.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/eugenelim/agent-ready-repo --skill ".agents/skills/workspace-status"
    Safe inspection promptEditorial

    Inspect the Agent Skill "workspace-status" from https://github.com/eugenelim/agent-ready-repo/blob/12b2c9f36c800761156a1daa149949af4d84986f/.agents/skills/workspace-status/SKILL.md at commit 12b2c9f36c800761156a1daa149949af4d84986f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Procedure

      Run the production backend via argument vector (the canonical and only safe invocation):

      POSIX (bash/zsh): python3 '/scripts/workspacestatus.py' status --root .PowerShell: python '/scripts/workspacestatus.py' status --root . (single-quoted strings are literal in PS; safe unless the path contains ')cmd.exe: python "\scripts\workspacestatus.py" status --root . (double-quoted path; safe unless the path contains ", %, or ! — any of these requires the argv form)
    2. 02

      1d. Repair workflow

      Use repair-plan + repair-apply to deterministically clean up stale queue entries without manual workspace.toml editing:

      Use repair-plan + repair-apply to deterministically clean up stale queue entries without manual workspace.toml editing:
    3. 03

      Step 1 — inspect the plan (no writes to workspace.toml)

      ["", "/scripts/workspacestatus.py", "repair-plan", "--root", ""]

      ["", "/scripts/workspacestatus.py", "repair-plan", "--root", ""]
    4. 04

      Step 2 — review the plan JSON; then apply (--yes is required to confirm the write)

      ["", "/scripts/workspacestatus.py", "repair-apply", "--root", "", "--yes"]

      spec/ (Status: Approved) — add to [work].queue through work-intakespec/ in [ini-002 work].queue — Status: Shippedspec/ in [ini-002 work].active — Status: Archived
    5. 05

      Output rendering

      Status list — Lead each row with a status glyph — ● running, ✓ done, ○ idle, ⚠ blocked — status first, one item per line, labels aligned. Table — When presenting several items that share the same fields, render a Markdown table. Cap at 5 columns; beyond that, switch to a per-ite…

      Status list — Lead each row with a status glyph — ● running, ✓ done, ○ idle, ⚠ blocked — status first, one item per line, labels aligned. Table — When presenting several items that share the same fields, render a Markdo…

    Permission review

    Static risk signals and limitations

    Writes files

    medium · line 44

    The documentation asks the agent to create, modify, or delete local files.

    *Exit 1 — workspace.toml absent:** the JSON will contain `"workspace_present": false`. Offer to initialise — ask the user whether to create a blank file or bootstrap with their first initiative. A blank file emits the full schema-documented

    Reads files

    low · line 140

    The documentation asks the agent to read local files, directories, or repositories.

    | `unreadable_artifact` | A confined artifact cannot be read safely. | Restore readable repository state, then rerun reconciliation. |

    Reads files

    low · line 236

    The documentation asks the agent to read local files, directories, or repositories.

    file. Migration planning is read-only and rejects `--plan-file`; a missing

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score94/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars17SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    eugenelim/agent-ready-repo
    Skill path
    .agents/skills/workspace-status/SKILL.md
    Commit
    12b2c9f36c800761156a1daa149949af4d84986f
    License
    Apache-2.0
    Collected
    2026-08-28
    Default branch
    main
    View the original SKILL.md

    Skill: workspace-status

    Read the local workspace.toml and surface the current queue state across all active initiatives. Run this at every session start — it replaces reading multiple product docs by hand.

    Output rendering

    Status list — Lead each row with a status glyph — ● running, ✓ done, ○ idle, ⚠ blocked — status first, one item per line, labels aligned. Table — When presenting several items that share the same fields, render a Markdown table. Cap at ~5 columns; beyond that, switch to a per-item detail list. Right-align numeric columns. Diagram / flow — For relationships or flow, emit a fenced ```mermaid block (it renders in chat and artifacts). If the surface is terminal-only, fall back to an ASCII box-and-arrow sketch. Progress — Report progress inline as done/total (e.g. 3/8). Only draw a bar if you're animating in a terminal.

    When to invoke

    Any time you need to orient: which initiative is active, what specs are ready to start, what is blocked and why, what signals the strategist has flagged. Also the right skill if workspace.toml does not yet exist and you want to initialise it.

    Prerequisites

    • Python 3.11+ — the backend uses tomllib (stdlib from 3.11). Confirm with python3 --version (macOS/Linux) or python --version (Windows). If Python is absent or below 3.11, the backend exits with a load error; install or upgrade before invoking this skill.
    • tomlkit (for repair-apply only) — comment-preserving TOML writer. Detect: python3 -c "import tomlkit". If absent, repair-apply exits 2 with reason: "tomlkit_unavailable" — surface to the user; install only with consent: pip install tomlkit==0.15.1. repair-plan does not require it.

    Procedure

    1. Invoke the backend

    Run the production backend via argument vector (the canonical and only safe invocation):

    ["<python>", "<skill-dir>/scripts/workspace_status.py", "status", "--root", "<repo-root>"]
    

    The status subcommand runs a bounded scan (Type 2 + Type 3 only — no global spec walk). Use reconcile for a full audit that also finds untracked live specs (Type 1). Use explain to investigate a specific item. See §1a. Subcommand guidance below.

    <python> is the Python 3.11+ interpreter available in your environment: python3 on macOS/Linux; python on Windows. <skill-dir> is the directory where your installer placed this skill's files (i.e., the directory containing this SKILL.md). Passing the paths as discrete arguments prevents shell expansion of $(), backticks, $VAR, and other metacharacters — the values are never interpreted by a shell.

    Shell-string-only tools: If your adapter cannot be configured to pass a discrete argument vector, use the shell-specific form below — or, for maximum portability, set the working directory to the repository root and pass --root .:

    • POSIX (bash/zsh): python3 '<skill-dir>/scripts/workspace_status.py' status --root .
    • PowerShell: python '<skill-dir>/scripts/workspace_status.py' status --root . (single-quoted strings are literal in PS; safe unless the path contains ')
    • cmd.exe: python "<skill-dir>\scripts\workspace_status.py" status --root . (double-quoted path; safe unless the path contains ", %, or ! — any of these requires the argv form)

    Any path with special characters requires the argv form.

    Exit 1 — workspace.toml absent: the JSON will contain "workspace_present": false. Offer to initialise — ask the user whether to create a blank file or bootstrap with their first initiative. A blank file emits the full schema-documented template:

    # workspace.toml
    #
    # Repository coordination index. Canonical artifacts own requirements; this
    # file records lifecycle membership, source provenance, display summaries, and
    # hard dependencies.
    #
    # Target entries are inline tables with exactly:
    #   path, kind, source, summary, needs
    #
    # Example:
    #   { path = "docs/specs/<slug>/spec.md", kind = "spec", source = { mode = "repo-origin" }, summary = "Example spec", needs = [] }
    #
    # Comments, summaries, list order, tracker labels, and profile hints are
    # non-semantic. They must not determine routing, dependency satisfaction,
    # processor selection, or dispatch.
    #
    # Paths are repository-relative POSIX paths. Consumers must reject absolute
    # paths, backslashes, ".." segments, and any symlink-resolved target outside the
    # repository root.
    
    [backlog]
    open = []
    closed = []
    

    Exit 2 — unexpected error: surface the stderr message and stop — do not proceed with partial data.

    Exit 0: parse the JSON result. Key fields:

    mode                             — active subcommand: "status" | "reconcile" | "explain"
    scan.global_spec_scan_performed  — true only in reconcile mode (Type 1 walk performed)
    scan.workspace_files_read        — always 1 (workspace.toml)
    scan.declared_spec_files_read    — spec.md files read for declared entries (Type 2+3 reads)
    scan.global_scan_spec_files_read — spec.md files read during global walk; 0 in status/explain
    reconciliation.performed         — always true in status/reconcile (Type 2+3 always run)
    reconciliation.complete          — true only in reconcile (all three types performed)
    reconciliation.types_performed   — [2, 3] in status; [1, 2, 3] in reconcile
                                       (explain mode omits the reconciliation object entirely)
    selector                         — normalized selector string (explain mode only)
    selector_status                  — "matched" | "not_found" | "ambiguous" (explain mode only)
    explained_item                   — item details when selector_status is "matched" (explain only)
    matches                          — initiative slugs with colliding entries when "ambiguous" (explain only)
    initiatives              — list of active initiatives (slug, name, status, milestone, brief_queue)
    initiatives[].brief_queue — {executing, ready, draft} or null
    work.ready     — compatibility alias for canonical dispatchable work.queue specs
    work.blocked   — compatibility alias for canonical non-dispatchable work entries
    work.active    — compatibility alias for canonical valid work.active specs
    work.shipped   — list of shipped build entries; each carries ini_slug
    shaping.ready  — list of ready shaping entries (from active AND backlog); each carries ini_slug and blocking_needs
    shaping.signals — list of active-context signal entries; each carries ini_slug
    shaping.blocked — list of blocked shaping entries (backlog only); each carries ini_slug and blocking_needs
    shaping.active_entries — list of all shaping_queue.active entries; each carries slug, ini_slug, and entry_type (signals included)
    reconciliation.type1             — untracked live specs (empty in status/explain; 1 not in types_performed)
    reconciliation.type2             — stale queue/active entries
    reconciliation.type3             — prematurely-shipped entries
    reconciliation.type2_cleanup_ops — non-authoritative Type 2 repair descriptors
    canonical.ready                  — canonical dispatchable work.queue specs only
    canonical.active                 — canonical valid work.active specs; resumable, not queue-ready
    canonical.blocked                — canonical non-dispatchable entries and retained legacy memberships
    canonical.findings               — stable finding code/path/dispatchable/next_action records (no raw artifact text)
    canonical.legacy_memberships     — retained legacy context; always non-dispatchable
    canonical.*[].origin_mode        — repository or tracker origin from structured provenance
    canonical.*[].profile            — active tracker profile id/version when declared
    canonical.*[].refresh            — compared/accepted revisions, unresolved-conflict flag,
                                       and refresh/write-back availability
    diagnostics.spec_files_read      — number of spec.md files examined (status + reconcile only)
    

    Refresh authority facts come only from the canonical workspace source record and exactly one closed toml source-authority block in the confined artifact. Never infer them from prose, comments, labels, summaries, or tracker content. The status surface reports availability as unknown until a configured processor supplies an explicit capability result; tracker origin plus a profile is not proof that refresh or write-back is available. Status projects only the facts needed for orientation and never copies field ownership, decisions, receipts, approver identity, or raw source values into its output.

    1a. Canonical findings

    Every canonical refusal carries a stable code, dispatchable:false, one safe next action, and an identifier: a repository-relative path, or — for unsupported_legacy only — a safe single-segment slug. Never join a finding identifier to the repository root without checking it is a path first.

    CodeWhy blockedSafe action
    invalid_workspaceTOML parse failure or invalid lifecycle collection shape.Correct workspace.toml, then rerun reconciliation.
    invalid_entryMalformed target record, unknown field or kind, or failed schema conditional.Rewrite the entry to the accepted target contract.
    legacy_entrySupported compatibility form; visible but never dispatchable.Materialize and register a canonical target entry.
    unsupported_legacyLegacy-like form outside accepted compatibility fixtures.Route the item manually; do not infer a target entry.
    invalid_artifact_pathUnsafe, noncanonical, or out-of-repository artifact-like path.Replace it with a confined canonical repository-relative path.
    missing_artifactRegistered canonical artifact does not exist.Create and review the canonical artifact before dispatch.
    unreadable_artifactA confined artifact cannot be read safely.Restore readable repository state, then rerun reconciliation.
    missing_planA spec has no sibling plan.md.Create and approve the plan before dispatch.
    unapproved_specQueue spec is not Approved.Complete the spec approval gate.
    unregistered_workSupplied or active spec has no unique matching workspace membership.Register or reconcile the canonical entry explicitly.
    duplicate_membershipOne artifact occurs more than once across lifecycle memberships.Remove the duplicate after choosing the authoritative membership.
    impossible_transitionArtifact status and lifecycle membership cannot coexist.Correct the artifact or membership through a reviewed transition.
    provenance_mismatchWorkspace source metadata disagrees with canonical artifact metadata.Resolve provenance in the canonical artifact and mirror it deliberately.
    refresh_conflictTracker-origin refresh conflict remains unresolved.Resolve the conflict through the artifact's authority workflow.
    invalid_source_authorityTracker-origin source authority is missing, duplicated, malformed, or violates its closed contract.Correct the closed source-authority block, then rerun reconciliation.
    source_authority_migration_requiredA legacy tracker-origin artifact has no closed source-authority record.Add the reviewed authority record before using refresh.
    unsatisfied_dependencyA known dependency lacks its kind-specific terminal state.Complete or explicitly revise the dependency.
    missing_dependencyA dependency target cannot be resolved locally.Materialize or correct the dependency target.
    dependency_cycleThe hard-dependency graph contains a cycle.Break the cycle through an explicit plan change.
    invalid_receiptCross-repository receipt is incomplete, mismatched, or conflicted.Replace it with a reviewed receipt matching the pinned dependency.
    inactive_initiativeWork belongs to a paused or closed initiative.Reactivate the initiative explicitly or move the work through governance.
    configuration_mismatchVersioned schema, adapter/profile, or routing identity is missing or inconsistent.Install or select a consistent versioned configuration, then rerun.

    For an unsupported object that carries a safe single-segment slug, the unsupported_legacy finding preserves that slug as its identifier. This makes manual-routing inventories attributable without treating the object as supported or dispatchable.

    1b. Coordination receipts

    Cross-repository dependencies that reference a containing brief require exactly one fenced block in that local brief with info string toml coordination-receipts. The block is TOML; surrounding prose and other fences are ignored.

    Valid receipt block:

    [[coordination_receipts]]
    id = "remote-prereq"
    remote_kind = "brief"
    remote_ref = "example-service://projects/example-artifact"
    accepted_revision = "remote-rev-9"
    required_status = "Shipped"
    reported_status = "Shipped"
    reviewed_by = "Example Reviewer"
    reviewed_at = "2026-08-10T00:00:00Z"
    refresh_conflict = false
    

    Representative invalid receipt block:

    [[coordination_receipts]]
    id = "remote-prereq"
    remote_kind = "brief"
    remote_ref = "example-service://projects/example-artifact"
    accepted_revision = "remote-rev-8"
    required_status = "Shipped"
    reported_status = "Shipped"
    reviewed_by = "Example Reviewer"
    reviewed_at = "2026-08-10T00:00:00Z"
    refresh_conflict = false
    

    Recovery for invalid_receipt: replace it with a reviewed receipt matching the pinned dependency.

    1c. Subcommand guidance

    SubcommandWhen to useType 1 walkWrites
    status (default)Session start, queue check — fast bounded scanNo
    reconcileFull audit: find untracked live specs in addition to stale/premature entriesYes
    explain --item <selector>Investigate a specific item (slug or spec/ path)No
    repair-planBuild a deterministic repair plan for Type 2 queue findingsYes.workspace-repair-plan.json
    repair-applyApply a previously generated repair plan atomicallyNoworkspace.toml
    repair-plan --migration-selection <path>Validate one human-selected legacy route and emit a deterministic migration proposalNo
    repair-apply --migration-selection <path> --operation-id <id> --confirmation-file <path>Apply one authorized ledger-first legacy migrationNo.workspace-migrations.json, workspace.toml
    repair-rollback --operation-id <id> --confirmation-file <path>Restore one exact legacy representation without deleting its artifactNo.workspace-migrations.json, workspace.toml

    reconcile — use when you suspect specs have been approved or put in-progress without being added to workspace.toml. The Type 1 walk reads every spec.md in docs/specs/ and reports any Approved/Implementing spec not listed in any initiative.

    explain — pass a slug or spec/ path to get the item's current classification, dependencies, blocking needs, and which downstream items would become unblocked if this item shipped. Lookup is restricted to active initiatives' work queues (queue/active/shipped); shaping items and items in paused or closed initiatives return selector_status: "not_found".

    For closeout orientation, project only current pause, closeout blockers, all-specs-shipped initiative eligibility, cooling-context visibility, and the next action to invoke close-work. Never infer semantic freshness, choose a disposition, confirm authority, distil content, record a closeout result, compact coordination, remove an entry, or delete. A paused item remains visible as paused; cooling context remains visible because ordinary-context exclusion is not part of this wave.

    repair-plan — runs a full reconciliation scan (Type 1+2+3) and builds a deterministic repair plan for all automatically-resolvable Type 2 queue findings: queue entries whose spec shows Shipped (moved to [work].shipped) or Archived (removed from [work].queue). Emits a JSON plan to stdout and writes it to .workspace-repair-plan.json (override with --plan-file). The plan includes a SHA-256 fingerprint of workspace.toml so that repair-apply can detect stale plans. Type 1 and Type 3 findings, and any Type 2 active-list entries, appear in manual_findings — they require human review. Approved entries are never touched automatically. Exit 0 on success (including empty plan); exit 1 if workspace.toml is absent; exit 2 if the plan file cannot be written (stdout is still emitted).

    repair-apply — loads the plan file written by repair-plan (default .workspace-repair-plan.json; override with --plan-file), verifies the SHA-256 fingerprint against the current workspace.toml, and applies each operation atomically via tempfile.mkstemp. Re-reads each spec's Status from disk at apply time; skips the operation (with a skipped record in per_operation) if the status has changed since the plan was made. Immediately before replacing workspace.toml, it revalidates every spec whose operation would be applied and aborts the whole write if any status or status-line fingerprint changed. Requires tomlkit to preserve TOML comments; exits 2 if tomlkit is unavailable. The write is skipped entirely when operations_applied == 0 (no stray temp files). Exit 0 on success or all-skipped; exit 2 for any structural error (fingerprint mismatch, plan not found, parse error, invalid schema).

    Legacy migration planning — when a retained legacy membership includes a migration finding, show its exact observed source representation, lifecycle membership, candidate route classes, and next_action. Never choose among the candidates. A human must author the closed selection JSON out of band and pass its repository-relative path with --migration-selection. Do not create, edit, prefill, or suggest substantive values for a selection or confirmation file. Migration planning is read-only and rejects --plan-file; a missing canonical artifact returns the selected owning processor as next_action without writing an artifact, ledger, repair plan, or workspace change.

    Legacy migration effects — pause while the human authors each confirmation file out of band. Never create, edit, or prefill it. The confirmation must be fresh, single-use, and bound to the exact action, operation ID, and digest shown by the reviewed plan or ledger. If the human needs opaque test-safe identifiers, tell them to run python3 -c 'import secrets; print("confirmation-" + secrets.token_hex(16)); print("subject-" + secrets.token_hex(16))' themselves; do not run it for them. Apply requires all three migration arguments and rejects --plan-file or --yes. Rollback requires a new confirmation and never reads, changes, or deletes the canonical artifact. A pending or rollback_pending ledger operation is recoverable only with another fresh confirmation. Surface the closed migration result code and next_action; never echo source content on credential, unsafe-context, authorization, or write refusals.

    1d. Repair workflow

    Use repair-plan + repair-apply to deterministically clean up stale queue entries without manual workspace.toml editing:

    # Step 1 — inspect the plan (no writes to workspace.toml)
    ["<python>", "<skill-dir>/scripts/workspace_status.py", "repair-plan", "--root", "<repo-root>"]
    
    # Step 2 — review the plan JSON; then apply (--yes is required to confirm the write)
    ["<python>", "<skill-dir>/scripts/workspace_status.py", "repair-apply", "--root", "<repo-root>", "--yes"]
    

    When to use: after reconcile or status shows Type 2 stale-queue findings and you want automated cleanup without manual editing. The two-step design lets you review the plan before committing.

    --plan-file <path> — override the plan file location for both subcommands. The path must resolve inside <repo-root>; symlinks that escape the root are rejected (exit 2, plan_file_outside_root).

    tomlkit availabilityrepair-apply requires tomlkit (comment-preserving TOML writer). If absent, repair-apply exits 2 with reason: "tomlkit_unavailable"; surface to the user and install only with consent: pip install tomlkit==0.15.1. See ## Prerequisites above. repair-plan does not require it.

    repair-apply result JSON key fields:

    schema_version     — 1
    mode               — "repair-apply"
    applied            — true if write succeeded; false on any structural error
    operations_applied — count of operations actually written (0 when all skipped or empty plan)
    per_operation      — list of {path, applied, reason?} for all operations
    reason             — error reason string when applied:false (top-level field, structural errors)
    

    Interpreting per_operation: each entry records "applied": true (written) or "applied": false with a reason:

    • spec_status_changed — spec Status changed between plan and apply; human review needed
    • spec_status_unreadable — spec.md not found or Status field missing
    • initiative_not_found — ini_slug absent from workspace.toml
    • entry_not_found_in_queue — path no longer in the queue (already removed or never present)

    .workspace-repair-plan.json and temp files — both are written inside the repo root. Add them to .gitignore to avoid accidental commits (the temp files are cleaned up automatically on success).

    2. Surface results

    When mode == "explain": render the focused lookup result below and stop — skip §§3–5. The explain JSON omits reconciliation, work, shaping, and diagnostics; those fields must not be read.

    If canonical.findings contains any record for the explained path, surface the canonical code, path, and next_action first and do not describe the item as startable. Retained canonical.legacy_memberships are blocked compatibility records; show their finding and migration action, never a start prompt.

    • selector_status: "matched" → surface the explained_item object: path, slug, ini_slug, list, classification, blocking_needs, dependencies, downstream_unblocked
    • selector_status: "not_found" → report the selector was not found in any active initiative's work queue (shaping items and items in paused/closed initiatives also return not_found)
    • selector_status: "ambiguous" → list the initiative slugs in matches and ask which initiative the user is working in. The CLI does not accept an initiative-prefix qualifier — re-invoking explain with the same selector will still return ambiguous. Use status for context on the relevant initiative.

    For status and reconcile modes only, continue:

    Type 1 audit notice: when 1 is not in reconciliation.types_performed (status mode only), always render the following line unconditionally — even when reconciliation is otherwise clean (N = 0):

    Type 1 scan not performed — run reconcile to also check for untracked live specs.

    If the reconciliation block is non-empty (any type1/type2/type3 findings), output it first:

    Reconciliation:

    Let N = total count across all three finding types. When N > 0, output before the main sections; omit subsections with no entries; name the initiative for each stale/shipped entry (e.g. [ini-002 work]):

    **Reconciliation** — N inconsistenc(y/ies) detected:
    
      Untracked live specs (Approved or Implementing, not in any initiative list):
      [Gate: render this subsection only when 1 is in reconciliation.types_performed.
       When absent: omit this subsection — the global Type 1 audit notice at the top
       of §2 already informs the user; do not emit a second notice here.]
      - `spec/<slug>` (Status: Approved) — add to [work].queue through `work-intake`
    
      Stale queue/active entries (spec shows Shipped or Archived):
      - `spec/<slug>` in [ini-002 work].queue — Status: Shipped
      - `spec/<slug>` in [ini-002 work].active — Status: Archived
    
      Prematurely-shipped entries ([work].shipped, spec shows live status):
      - `spec/<slug>` in [ini-002 work].shipped — Status: Implementing
        Possible causes: (1) spec Status was not updated after shipping, or
        (2) the workspace.toml entry was moved before the work was done.
    

    When Type 2 findings exist, treat reconciliation.type2_cleanup_ops as non-authoritative display metadata only. Never write workspace.toml from those descriptors and never manually convert a structured entry to a bare string. Append:

    Stale entries found — clean up now?
      Run repair-plan to identify canonically eligible queue repairs.
      Active-list findings and every ambiguous or unsupported entry remain manual.
      Reply Y to generate and review the repair plan.
    

    Cleanup write — after Y confirmation (Type 2 only):

    Invoke repair-plan using the argv form in §1 and show its automatic_operations and manual_findings. Apply nothing if the user does not confirm that exact plan. After confirmation, invoke repair-apply --yes; it is the only cleanup writer. It preserves the complete structured entry when moving Shipped queue work, removes only explicitly eligible Archived queue work, keeps active-list findings manual, revalidates canonical eligibility, and performs a comment-preserving atomic write. Never edit workspace.toml directly as a fallback for a skipped or manual finding.

    Main output sections:

    Format output in four sections (omit sections with no entries):


    Active initiatives: (for each entry in initiatives[]) <ini-slug><name> (milestone: <milestone>)

    • Brief queue (from initiatives[].brief_queue; omit when null): Executing: <executing> (or "none") · Ready: N item(s) · Draft: N item(s)

    Active context — signals (ongoing; do not need action):

    • <slug> (signal) — no action needed; informs shaping decisions

    Ready to start:

    • [build] <path> — run work-loop on docs/specs/<path>/
    • [shape] <slug> (shape) — run frame-intent
    • [shape] <slug> (research) — run desk-research-project-start
    • [shape] <slug> (strategy) — route through frame-situation (PE pack — M2); if not yet available, run frame-intent as interim
    • [shape] <slug> (design) — run experience-status (requires experience-design pack); fallback: journey-mapping
    • [brief] <path> (Ready) — run receive-brief on docs/product/briefs/<path>.md

    Parallel candidates: (all of the above with no inter-dependencies can start concurrently)

    Blocked:

    • <path> — waiting on <needs-entry> (status: <queued|in-progress>)

      Resolve the status from JSON: for each entry in blocking_needs, strip the queue-prefix to get the slug/path, then branch on the prefix. For same-initiative deps (no ini-NNN: prefix), scope every lookup to the blocked entry's own ini_slug; only entries matching that ini_slug count. For cross-initiative deps, scope to the named initiative instead.

      • work: — scope to blocked entry's ini_slug: filter work.active, work.ready, work.blocked by ini_slug == owning-ini. Path in filtered work.activein-progress; in filtered work.ready or work.blockedqueued; else → omit.
      • shape: — scope to ini_slug as above; use shaping.active_entries filtered to ini_slug == owning-ini: if a matching entry with slug == dep_slug is found → in-progress (signals included); else → omit.
      • research: — research deps block while the item is in shaping_queue.backlog; backlog items appear in shaping.ready or shaping.blocked — filter both by ini_slug == owning-ini: if dep slug found → queued; else → omit.
      • brief: — scope to the owning initiative's brief_queue only (filter initiatives[] by slug == owning-ini, since initiatives[] carries slug not ini_slug): if path in brief_queue.draftqueued; if in brief_queue.executingin-progress; else → omit.
      • Cross-initiative prefix (e.g. ini-002:work:spec/foo) — strip the ini-NNN: prefix to get the named initiative; resolve the remainder as above using that initiative's ini_slug.
      • Not found by any path (dependency belongs to a paused initiative) → omit the status annotation.

    Needs-resolution modes (analyze_bounded / is_need_satisfied): workspace_status() (used by workspace-mcp) calls analyze_bounded(autonomous_dispatch=True), which applies conservative semantics. All other callers use autonomous_dispatch=False (default, human-session semantics). The difference:

    Autonomous dispatch consumers must use canonical.ready as the ready set. A valid work.active item appears in canonical.active as resumable context, not queue-ready. Invalid entries and retained legacy memberships remain visible under canonical.blocked and canonical.findings, but never dispatch.

    Needautonomous_dispatch=False (default)autonomous_dispatch=True
    shape:<slug>Not in active → satisfied (graduated or never existed)Not in active AND not in backlog → unsatisfied (never planned). In backlog but not active → satisfied (planned, not yet started).
    research:<slug>Not in backlog as type "research" → satisfied (done or never needed)Not in backlog as type "research" → satisfied (same as human mode — completed research is removed from backlog; absent is indistinguishable from completed).
    work:, brief:, backlog:, cross-initiativeUnchangedUnchanged

    Intentional asymmetry: shape: in backlog = satisfied in autonomous mode (presence confirms the human scheduled it). research: uses the same logic in both modes: absent from backlog = satisfied (done or never needed); present in backlog as type "research" = unsatisfied (still pending). The autonomous-mode distinction does not apply to research: needs.

    Closeout check: For each initiative in initiatives[], filter work.ready, work.blocked, work.active, and work.shipped by that initiative's ini_slug. Also check reconciliation.type2 for any entry with that ini_slug. Gate closeout on all of: (1) filtered ready + blocked + active are empty, (2) no type2 findings for that initiative, (3) initiatives[i].queue_empty is true — a path in both queue and shipped is excluded from the classifier's ready/blocked output and may have no type2 finding, so the raw queue emptiness flag is the authoritative check, (4) filtered shipped is non-empty → surface: "<ini-slug>: all specs shipped — ready to close out? Run closeout to remove this section (git history preserves the record)."

    Findings: Read docs/product/findings/rfc-candidates.md and docs/product/findings/roadmap-intents.md if they exist. Count non-header rows in each (a non-header row is any |…| line after the header separator row — the |---|...| line of dashes).

    • When either file has data rows: output a **Findings:** section with both tables printed inline — paste each file's full markdown table (column header row + separator + data rows) under a sub-label (RFC candidates: / Roadmap intents:). If one file is absent or has no data rows, output its sub-label followed by _(empty)_.
    • When both are empty or absent: emit a single line: 0 rfc candidates · 0 roadmap intents — both registers empty

    Backlog: treat repo_backlog.open from the backend JSON as the authoritative repository backlog. When it is non-empty, set N = len(repo_backlog.open) and render:

    **Backlog** — N open item(s):
    - `[shape]` `<slug-or-path>` — <summary>
    - `[build]` `<slug-or-path>` — <summary>
      ...
    

    Prefix each entry with its declared room ([shape] or [build]). Display slug when present, otherwise display path (target five-field entries use path). Iterate in array order. Use summary from the JSON when present. Only when a legacy slug entry has no summary, read workspace.toml as text and use the nearest # comment line immediately preceding {slug = "<slug>"} as a fallback, without the leading # . If neither summary source exists, render just the identifier. Do not reread raw TOML to determine backlog membership, room, order, or dependencies. Omit this section entirely when repo_backlog.open is absent or empty.


    3. Skill prompts by type

    When surfacing shaping_queue entries, append the right skill invocation based on what's installed:

    Entry typeSkill to suggest
    shape (default)frame-intent (available now); frame-situation (M2, when available)
    researchdesk-research-project-start (requires desk-research pack)
    strategyroute through frame-situation (PE pack — M2); if not yet available, run frame-intent as interim
    signalno action — surface in "active context" section only
    designexperience-status (requires experience-design pack); if experience-design is not installed: journey-mapping

    If the required pack is not installed, surface: "requires <pack-name> pack — install to work this item."

    4. Missing fields

    workspace.toml evolves: older entries may lack a type field (treat as shape), a milestone field (omit from output), or a parent field (omit). Never fail on missing optional fields.

    5. Next-actions

    Using the JSON data from Step 1 — do not re-read workspace.toml or recompute the DAG:

    5a. Resolve choices

    From the JSON result:

    • active_spec = first entry in canonical.active (if any)
    • next_queue = first entry in canonical.ready (JSON field, already resolved; first in list order)
    • unblocked = all entries in canonical.ready
    • next_shape = first entry in shaping.ready whose entry_type is not signal AND for which shaping.active_entries contains an entry matching all of slug, ini_slug, and entry_type (a signal named x in active does not make a non-signal x in ready count as active); fall back to the first shaping.ready non-signal entry with no such full match (backlog-ready)

    If canonical.blocked or canonical.findings is non-empty for a candidate, surface the stable code, path, and next_action; do not select it as next_queue or active_spec.

    Path resolution: entries in canonical.ready, canonical.active, etc. carry a path field (e.g. "docs/specs/<slug>/spec.md"). Strip docs/specs/ and trailing /spec.md to get the slug; use docs/specs/<slug>/ for file-system commands.

    5b. ASCII dependency graph (when ≥2 unblocked work items)

    If len(unblocked) ≥ 2, render the following block before the numbered choices:

    Work queue — parallel opportunities:
    
      <slug-A>  [ready]
      <slug-B>  [ready]
      <slug-C>  [blocked by <dep-slug>]
    
    • Right-pad the slug column to the longest slug for alignment. Use each canonical item's path field.
    • Entries in canonical.ready: annotate [ready].
    • Entries in canonical.blocked: annotate with the first finding code; surface its next_action instead of recomputing a dependency reason.

    5c. Harness detection and parallel-session offer (when graph rendered)

    When the graph was rendered, offer a parallel-session choice as the first numbered slot. Check whether --bg appears in claude --help output (if a shell/command tool is available):

    • --bg found: emit a numbered choice listing claude --bg "work-loop docs/specs/<slug>/" for each parallel-ready root node.
    • --bg absent or no shell tool available: emit a numbered choice with prose instructions for each parallel-ready root node (no automated spawn).

    5d. Numbered choices

    Emit the following choices in order. Omit any whose source is empty; renumber sequentially. The parallel-session offer from 5c (when present) occupies the first slot and the remaining choices follow.

    • Active spec: work-loop docs/specs/<slug>/ — continue active spec. Present when active_spec is non-empty.
    • Next queue item: work-loop docs/specs/<slug>/ — next unblocked queue item. Present when next_queue is non-empty.
    • First shaping item: skill command per Step 3 routing table for the entry's type. Present when next_shape is non-empty. If the required pack is not installed, emit requires \` pack — install to work this item` instead of the skill command.
    • Start or remember work (always — final choice): work-intake

    See also

    • references/agentbundle-layout.md — the [product] table: configurable shaping/ path used by product-facing skills

    Frequently asked questions

    What to verify before installation and use

    What does the workspace-status source document cover?

    Read the local workspace.toml and surface the current queue state across all active initiatives. Run this at every session start — it replaces reading multiple product docs by hand.

    How do I install workspace-status?

    The source record exposes this install command: npx skills add https://github.com/eugenelim/agent-ready-repo --skill ".agents/skills/workspace-status". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged write-files, read-files in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 100147

    oaustegard/claude-skills

    featuring

    Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre

    Computed 10017

    dancingteeth/unified-code-review

    unified-code-review

    Risk-first code review for PRs and branch audits: blast-radius triage, agent-authored discipline (tests first, intent evidence), call-graph pincer for integration defects between modules, then structural code-judo bar. Use when reviewing PRs, auditing agent-written diffs, catching rubber-stamp green CI, or wiring bugs single-file review misses. Prefer over structure-only thermo-nuclear review alone. Do not use for unrelated coding tasks or as an always-on rule.

    Computed 1009

    Postpartum-genushyacinthus29/dotnet-skills

    dotnet-worker-services

    Build long-running .NET background services with `BackgroundService`, Generic Host, graceful shutdown, configuration, logging, and deployment patterns suited to workers and daemons.

    Computed 99241

    enuno/unifi-mcp-server

    unifi-mcp-tool-builder

    Specialized guide for adding new MCP tools to the UniFi MCP Server following project standards, UniFi API patterns, and test-driven development practices. Use when implementing new UniFi Network Controller features as MCP tools.