frkak/mymir/composer

Claude Code and agent skill by frkak/mymir

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when the user types /piyaz:composer, /piyaz:composer <taskRef>, or /piyaz:composer rework <taskRef|pr-url>, or asks to run the next Piyaz task end-to-end, ship the backlog, compose through the ready queue, or loop through Piyaz tasks until done. Composer researches, refines, plans, implements, reviews, and fixes each task in a loop until the PR is ready, and merges and continues when the user authorizes it. Do NOT invoke for one-off task lookups, status checks, hand-refinement of one task, or interactive planning of a single task; those flows belong to the piyaz skill and composer adds latency without adding quality.

Install

npx vskill@latest install frkak/mymir/composer

SKILL.md

Composer

Composer is a Piyaz task orchestrator. Per iteration it picks the next ready task off the project's critical path, runs that task through a deterministic per-task workflow (research, plan, implement, CI gate, review, bounded fix loop), surfaces the verdict, merges when the user authorized it, propagates the result through the graph, and continues until a structural stop condition holds.

The orchestrator (this skill, running in the main loop) owns only the interactive seams: pick the task, resolve gates, run the merge gate, propagate. The token-heavy phase sequencing runs inside the workflow, off the orchestrator's context, dispatching the phase agents in fresh windows with per-phase model and effort. This is the design's main token discipline: orchestration is JavaScript, not main-loop reasoning over a transcript that grows with every phase.

Composer is glue. The heavy lifting (task selection, refinement, the Completion Protocol, propagation) lives in the piyaz skill (skills/piyaz/SKILL.md); composer reuses those flows rather than duplicating them.

Invocation

  • `/piyaz:composer`: backlog mode. Pick the highest-value ready task each iteration; continue until a stop condition holds.
  • `/piyaz:composer <taskRef>`: single-task mode. Same pipeline applied to one task; exits after the iteration completes.
  • `/piyaz:composer rework <taskRef|pr-url>`: rework mode. HOTL requested changes on GitHub instead of merging; composer rounds that feedback back through the fix loop.
  • `/piyaz:composer --pipelined`: backlog mode with research-ahead (latency-only, costs tokens). Off by default; see Pipelined research-ahead.

No argument means backlog mode; rework plus an argument means rework mode; anything else is single-task.

Piyaz operating context

The canonical piyaz rules load with this skill. Downstream citations (conventions §1, artifacts §3, lifecycle §3) refer to this loaded text.

@skills/piyaz/references/conventions.md @skills/piyaz/references/artifacts.md @skills/piyaz/references/lifecycle.md @skills/piyaz/references/resilience.md

The per-task workflow

Each iteration's task runs through skills/composer/workflows/compose-task.js, launched with the Workflow tool:

Workflow({
scriptPath: "${CLAUDE_PLUGIN_ROOT}/skills/composer/workflows/compose-task.js",
args: { taskRef, taskId, projectId, categories, tagVocabulary,
pickEstimate, pickPriority, workType, tags,
mode, plannableOnly, resumeFrom, priorBrief, gateAnswers,
fixFindings, prUrl, priorFailure, estimate, flags, fable },
})

If ${CLAUDE_PLUGIN_ROOT} does not resolve in the tool argument, substitute the absolute path of this plugin's root. The workflow runs in the background; the orchestrator is suspended until it returns, so it spends no context tokens while phases run.

The workflow dispatches the phase agents by agentType, each with explicit model/effort/schema, the implementer with isolation:'worktree'. It runs research+plan → implement → ci-gate → review → [fix-loop ≤2 rotations], with a fixed-interval CI poll (60s, bounded) and a CI-pending re-poll path that re-reviews without burning a fix rotation, then returns one structured result. It does not merge, propagate, or touch edges; those are the orchestrator's seams. The phase contracts live in the agent files; do not duplicate them here.

