Unblocker
Use this workflow only after explicit selection as $unblocker or a
binding task instruction requiring it.
The failure this skill exists to kill: hours into a delegated run, an agent
invents an approval gate the user never asked to hold ("authorize both"),
reports waiting-for-user as its state, and idles until the session dies -
while the work it wanted permission for was already inside the plan's intent
and touched nothing the user actually reserves. Agents do this constantly
and at random. The unblocker makes it deterministic: blocked or "needs
approval" means consult the unblocker, get a decision, keep delivering.
Install
git clone git@github.com:aelaguiz/arch_skill.git
cd arch_skill
make install
When to use
- The user asks for an unblocker, authorizer, or end-blocker over a long,
delegated, or overnight run.
- A skill authoring a persistent goal for a long run (
epic-to-prs,
issue-to-pr, goal loops) arms one into the goal prompt.
- Within the selected workflow, workers need an existing-authority check.
When not to use
- Intent drift watching:
$intent-police is advisory and subtraction-only;
it never authorizes. The unblocker decides.
- A clean read-only second opinion on an artifact:
$fresh-consult.
- The user is present and the question is genuinely theirs (production
mutation, money, changing the ask): just ask them.
- Short interactive work with no delegation; there is nothing to unblock.
The charter
The unblocker is armed once, at run start, with:
- The user's verbatim ask and high-level intent for the run.
- The plan artifacts: epic, issues, plan docs, whatever defines scope.
- The run's GPT Pro thread and consultation cadence, when one exists.
- The boundary list. The default boundary is exactly one: production
surfaces stay user-owned - production app and data mutations, deploys,
releases, external sends, money, app-store actions. The user may add
run-specific boundaries when arming; the unblocker may not invent new
ones.
Everything inside the run's intent that does not cross a boundary is
pre-authorized. Other skills' red lines survive: the unblocker never
overrides a terminal state such as issue-to-pr never merging.
Non-negotiables
- The run starts authorized. A mid-run "I need approval" is presumed a
self-imposed gate unless the user or the plan explicitly reserved that
decision or it crosses a charter boundary. The default answer to "may I
do X that the plan already names?" is "you were already authorized;
proceed."
- Decisions come from the user's intent and the plan, not the worker's
anxiety. Decide with
$startup-pragmatism: the smallest useful move, at
current information. Answer bluntly and concretely: "proceed", "do X
not Y and here is why", or "user-owned; here is the one question."
Never demand extra proofs, receipts, or verification ceremony before
authorizing; the plan's own gates are enough.
- Resolve ordinary uncertainty from the plan and available evidence. Consult
the run's Pro thread for a major unexpected blocker or consequential
technical uncertainty that remains beyond local reasoning after reasonable
investigation and is likely to change the approach. Follow the run's Pro
cadence; a routine authorization question does not need a Pro check-in.
Include the intent, plan, attempted reasoning, options, and recommendation.
Have the coordinator record each actual submission once in the existing
worklog with its purpose, artifact/thread, and running count.
- A required Pro review means GPT-6 Astra's literal
Pro option, never Extra
High, xhigh, Ultra, Thinking, or another substitute. Missing or disabled Pro
probably means a temporary account rate limit. $chatgpt-web, with required
$browseros usage, finds an available account among the already-open Work
and variable number of Pro profiles, notes which profile/window works, and
uses it. All accounts should have the same projects.
Only when the available accounts are exhausted, pause the blocked Pro
decision and report the observed conditions while
independent authorized work continues. Pause the whole run only when no
useful independent work remains; the user says when Pro is back.
- One decision per matter. Record it; a generated continuation, heartbeat,
or repeat consult never re-litigates a decided question.
- The production boundary is absolute. The unblocker refuses those and
routes them to the user as one crisp question with a recommendation,
telling the worker what to do meanwhile (work other scope, never idle).
- Authorization is not scope growth. The unblocker authorizes work already
inside intent; it never adds scope, never implements, and never reviews
code quality.
- Keep a decision log on disk: matter, decision, reasoning, boundary check.
The run and the user audit it afterwards.
Standing it up
- Gather the charter: the user's verbatim ask, plan artifacts, Pro thread,
and boundaries (default plus any the user adds).
- Read the installed
../_shared/agent-orchestration-policy.md. The
unblocker is normally a long-lived native child of the coordinating
agent; use an external session only per that policy.
- Populate
references/charter-template.md with $prompt-authoring and
spawn. Verify the unblocker echoes back the intent and boundaries
correctly before relying on it.
- Wire it into the run so workers actually use it: every worker brief and
the goal prompt carry the consult rule - blocked or needing
authorization means consult the unblocker; waiting-for-user is not a
resting state.
Goal prompt integration
When the run lives under a persistent goal, the skill arming the unblocker
authors the goal prompt itself via $prompt-authoring, and that prompt
names: the unblocker and how to reach it, the consult rule, the production
boundary, and the no-idle rule. A host that can arm its own goal (Prime
Agent) sets the goal and spawns the unblocker itself. Otherwise present the
user two exact artifacts to arm: the /goal text and the unblocker spawn
instruction.
Consulting it (worker contract)
- Frame every consult with goal context: what the plan says, what you want
to do, why you believed a gate existed, the options, your recommendation.
- Treat the answer as the user's standing intent within the charter. A
boundary refusal is final until the user speaks.
- While a user escalation pends, work the remaining unblocked scope.
Run end
At completion the unblocker (or the coordinator reading its log) reports:
decisions made, self-imposed gates killed, Pro consults, and any user
escalations with their outcomes.
References
- references/charter-template.md: the
brief skeleton to populate when spawning the unblocker.
- references/unblocker-evidence.md: the
verbatim owner ruling and observed failure this skill encodes.
1---2name: unblocker3description: "Explicitly selected long-lived companion that resolves claimed blockers against existing user authority. Use when the user chooses $unblocker or a deliberately selected parent workflow requires it. A stalled task or approval question alone does not select this companion; it cannot create permission for production actions or scope expansion."4metadata:5 short-description: "Long-lived end blocker that authorizes and unblocks a run"6---78# Unblocker910Use this workflow only after explicit selection as `$unblocker` or a11binding task instruction requiring it.1213The failure this skill exists to kill: hours into a delegated run, an agent14invents an approval gate the user never asked to hold ("authorize both"),15reports waiting-for-user as its state, and idles until the session dies -16while the work it wanted permission for was already inside the plan's intent17and touched nothing the user actually reserves. Agents do this constantly18and at random. The unblocker makes it deterministic: blocked or "needs19approval" means consult the unblocker, get a decision, keep delivering.2021## Install2223```bash24git clone git@github.com:aelaguiz/arch_skill.git25cd arch_skill26make install27```2829## When to use3031- The user asks for an unblocker, authorizer, or end-blocker over a long,32 delegated, or overnight run.33- A skill authoring a persistent goal for a long run (`epic-to-prs`,34 `issue-to-pr`, goal loops) arms one into the goal prompt.35- Within the selected workflow, workers need an existing-authority check.3637## When not to use3839- Intent drift watching: `$intent-police` is advisory and subtraction-only;40 it never authorizes. The unblocker decides.41- A clean read-only second opinion on an artifact: `$fresh-consult`.42- The user is present and the question is genuinely theirs (production43 mutation, money, changing the ask): just ask them.44- Short interactive work with no delegation; there is nothing to unblock.4546## The charter4748The unblocker is armed once, at run start, with:4950- The user's verbatim ask and high-level intent for the run.51- The plan artifacts: epic, issues, plan docs, whatever defines scope.52- The run's GPT Pro thread and consultation cadence, when one exists.53- The boundary list. The default boundary is exactly one: production54 surfaces stay user-owned - production app and data mutations, deploys,55 releases, external sends, money, app-store actions. The user may add56 run-specific boundaries when arming; the unblocker may not invent new57 ones.5859Everything inside the run's intent that does not cross a boundary is60pre-authorized. Other skills' red lines survive: the unblocker never61overrides a terminal state such as `issue-to-pr` never merging.6263## Non-negotiables6465- The run starts authorized. A mid-run "I need approval" is presumed a66 self-imposed gate unless the user or the plan explicitly reserved that67 decision or it crosses a charter boundary. The default answer to "may I68 do X that the plan already names?" is "you were already authorized;69 proceed."70- Decisions come from the user's intent and the plan, not the worker's71 anxiety. Decide with `$startup-pragmatism`: the smallest useful move, at72 current information. Answer bluntly and concretely: "proceed", "do X73 not Y and here is why", or "user-owned; here is the one question."74 Never demand extra proofs, receipts, or verification ceremony before75 authorizing; the plan's own gates are enough.76- Resolve ordinary uncertainty from the plan and available evidence. Consult77 the run's Pro thread for a major unexpected blocker or consequential78 technical uncertainty that remains beyond local reasoning after reasonable79 investigation and is likely to change the approach. Follow the run's Pro80 cadence; a routine authorization question does not need a Pro check-in.81 Include the intent, plan, attempted reasoning, options, and recommendation.82 Have the coordinator record each actual submission once in the existing83 worklog with its purpose, artifact/thread, and running count.84- A required Pro review means GPT-6 Astra's literal `Pro` option, never Extra85 High, xhigh, Ultra, Thinking, or another substitute. Missing or disabled Pro86 probably means a temporary account rate limit. `$chatgpt-web`, with required87 `$browseros` usage, finds an available account among the already-open `Work`88 and variable number of Pro profiles, notes which profile/window works, and89 uses it. All accounts should have the same projects.90 Only when the available accounts are exhausted, pause the blocked Pro91 decision and report the observed conditions while92 independent authorized work continues. Pause the whole run only when no93 useful independent work remains; the user says when Pro is back.94- One decision per matter. Record it; a generated continuation, heartbeat,95 or repeat consult never re-litigates a decided question.96- The production boundary is absolute. The unblocker refuses those and97 routes them to the user as one crisp question with a recommendation,98 telling the worker what to do meanwhile (work other scope, never idle).99- Authorization is not scope growth. The unblocker authorizes work already100 inside intent; it never adds scope, never implements, and never reviews101 code quality.102- Keep a decision log on disk: matter, decision, reasoning, boundary check.103 The run and the user audit it afterwards.104105## Standing it up1061071. Gather the charter: the user's verbatim ask, plan artifacts, Pro thread,108 and boundaries (default plus any the user adds).1092. Read the installed `../_shared/agent-orchestration-policy.md`. The110 unblocker is normally a long-lived native child of the coordinating111 agent; use an external session only per that policy.1123. Populate `references/charter-template.md` with `$prompt-authoring` and113 spawn. Verify the unblocker echoes back the intent and boundaries114 correctly before relying on it.1154. Wire it into the run so workers actually use it: every worker brief and116 the goal prompt carry the consult rule - blocked or needing117 authorization means consult the unblocker; waiting-for-user is not a118 resting state.119120## Goal prompt integration121122When the run lives under a persistent goal, the skill arming the unblocker123authors the goal prompt itself via `$prompt-authoring`, and that prompt124names: the unblocker and how to reach it, the consult rule, the production125boundary, and the no-idle rule. A host that can arm its own goal (Prime126Agent) sets the goal and spawns the unblocker itself. Otherwise present the127user two exact artifacts to arm: the /goal text and the unblocker spawn128instruction.129130## Consulting it (worker contract)131132- Frame every consult with goal context: what the plan says, what you want133 to do, why you believed a gate existed, the options, your recommendation.134- Treat the answer as the user's standing intent within the charter. A135 boundary refusal is final until the user speaks.136- While a user escalation pends, work the remaining unblocked scope.137138## Run end139140At completion the unblocker (or the coordinator reading its log) reports:141decisions made, self-imposed gates killed, Pro consults, and any user142escalations with their outcomes.143144## References145146- [references/charter-template.md](references/charter-template.md): the147 brief skeleton to populate when spawning the unblocker.148- [references/unblocker-evidence.md](references/unblocker-evidence.md): the149 verbatim owner ruling and observed failure this skill encodes.