Skip to content
Back to skills

Run

ASecurity

Run the release composition task by task, without stopping.

  • 18 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 6, 2026
ai-agentspythongoshellbashgit

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add Kibertum/tausik-core --skill run --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Run?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Run
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kibertum-run/badge)](https://www.skillsdirectory.com/skills/kibertum-run)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: run
description: "Run the release composition task by task, without stopping."
effort: slow
context: inline
---

# /run — Autonomous execution of the release composition

Close tasks one after another without handing control back between them.

**Why this skill exists.** TAUSIK's autonomy used to be an INSTRUCTION: CLAUDE.md asked the
agent to keep going. MEASURED over one session — 22 tasks closed, 4 of them from the plan
that existed beforehand, 18 filed and closed inside the same session — asking does not work,
and the project's own doctrine says so: a rule that is only asked for gets switched off the
same week. A turn that ends with prose returns control to the user and the agent cannot
resume itself. So continuing has to be a loop inside ONE turn, which is what this is.

## What it is worth, as a number

The claim "runs the composition without stopping" is words until it is measured, so it is:

```bash
python scripts/autonomy_metric.py <transcript.jsonl> --closures <tasks closed>
```

It reports CLOSURES PER OWNER MESSAGE and STOPS PER CLOSURE, where a stop is a message from the
owner whose only content is a request to carry on — the owner paying a message to restart an
agent that froze. A message carrying a NEW instruction is deliberately not counted: otherwise the
number would punish conversation instead of freezing, and the first real discussion about plans
would ruin it.

Measured on this project's own session #277: 68 owner messages of which 3 were bare nudges, 44
closures — 0.65 closures per message and 0.07 stops per closure, against the 0.32 recorded before
this skill existed. DESCRIPTIVE, not predictive, like risk and calibration here: it says what
happened over a transcript that exists, and promises nothing about the next run.

## When to use

- The composition is planned and the owner said to work it.
- Overnight or unattended execution.
- After `/plan`, when the slugs are in the DB and nothing needs a decision.

**Do NOT use** for work that needs the owner's judgement mid-implementation: architecture
choices, a risky migration, anything touching money or auth, anything where "which way"
is the question rather than "how". Those go through `/task` one at a time. A driver that
guesses at a judgement call produces work someone has to undo.

## Algorithm

### 1. Arm the run

```bash
export TAUSIK_AUTONOMOUS_BUDGET_BLOCK=1
```

This turns the call budget from advice into a ceiling at 2× — measured over 651 closures,
where the median task lands at 0.58 of its estimate and only 8% pass 2×. Unattended, an
overrun is not information but a session spent on one task.

### 2. Ask the plan, every time

```bash
.tausik/tausik task next
```

**Ask before EVERY task, not once at the start.** Closing a task changes the composition:
it can auto-close a story, unblock a dependant, or surface a defect that outranks what
looked next a minute ago. A list captured up front is stale by its second entry.

Stop the loop when `task next` offers nothing. Its four states are different facts and only
one of them means "keep going":

| State | Meaning | Action |
|---|---|---|
| `ready` | a task is offerable | run it |
| `all-blocked` | everything waits on a predecessor | STOP, name the blockers |
| `all-claimed` | everything belongs to another agent | STOP, say so |
| `empty` | no planning work left | STOP, the composition is done |

### 3. Run one task

Invoke the `/task` skill with the slug. **Never reimplement what it does** — it carries
QG-0, the scope ACL, the context pack, the plan advisory and the model check. A driver that
bypasses them is a driver that closes tasks the gates would have refused.

Then do the work: Read/Edit/Bash/Glob/Grep as the task requires.

**Delegate what `task start` tells you to, and nothing else.** Codex workers use Terra
for bounded simple/medium work, Sol for declared complexity or named quality failure, and Astra
only for declared high risk. A startup-work refusal means continue in the coordinator; never
present advice as an applied switch or switch active-task identity.

**The closure is not delegated.** The subagent does the work and reports; verification, the
evidence lines and `task done` stay here. A receipt signed by a worker nobody reviewed is the
failure QG-2 exists to prevent — and for anything the banner does not mark, `/run` is a loop,
not a dispatcher.

Close with `task done --ac-verified --verify-handle …` exactly as manual work does.

### 4. Check the ceiling after each close

```bash
.tausik/tausik task budget-check <slug>
```

Non-zero means the task passed 2× its budget. Treat it exactly like a failure — go to
step 5. Silence means fine; the command prints nothing when there is nothing to say.

### 5. Hard-stop on the first failure

Any of these stops the loop: a `ServiceError`, a denied permission prompt, a blocked
`task done` with no legitimate bypass, a red verify that is not a typo, a non-zero
`budget-check`.

```
/run STOPPED at {slug}.
Closed before the stop: {slugs}
Reason: {what failed, verbatim}
Next: task logs {slug} — then fix and /run again; closed tasks are skipped because the
plan no longer offers them.
```

**Never auto-retry. Never silently continue.** A retry that works on the second attempt
hides a flake, and a driver that steps over a failure produces a release nobody can
account for.

### 6. Watch your own capacity — between tasks, never inside one

Before starting each task, ask whether there is room to FINISH it:

```bash
python scripts/run_capacity.py --remaining <tokens-your-runtime-reports>
```

Exit 0 means go. Exit 1 means: close what is open, write the handoff, name the next task
from the plan, and stop. Nothing prints while there is room — a capacity notice earns a
line only when it changes what happens next.

**Take the number the runtime gives you, do not infer one.** Measured across this
project's own sessions: tokens per call run from 562 to 10,958 with a median near 2,200,
so a call count converts to context only to within an order of magnitude; and 48 of 231
sessions with call data recorded no token figure at all. The framework had been trying to
derive from its telemetry a figure the host states outright.

**An absent reading means GO.** The absence of a measurement is not a measurement of the
limit, and a driver that stopped on missing data would stop hardest exactly where it knows
least.

**Both directions are failures, and the second one hides.** Running into the wall mid-task
leaves edits nobody can account for. Stopping early leaves the composition half-done while
the context was fine — a polite refusal of autonomy, which is the behaviour this skill
exists to end. Do not stop out of caution; stop on the number.

### 7. One handoff at the end

`session_handoff` once per run, not once per task — each task already wrote its own. The
summary names `/run`, how many closed, and where it stopped.

## Output

Between tasks, one line each: `{slug}: closed ({calls} calls)`. At the end:

```
/run: {n} closed, stopped at {reason or "composition empty"}. Handoff recorded.
```

Nothing else. Prose between tasks is what ends a turn, and ending a turn is exactly what
this skill exists to avoid.

## What /run does NOT do

- It does not choose tasks — `task next` does, and the composition is the plan.
- It does not skip gates, and it does not pass `--force` to anything.
- It does not file tasks it finds and immediately start them. Filing a finding is free;
  starting it is a departure from the plan, and `task start` will say so.
- It does not ask the owner between tasks. That is the point.

## Gotchas

- **A turn that ends with prose ends the run.** Control returns to the user and the agent
  cannot resume itself. Between tasks print one line, never a summary — the summary is
  what stops the loop, which is the failure this skill was built against.

- **`budget-check` prints nothing when it is happy.** Read the exit code, not the output:
  a check whose silence means success is invisible to `grep` and obvious to `&&`.

- **The ceiling is armed by an environment variable, so it dies with the shell.** Each
  Bash call in some hosts is its own process; export it in the same command as the check,
  or the run is unarmed and nothing says so.

- **Stopping halfway through a task is worse than not starting it.** Edits without a close
  leave the next agent unable to tell what was verified. Judge room to FINISH before
  starting, and stop between tasks.

- **A red verify is not always a defect.** `bootstrap_drift` after editing `scripts/`
  means the profile was not redeployed — run `python bootstrap/bootstrap.py --ide all`
  and verify again. That is a step, not a failure; a genuine failure is one that survives
  the remediation the gate names.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.