PhaseagentTypeWrites to PiyazWorkflow captures
1+2. Research+Plan (merged)piyaz:composer-researcher under an orchestrator authority grantrefinement fields (description, acceptanceCriteria, tags, category, priority, estimate, decisions) plus implementationPlan; status='planned' on draft → planned onlybrief, status, gatePhase, flags, confidence, refined estimate/work-type, proposed rewrites, section/step counts, open questions
3. Implementpiyaz:composer-implementerstatus='in_progress' (claim), status='in_review' (+ Completion Protocol); fix mode rotates in_review → in_progress → in_reviewstatus, PR URL, AC counts, concerns
CI gategeneric (haiku)nothinggreen / red / pending / none, failing checks
4. Reviewpiyaz:review (dispatched with a verdict schema)nothing (read-only)verdict, blocking findings

The workflow result

The workflow returns exactly one of three shapes. Branch on result.status, not on prose:

statusMeaningOrchestrator reaction
DONETask ran to in_review (or planned for a plannable-only pick)Surface the verdict, run the Merge gate, propagate
NEEDS_DECISIONThe merged research+plan phase gated; result.gate carries the trigger and result.phase names the raising half (research or plan)Resolve via Gates, then relaunch the workflow with the answer
BLOCKEDA phase could not complete; result.phase and result.reason say which and whyFailure handling

A DONE result also carries: outcome (in_review|planned), verdict, prUrl, ciState, acSatisfied/acTotal, rotations, escalated (true when a block verdict or an exhausted fix budget left findings unaddressed), blockingFindings, concerns. A null return (the workflow died on a terminal error) is treated as BLOCKED.

Session bootstrap

Once per session, before the first iteration:

  1. Resolve the project. piyaz_workspace action='projects' and note the identifier; pass it (or a taskRef) on every call — there is no server-side selection. Single-task mode: also piyaz_search query='<taskRef>' to confirm the task and its current status.
  2. Read meta. piyaz_get view='meta'. Keep the categories and tag vocabulary for the workflow's research args; drop the status counts.
  3. Stale-claim sweep. piyaz_search project='<identifier>' status=['in_progress'] for tasks already claimed. Surface possible stale claims from dead sessions in the first pick rationale.
  4. Set the merge policy. Ask once with the AskUserQuestion tool: never (default; HOTL owns the merge), ask-each (confirm per PR), or auto-on-approve (merge automatically on an approve verdict with green CI, and auto-remove safe worktrees at run end). Record the choice; it holds for the whole run. When AskUserQuestion is unavailable (headless), default to never.
  5. Init the run log. mkdir -p .piyaz and guard the gitignore (grep -qxF '.piyaz/' .gitignore 2>/dev/null || printf '\n.piyaz/\n' >> .gitignore). If .piyaz/composer-<projectIdentifier>.md exists and ends with RUN_END, archive it to .piyaz/archive/composer-<projectIdentifier>-<date>.md and start fresh; if it exists without a RUN_END, that is a resume signal — see Recovering after compaction first. When the unfinished log's RUN_START mode= differs from this invocation, append RUN_END reason=superseded-by-<mode>, archive, and start fresh. Then append RUN_START mode=<...> mergePolicy=<...> project=<identifier>.

Then start iterating. There is nothing to install and nothing to confirm beyond the merge policy.

The loop

At the start of each iteration, materialize these todos and mark them off (the todo list is your compaction anchor): pick, launch workflow, handle result, surface verdict, merge gate, propagate.

