| name | openloop |
| description | Surface and address an unresolved open loop (question / deferred decision / blocker) detected by the daemon in a recent thread. Runs the three-agent /check pipeline scoped to that thread's signals; the user's correction enters the vault tagged from the canonical taxonomy. |
| disable-model-invocation | true |
| allowed-tools | Bash(node *) |
| argument-hint | [required: surfacing_id from daemon notification] |
Liminal Agents — Open Loop
The daemon detected a loop — a question raised, a decision deferred, or a blocker stated — in a recent thread, and the loop has persisted across enough ticks to surface. /openloop reads the loop and the thread it belongs to, runs the three bounded agents over that scoped context, and captures the user's correction.
This is the same deliberation pipeline as /check and /close; only the scoping is different.
Flow
1. Run the openloop script
The skill is invoked from a daemon notification. The surfacing_id is required:
node ${CLAUDE_PLUGIN_ROOT}/skills/openloop/openloop.js --surfacing-id=<uuid>
Returns JSON with vault_id, loop (thread_label / loop_kind / loop_text), signal_count (signals in the thread), signal_summary for the thread, and the three agent interpretations.
If vault_id is null and reason is surfacing_not_found, report it and stop. The daemon may have surfaced the loop from a previous run that is no longer current.
2. Present the loop and the three reads
Show the user:
- Loop —
{loop_kind} on {thread_label}: {loop_text}, verbatim.
- Thread context —
signal_summary for the thread (one paragraph).
- Three reads — Architect / Witness / Contrarian on whether the loop is real, what's blocking it, what would close it.
Then:
"Which reading is wrong, and why? Your correction enters the vault."
3. Tag the correction
Map the user's reason to one of the nine canonical correction tags (same taxonomy as /check and /close): wrong_frame, wrong_intensity, wrong_theory, right_but_useless, right_but_already_known, too_generic, missed_compensation, assumes_facts_not_in_evidence, off_by_layer.
4. Store the correction
node ${CLAUDE_PLUGIN_ROOT}/skills/check/store-correction.js <vault_id> "<agent_name>" "<tag>" "<reason>"
Confirm and end the openloop session.
Voice rules
- No wellness framing. The loop is a structural state, not an emotional one.
- Agents hold their jurisdictions. Do not paraphrase them.
- If the user says the loop is closed (and it just wasn't observed in a signal), write a correction with
right_but_already_known against whichever agent claimed the loop was open.