ulw-loop

GitHub

ulw-loop 是一个用于持久化目标执行、证据驱动工作及手动 QA 的 Agent 技能。它通过 CLI 工具管理目标状态,将工作分解为系统化步骤,并强制要求提供可观察证据以验证完成度,适用于长周期交付任务。

packages/omo-senpi/skills/ulw-loop/SKILL.md code-yeongyu/oh-my-openagent

Trigger Scenarios

用户请求 ulw-loop 或 ulw 需要持久化的目标执行 证据驱动的工作流程 手动 QA 任务 带检查点的长周期交付

Install

npx skills add code-yeongyu/oh-my-openagent --skill ulw-loop -g -y
More Options

Non-standard path

npx skills add https://github.com/code-yeongyu/oh-my-openagent/tree/dev/packages/omo-senpi/skills/ulw-loop -g -y

Use without installing

npx skills use code-yeongyu/oh-my-openagent@ulw-loop

指定 Agent (Claude Code)

npx skills add code-yeongyu/oh-my-openagent --skill ulw-loop -a claude-code -g -y

安装 repo 全部 skill

npx skills add code-yeongyu/oh-my-openagent --all -g -y

预览 repo 内 skill

npx skills add code-yeongyu/oh-my-openagent --list

SKILL.md

Frontmatter
{
    "name": "ulw-loop",
    "metadata": {
        "short-description": "Goal-like ultrawork loop for systematic decomposition"
    },
    "description": "Goal-like loop that uses ultrawork mode to decompose work into systematic, evidence-bound steps."
}

ulw-loop

Use this skill when the user asks for ulw-loop, ulw, durable goal execution, evidence-led work, manual QA, or checkpointed long-running delivery.

This skill is compact by design: the run contract below is the whole bootstrap. references/full-workflow.md and references/define-goal.md carry the full doctrine; open a section only when the phase you are in needs it.

Run contract

  1. Create goals: omo-agent-toolkit ulw-loop create-goals --brief "<brief>" --json. The ulw-loop skill-pointer message carries the resolved absolute CLI path for this installation; use that path verbatim. If the CLI reports the existing aggregate complete, start fresh with --session-id <new-id>.
  2. Register the aggregate objective from the printed handoff with create_goal, shaped by references/define-goal.md. Goal creation is NEVER skipped.
  3. Mirror every atomic step into the live todo checklist: one granular step per action, exactly one in_progress, transitions marked the instant they happen.
  4. Loop per goal (status --json, the per-criterion cycle, checkpoint, complete-goals) with real-surface evidence for every criterion. Tests alone never prove done.
  5. Stop when the goal's WHEN-TO-STOP line holds with evidence in hand.

When the injected ultrawork directive accompanies this skill, its goal/notepad/todo bootstrap is subsumed by this contract: the loop CLI owns goal state and the loop ledger is the notepad — do not create a second one.

Non-Negotiables

  • Use the ulw-loop CLI state under .omo/ulw-loop; do not hand-edit goal state.
  • Register goals up front, shaped by references/define-goal.md (omo-agent-toolkit ulw-loop create-goals, then create_goal from the printed handoff), and mirror every atomic step into the live todo checklist: one ultra-granular step per action, exactly one in_progress, transitions marked the instant they happen.
  • After any compaction or context loss, re-read brief + goals + ledger FIRST plus omo-agent-toolkit ulw-loop status --json, then resume; never re-plan from scratch.
  • If omo-agent-toolkit ulw-loop create-goals says the existing aggregate is already complete, start unrelated new work with a fresh --session-id <new-id> instead of steering or forcing the completed default state. Use --force only to intentionally overwrite completed evidence.
  • Every success criterion needs observable evidence from a real surface: a channel (terminal/TUI via the xterm.js web terminal, HTTP, browser, computer-use) or, for CLI- or data-shaped criteria, an auxiliary surface (CLI stdout, DB diff, parsed config dump).
  • Evidence is bound to the tree it was captured at (git rev-parse --short "HEAD^{tree}"); it goes stale only when tracked content changes — a rebase or amend that keeps the tree identical keeps it valid. When the tree differs, re-run at the current HEAD and re-record, never relabel or regenerate. Record only after cleanup receipts exist.
  • Delegate code edits, test writes, fixes, and QA execution to right-sized omo-senpi subagents through the native task tool.
  • Plan and reviewer agents may run for a long time; spawn them with run_in_background: true and keep doing independent root work.
  • For work likely to exceed one wait cycle, require the child to send WORKING: <task> - <current phase> before long reading, testing, or review passes, and BLOCKED: <reason> only when it cannot progress.
  • Track spawned task ids locally. Completion and progress arrive as injected notifications; use task_output for at most one midpoint status or transcript check per child, never a polling loop.
  • While children run, surface the active subagent count, task ids, and latest WORKING: phase.
  • If a live child needs context or correction, send it with task_send. Fallback only when the child completed without the deliverable, explicitly reported BLOCKED:, or is no longer running; then record inconclusive and spawn a smaller native task with the missing deliverable.
  • Use git-master for git-tracked edits: inspect recent and touched-path commit history, then commit each verified work unit atomically in the repository's observed language, scope, and message style with only that unit's files staged. Never carry verified units into a later omnibus commit.

Team mode: decide it, do not default to it

Solo execution with parallel background task workers is the default: fan independent units out in one batched spawn, each routed to the category (or configured subagent_type) that fits it, with scopes cut so no two workers write the same files. A team (team_create) adds per-member briefing, shared-state, and relay overhead, so it must be paid for by the work's shape. Decide ONCE, when the plan's work units are known, and record the verdict plus its reason in the notepad.