dot
digraph composer_iteration {
"Pick next task" [shape=box];
"Ready or plannable task?" [shape=diamond];
"STOP: backlog drained" [shape=doublecircle];
"Launch compose-task workflow" [shape=box];
"Result status?" [shape=diamond];
"Resolve gate with user" [shape=box];
"Continue this task?" [shape=diamond];
"STOP: iteration ends (single-task)" [shape=doublecircle];
"Failure handling" [shape=box];
"outcome = planned?" [shape=diamond];
"Surface verdict" [shape=box];
"Merge gate (per policy)" [shape=box];
"Propagate" [shape=box];
"Single-task mode?" [shape=diamond];
"STOP: iteration complete" [shape=doublecircle];
"Pick next task" -> "Ready or plannable task?";
"Ready or plannable task?" -> "STOP: backlog drained" [label="no"];
"Ready or plannable task?" -> "Launch compose-task workflow" [label="yes"];
"Launch compose-task workflow" -> "Result status?";
"Result status?" -> "outcome = planned?" [label="DONE"];
"Result status?" -> "Resolve gate with user" [label="NEEDS_DECISION"];
"Result status?" -> "Failure handling" [label="BLOCKED / null"];
"Resolve gate with user" -> "Continue this task?";
"Continue this task?" -> "Launch compose-task workflow" [label="yes: relaunch with answers"];
"Continue this task?" -> "Pick next task" [label="no (backlog)"];
"Continue this task?" -> "STOP: iteration ends (single-task)" [label="no (single-task)"];
"outcome = planned?" -> "Single-task mode?" [label="yes (plannable-only)"];
"outcome = planned?" -> "Surface verdict" [label="no"];
"Surface verdict" -> "Merge gate (per policy)";
"Merge gate (per policy)" -> "Propagate";
"Propagate" -> "Single-task mode?";
"Single-task mode?" -> "STOP: iteration complete" [label="yes"];
"Single-task mode?" -> "Pick next task" [label="no"];
"Failure handling" -> "Single-task mode?";
}
Step details
  1. Pick. Backlog: piyaz_map view='ready' ∩ view='critical_path'; rank by priority (urgent > core > normal > backlog), tie-break by lowest estimate. Fall back to the highest-priority ready task when the intersection is empty, then to piyaz_map view='plannable' when ready is empty (plannable picks route through research + plan only; mark the pick plannable-only). Single-task: the named task; if done or cancelled, report and stop; if already claimed, see Failure handling (jump to the in-flight phase, never restart). Emit a one-paragraph pick rationale (taskRef, priority, estimate, critical-path yes/no, one-sentence reason). Do not wait for approval; the user interrupts if they disagree.
  1. Gather pick facts and launch. Build the workflow args from the pick and bootstrap: taskRef, taskId (the UUID, carried for cross-referencing; refs are first-class in tool calls — conventions §4), projectId, categories, tagVocabulary, pickEstimate, pickPriority, workType and tags (from the task row), mode, plannableOnly. Write PICK then WORKFLOW task=<ref> runId=<id> to the run log, then launch the workflow and await the result.
  1. Handle the result. NEEDS_DECISION → Gates. BLOCKED/null → Failure handling. DONE with outcome=planned (plannable-only) → end the iteration (TASK_END outcome=planned); backlog returns to the pick, single-task reports and stops. DONE with outcome=in_review → step 4.
  1. Surface + merge + propagate. Quote the final verdict block verbatim (VERDICT to the run log). Run the Merge gate. Then propagate per lifecycle §3: piyaz_map view='neighbors' task='<taskRef>', piyaz_map view='downstream' task='<taskRef>'; update or retire edge notes the work invalidated (edge-note shape: artifacts §3). Propagation depth: full when the PR was merged or the verdict was approve; otherwise provisional, each note prefixed Provisional pending HOTL on PR #<n>:. Surface newly-unblocked tasks in the next pick rationale. Write PROPAGATED, then TASK_END outcome=in_review rotations=<n>.
  1. Loop. Single-task: report the outcome and stop. Backlog: next iteration, no pause.

Gates

A NEEDS_DECISION result means the merged research+plan phase needs a user decision before the task can proceed. result.phase names the raising half (research or plan, from the agent's gatePhase) and result.gate carries the trigger. Resolve with the AskUserQuestion tool, then relaunch the workflow:

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 93 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
179
Repository forks
18
7-day trend score
26

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/frkak/mymir/composer/badge)](https://verified-skill.com/skills/frkak/mymir/composer)

Something wrong with this skill or its page? Tell us.