agentleFS
samwelmungasamwelmunga/jenga-npm/.agents/skills/j-break/SKILL.md

j.break

Skill0 starsChanged 22 days agoApache-2.0View on GitHub

Stop an orchestration at the next safe task boundary — the task currently running finishes and records its status, then execution halts before the next one starts. Soft by default (one-shot), `hard` persists until `clear`, and `status` adds a progress rapport for the current scope of execution. Use when a /jenga, /do or /dooo run should pause without killing the turn mid-flight.

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not guess and do not touch the flag.

    line 69

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Break — Stop at the Next Safe Boundary

skills/j-break/ is the canonical, hand-edited directory for this skill, per CLAUDE.md's "The Canonical Naming Contract". The frontmatter name is j.break, never j.j-break.

Why a flag file

A slash command typed during a run cannot reach a background sub-agent or an in-flight loop. /jenga Phase 4, /do's step 8 and /dooo's fan-out keep advancing on their own, and there is no channel for a command typed by the operator to arrive in them. So /break interrupts nothing: it leaves a request somewhere every loop will look, and each loop checks for it at its own task boundary. That is also why it is safe — nothing is aborted mid-flight, so no worktree is orphaned, no status write is skipped and no bundle manifest loses its rollback anchor.

The flag's schema and lifecycle are documented in templates/SCRUM_BOARD_SCHEMA.md, in the section on the break request flag. The file's name is deliberately not repeated here, so that a grep for it across the orchestrator skills stays a reliable check that nobody parses it. This file contains none of that logic. Every read, write, consume and clear lives in skills/j-break/scripts/; this skill only parses the argument, calls the right script, and tells the user what happened.

Instructions

Resolve the scripts directory once:

BREAK_DIR="$([ -d skills/j-break/scripts ] && echo skills/j-break/scripts || echo node_modules/@jenga-ai/agent/skills/j-break/scripts)"

1. Dispatch on the argument

InvocationRun
/breakbash "$BREAK_DIR/set-break.sh" — soft break, consumed by the next loop that reaches a task boundary
/break hardbash "$BREAK_DIR/set-break.sh" --hard — persists until /break clear
/break clearbash "$BREAK_DIR/clear-break.sh"
/break statusbash "$BREAK_DIR/set-break.sh" --status, then bash "$BREAK_DIR/render-execution-status.sh"
/break hard statusbash "$BREAK_DIR/set-break.sh" --hard --status, then bash "$BREAK_DIR/render-execution-status.sh"

Accept status and hard in either order. Match the argument words exactly; never guess.

1.1. status is a modifier, not a sub-command

status rides on top of a soft or hard break; it has no meaning on its own and never clears anything. Only /break clear removes a break, and clear does not combine with status (an unrecognised combination — see section 2).

The rapport is rendered at two moments, and both matter.

  1. Immediately, when the operator runs /break status: set the break first, then run render-execution-status.sh and print its output verbatim, so the operator sees the state at the moment they asked.
  2. At the halt, by whichever loop consumes the flag. The flag's with_status field is what carries the request across that gap, because the loop cannot see the operator's original arguments. Nothing to do here: /do, /dooo and /jenga already render it when they see with_status=true.

What the rapport can tell you about each finished item. /do appends a line to the gitignored project/queue/execution-ledger.jsonl (via record-execution.sh) each time it records a terminal status, keyed by session. The rapport marks a finished item ran this session when the ledger has an entry for it under the current session key, and done earlier otherwise. With no ledger file it shows board status only and says no per-session record exists. Print it verbatim; never guess which session finished an item.

Standing hard break. /break status against a hard break that is already standing renders the rapport and leaves the mode hard: set-break.sh never downgrades, and says so in its confirmation line. Repeat that explicitly in your reply — "the break remains hard; use /break clear to remove it". An operator who thinks they downgraded a break and did not is exactly the confusion to prevent.

Reading the flag's current state (for example to describe it to the operator) must use bash "$BREAK_DIR/check-break.sh" --peek, never a plain call. A plain call consumes a soft break, which would steal the break from the running loop it was armed for.

The rendering itself stays in the script. This skill adds no formatting, no scope resolution and no board reading. If the script fails, say the rapport is unavailable and why; do not improvise one from the board.

2. Unrecognised argument

Do not guess and do not touch the flag. Print the valid forms, per CLAUDE.md's interaction pattern, and take no action:

That is not a /break form. Which did you mean?
1. /break — stop after the current task (one-shot)
2. /break hard — stop, and stay stopped until cleared
3. /break clear — remove a standing break
4. /break status — stop, and print a progress rapport for this run
5. Other (describe below)

3. Relay the result

Show the script's one-line confirmation verbatim, then explain what it means in plain terms.

After setting a break, state the boundary semantics: the task currently running finishes and records its status, then execution halts before the next one starts. Nothing is aborted mid-flight.

  • Soft: the first loop to reach a task boundary honours it and clears it. The next run proceeds normally.
  • Hard: it stays in place across loops and sessions. /break clear is required before anything will run again.

If nothing is in flight, say so — and do not present it as an error. The flag is still armed and the next run will honour it, which is a legitimate way to use /break: arm it, then start the run you want to stop at its first boundary.

After clear, relay whether a break was actually standing. Clearing when none was set is a success, not a failure.

4. Failure

A non-zero exit from a script means the script itself failed, not that a break was requested. Report its stderr verbatim and do not claim a break is in place.

What this does not do

/break halts the dispatcher, not a running agent. Every checkpoint sits at a task boundary, so a wedged agent in the middle of a task has no boundary to stop at — that is by design. The only intervention that reaches inside a running agent is TaskStop, which j.check-in offers behind a second confirmation.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.