"Gate for EVERY question, permission request, or 'may I / should I / which option / am I blocked' impulse, and for install / push / publish / merge impulses - the pre-approved table that means ACT, DO NOT ASK (install tooling, push main, publish, merge verified work - asking again IS the failure), then the escalate-last chain repo -> standing ox advisory thread -> one bundled operator message. Carries the live thread id, --resume invocation, recall verification, and thread-loss recovery. Load at the URGE to compose any operator question, not at the send."
Install
npx skillscat add simnova/openclinxr/autonomy-boundaries Install via the SkillsCat registry.
Autonomy already granted
Seven corrections in one session were the same sentence: the operator re-granting permission that was
already granted. The tell is verbatim - "istall as needed - you know you don't need permission to
install". The "you know" is the audit finding.
1. The pre-approved list - asking again IS the failure
| action | grant on record, verbatim |
|---|---|
| install any tooling (pip, pnpm add, brew, clone a provider) | "you don't need permission to install" |
| push to main / origin | "you may push to main", "welcome to keep pushing main to origin without any operator approval" |
| publish the website / public surfaces | "Stop asking me for permission to publish, you have rights to" |
| merge verified work to main | "please merge to main and publish" |
Each is granted ONCE, permanently. Before composing any "may I", check this table. If the action is
on it: do it, and record it in the wake BLUF. If you catch yourself drafting a permission request for
a row above, that request is the mistake.
The re-ask trap. Do not re-request approval for a transition already directed. Measured: I asked
what approval was needed to move from Anny to MPFB after the same transition had been directed three
times. Directed work needs a status, not an approval. When you catch a permission draft for directed
work, DELETE it and emit the status line instead, verbatim shape:
<Transition> was directed on <date>. Status: <stage>. Proceeding; redirect if wrong.
A draft containing a question mark, for a row above or a directed transition, IS the failure - not
the send.
2. Escalate-last
Verbatim, and said twice: "confirm with the superagent before you ever ask me", and "questions that
you asked me - ask the superagent and take their advise".
The mechanics now live in ask-the-superagent - one persistent ox thread with a stored
conversation id, so context accumulates instead of restarting. Load it the moment you catch yourself
drafting a question for the operator.
Every question passes three gates, in order:
- The repo - SSOT, MADRs, PROJECT_STATUS, the code. Most questions die here.
- The peer / superagent thread - judgment, verification, alternatives.
- The operator - only what gates 1-2 cannot answer, bundled: one message, all questions, each
with a recommended default.
Also standing: before responding to the operator on a contested position, check the position with
another agent first.
3. What still genuinely requires the operator
This skill is not "never ask". These stay reserved:
- scope expansion beyond approved boundaries - paid or cloud services, new providers
- clinical-validity, scoring, licensure or exam-equivalence claims of any kind
- destructive operations on shared state I did not create - another agent's worktree, force-pushes,
protected-registry rewrites - changing an explicit operator directive
The test for everything else: reversible? local? in-kind with something already granted? Three yeses
means do it, record it, move on.
The standing thread (merged from ask-the-superagent)
Ask the superagent, not the operator
Operator standing directive, verbatim: "every time you think about asking me a question, ask the
superagent (ox now) in a special continuing conversation where you keep the conversation id around."
The trigger is the URGE, not the send. The moment you notice yourself composing a question for the
operator, that is the cue to open this skill. The question goes here first.
The standing thread
SESSION ID: 01a02796-b864-7500-b4a5-6cc66b3507c2 (machine-local: ~/.grok/sessions/)
MODEL: ox-alpha
OPENED: 2026-08-21export OPENROUTER_API_KEY="$OPENROUTER_API_KEY" # already in ~/.zshrc
OPENCLINXR_WORKER=1 GROK_SUBAGENTS=1 OPENCLINXR_RAW_GROK_SANCTIONED=1 \
~/.grok/bin/grok -p "<your question, with MEASUREMENTS>" \
--resume 01a02796-b864-7500-b4a5-6cc66b3507c2 \
--model ox-alpha --output-format json --max-turns 16 \
--cwd /Volumes/files/src/openclinxrAlways --resume this id. A fresh session re-explains the project, loses every prior ruling, and
costs the accumulated context that makes this thread worth more than a cold consult.
Why ONE thread and not a new consult each time
The thread already holds: who I am and how the loop runs; the standing constraints (D1/D2/D9/D12, the
CC0/CC-BY licence bar, CMU-is-conditional, Animato refused, the parked list, rooms closed); and - most
usefully - the five self-governance failures it was asked to hold me to: loop lapse, asking for
already-granted permission, deprecated-rail drift, publishing status only when asked, and
hand-authoring where a proven tool exists.
Verified on open: resuming returned the same session id and recalled all five unprompted.
Verify recall before trusting an answer
A wrong-but-existing session id CONFABULATES rather than erroring - it loads project memory and
answers confidently about someone else's work. So, on the first resume of any session, or any time the
answer feels generically right:
- Confirm the returned
sessionIdmatches the id you passed. - Confirm
Session ... found locallyappeared on stdout. - Ask one recall question whose answer only this thread holds. If it cannot answer, you are talking to
a stranger - discard the reply.
What to send
- Measurements, never narrative. File paths, counts, hashes, quotes. A question without numbers
gets an answer without grounding. - A concrete proposal to attack, not an open question. "Attack this" beats "what should I do".
- Ask for alternatives you did not list, ranked, and for the ONE thing you are most likely to get
wrong next. - Say plainly when you want it to tell you the direction is wrong.
What to do with the answer
- Verify tree claims before acting. It is reliably right about structure and unreliably right about
mechanism. A recommendation whose precondition is false is worse than none - one of its best-argued
picks rested on a staged asset that did not exist, and one grep killed it. - A VERIFIED finding supersedes the plan. An INFERRED one is a lead.
- NOT FOUND is a result - record it so the next cycle does not re-search the same ground.
What still reaches the operator
Only what this thread cannot answer - and then bundled: one message, all questions, each with a
recommended default and what happens if they stay silent. Never a soft menu.
Reserved regardless: scope expansion beyond approved boundaries (paid/cloud/new providers), any
clinical-validity or licensure claim, destructive operations on shared state I did not create, and
changing an explicit operator directive. See autonomy-boundaries for the pre-approved list that needs
no question at all.
If the thread is lost
Session ids are machine-local and do not survive a wiped ~/.grok/sessions. If --resume 404s:
ls -dt ~/.grok/sessions/*/*/ | headand grep candidates'updates.jsonlfor a distinctive phrase
from the opener ("STANDING ADVISORY THREAD").- If genuinely gone, re-open with a fresh opener carrying: my role and the loop; how it should behave
(attack, ground, label INFERRED, alternatives, name my next likely error, be terse); the standing
constraints; and the five self-governance failures. - Update the SESSION ID at the top of this file in the same change. A skill carrying a dead id is
worse than one carrying none, because it will be used.