Stand up a team when BOTH hold:

  1. The units' scopes overlap in a way you cannot cleanly cut. They touch the same module, contract, or migration, so one unit's discovery changes what another should do. Fire-and-forget workers cannot exchange that mid-flight; teammates can, because the lead relays it.
  2. Running them at the same time actually finishes sooner. The units are each substantial and none is merely waiting on another's output. Two units where the second only consumes the first's result are a sequence, not a team.

When the units are genuinely independent — separate files, no shared contract — spawn parallel background task workers instead and avoid the team coordination overhead entirely. When the work is one cohesive unit, do it yourself. Overlap alone is not enough: near-identical units that would collide on the same lines are faster done in sequence by one worker.

Under team mode, isolate and land per unit:

  • One git worktree per member, never a shared checkout — concurrent members editing one working tree corrupt each other's diffs and evidence. Give each member its own branch off the base and its own worktree path.
  • Merge per work unit, as each unit is verified. A member's unit lands when its own evidence is captured and its gates are green; it does not wait for the slowest sibling. Integrate each merged unit back into the base the others branch from, so overlapping members rebase onto real merged work rather than guessing at it.
  • Conflicts are the lead's job. When two members' units touch the same lines, the lead decides the order they land and tells the later member what changed; members never resolve a sibling's conflict blind.

Native Senpi Task Contract

Senpi already exposes its real subagent spawn surface through the omo-senpi task component. Use it directly. Do not route delegation through external app-server threads or another harness.

Intent Native Senpi tool
Spawn one worker `task({ prompt, subagent_type
Fan out independent workers `task({ tasks: [{ prompt, subagent_type
Send context or correction task_send({ task_id, message })
Inspect one midpoint task_output({ task_id, mode: "tail" })
Stop a runaway worker task_cancel({ task_id })
Coordinate overlapping work team_create, task_create, task_get, task_list, task_update; communicate with task_send

Every worker prompt starts with TASK: and names DELIVERABLE, SCOPE, VERIFY, and STOP WHEN. Put requested skill names and all required context inside prompt; children do not inherit interview context automatically.

Version History

  • 64d8981 Current 2026-08-28 22:36

    精简运行合同为5步明确流程,移除冗余CLI解析代码,修复todo清单命名不一致问题,优化上下文恢复逻辑。

  • ec3d5af 2026-08-20 11:15

Same Skill Collection

.agents/skills/get-unpublished-changes/SKILL.md
.agents/skills/github-triage/SKILL.md
.agents/skills/omomomo/SKILL.md
.agents/skills/publish/SKILL.md
.agents/skills/remove-deadcode/SKILL.md
.opencode/skills/github-triage/SKILL.md
packages/omo-codex/plugin/skills/init-deep/SKILL.md
packages/omo-senpi/plugin/skills/init-deep/SKILL.md
packages/omo-senpi/skills/give-me-tips/SKILL.md
packages/omo-senpi/skills/init-deep/SKILL.md
packages/omo-senpi/skills/mass-ulw/SKILL.md
packages/pi-goal/SKILL.md
packages/shared-skills/skills/ast-grep/SKILL.md
packages/shared-skills/skills/git-master/SKILL.md
packages/shared-skills/skills/init-deep/SKILL.md
packages/shared-skills/skills/refactor/SKILL.md
packages/shared-skills/skills/start-work/SKILL.md
packages/shared-skills/skills/ulw-execute/SKILL.md
.agents/skills/codex-qa/SKILL.md
.agents/skills/hyperplan/SKILL.md
.agents/skills/opencode-qa/SKILL.md
.agents/skills/pre-publish-review/SKILL.md
.agents/skills/security-research/SKILL.md
.agents/skills/senpi-qa/SKILL.md
.agents/skills/tech-debt-audit/SKILL.md
.agents/skills/work-with-pr/SKILL.md
.opencode/skills/hyperplan/SKILL.md
.opencode/skills/pre-publish-review/SKILL.md
.opencode/skills/work-with-pr/SKILL.md
packages/omo-codex/plugin/skills/ulw-plan/SKILL.md
packages/omo-senpi/plugin/skills/onboarding/SKILL.md
packages/omo-senpi/skills/dag-library/SKILL.md
packages/omo-senpi/skills/hyperplan/SKILL.md
packages/omo-senpi/skills/onboarding/SKILL.md
packages/omo-senpi/skills/ultrawork/SKILL.md
packages/omo-senpi/skills/ulw-plan/SKILL.md
packages/omo-senpi/skills/ulw-research/SKILL.md
packages/shared-skills/skills/coding-agent-sessions/SKILL.md
packages/shared-skills/skills/data-scientist/SKILL.md
packages/shared-skills/skills/debugging/SKILL.md
packages/shared-skills/skills/frontend/SKILL.md
packages/shared-skills/skills/lsp-setup/SKILL.md
packages/shared-skills/skills/programming/SKILL.md
packages/shared-skills/skills/remove-ai-slops/SKILL.md
packages/shared-skills/skills/review-work/SKILL.md
packages/shared-skills/skills/ultimate-browsing/SKILL.md
packages/shared-skills/skills/ulw-plan/SKILL.md
packages/shared-skills/skills/ulw-research/SKILL.md
packages/shared-skills/skills/visual-qa/SKILL.md

Metadata

Files
0
Version
64d8981
Hash
cf75468c
Indexed
2026-08-20 11:15

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-30 12:28
浙ICP备14020137号-1 $Carte des visiteurs$