babysit ยท diff

git:20260715.3c47699 to v0.1.3

52 added, 42 removed. Audit A to A.

---
name: babysit
- description: >-
- Orchestrate via @babysitter. Use this skill when asked to babysit a run,
- orchestrate a process or whenever it is called explicitly. (babysit,
- babysitter, orchestrate, orchestrate a run, workflow, etc.)
+ description: Execute via @babysitter. Use this skill when asked to babysit a task, do anything that is structured process-driven (even a loop) or whenever it is called explicitly. (babysit, babysitter, with a process, orchestrate, orchestrate a run, workflow, loop until, etc.)
+ allowed-tools: Read, Grep, Write, Task, Bash, Edit, Grep, Glob, WebFetch, WebSearch, Search, AskUserQuestion, TodoWrite, TodoRead, Skill, BashOutput, KillShell, MultiEdit, LS
+ version: 0.1.3
---
# babysit
- Orchestrate `.a5c/runs/<runId>/` through iterative execution.
+ <!-- CORE-OVERLAY-START -->
+ ## This repository (Asymmetric-al/core)
+
+ Cursor has no Stop hook that can drive the orchestration loop between turns.
+ Use in-turn iteration: run the full babysitter loop in a single session turn.
+ Reconcile this overlay after upstream refreshes before running
+ `bun run skills:sync`.
+
+ ### Triggers
+
+ - The user asks to babysit, orchestrate, or run a structured process through
+ `@babysitter`.
+
+ ### Workflow
+
+ 1. Resolve the exact SDK pin from `docs/ai/skills/babysit/versions.json`.
+ Do not fall back to an unpinned package tag or a global install.
+ 2. Drive `$CLI run:iterate` repeatedly in the same turn until the run
+ completes or needs user input.
+ 3. Keep scratch checkouts under `/tmp`, not under `.a5c/runs/*/work`.
+
+ ### Checklist
+
+ - [ ] The CLI used the reviewed exact pin through `npm exec`
+ - [ ] Iteration happened in-turn, without relying on a Stop hook
+ - [ ] No run-dir worktree was left behind
+
+ <!-- CORE-OVERLAY-END -->
+
+ Follow the commands below exactly. but apply judgement and creativity to get the job done. no matter how small or simple the task may seem, you must use the babysitter SDK and run lifecycle to execute it. This is non-negotiable. If you are asked to do something that seems like it could be done with a simple tool call, you must still use the babysitter SDK to create a run, define tasks, execute them, and complete the run. This is how you will learn and demonstrate mastery of the babysitter system. Always follow the full process, even for trivial tasks.
+
+ Subagents that need a scratch checkout or working directory must create it under
+ `/tmp/<descriptive-name>/`, not under `.a5c/runs/<runId>/work`. Before returning
+ deliverables, validate that no run-dir worktree was left behind, for example:
+
+ ```bash
+ find .a5c/runs -maxdepth 3 -name work -type d -print
+ ```
+
+ That command should print nothing. If it prints a non-empty work directory, move
+ or remove only the scratch data you created before returning.
+
## Dependencies
### Babysitter SDK and CLI
Resolve the repository root and read the reviewed SDK version from
`docs/ai/skills/babysit/versions.json`. Stop immediately if the repository root
or an exact package version cannot be resolved:
```bash
REPO_ROOT=$(git rev-parse --show-toplevel) || exit 1
SDK_VERSION=$(
node -e '
const fs = require("node:fs");
const path = require("node:path");
const versionsPath = path.join(
process.argv[1],
"docs/ai/skills/babysit/versions.json",
);
const exactVersionPattern = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
try {
const versions = JSON.parse(fs.readFileSync(versionsPath, "utf8"));
const sdkVersion = versions.sdkVersion;
if (typeof sdkVersion !== "string" || !exactVersionPattern.test(sdkVersion)) {
throw new Error("sdkVersion must be a nonempty exact package version");
}
process.stdout.write(sdkVersion);
} catch (error) {
console.error(`Unable to resolve the pinned Babysitter SDK version: ${error.message}`);
process.exit(1);
}
' "$REPO_ROOT"
) || exit 1
- CLI="npx -y @a5c-ai/babysitter-sdk@$SDK_VERSION"
+ CLI="npm exec --yes --package @a5c-ai/babysitter-sdk@$SDK_VERSION -- babysitter"
```
### jq
Make sure `jq` is installed and available in the path. If not, install it.
## Instructions
- Run the following command to get full orchestration instructions:
+ Run the following command to get full instructions:
```bash
- $CLI instructions:babysit-skill --harness cursor --json
+ $CLI instructions:babysit-skill --harness cursor --interactive
```
- Follow the instructions returned by the command above to orchestrate the run.
-
- ## Cursor -- In-Turn Loop Model
-
- **IMPORTANT**: Cursor does NOT have a Stop hook that can drive the orchestration
- loop between turns. Unlike Claude Code, there is no hook mechanism to
- automatically re-enter the orchestration loop.
-
- Therefore, you MUST use **in-turn iteration**: run the full orchestration loop
- within a single session turn. The pattern is:
-
- 1. `$CLI run:iterate --json` -- get pending actions
- 2. For each pending action: execute it (run tasks, post results via `task:post`)
- 3. `$CLI run:iterate --json` -- check for more pending actions
- 4. Repeat steps 2-3 until run completes or reaches a breakpoint requiring user input
- 5. If a breakpoint requires user input, ask the user and post the response, then continue iterating
-
- All iteration happens within the same turn -- do NOT rely on hooks to re-enter
- the orchestration loop. The agent drives the loop directly by calling
- `run:iterate` repeatedly until completion.
-
- ### Loop Example
+ For non-interactive mode (running with `-p` flag or no AskUserQuestion tool):
```bash
- # Initial iterate
- RESULT=$($CLI run:iterate --run-id "$RUN_ID" --json)
- STATUS=$(echo "$RESULT" | jq -r '.status')
-
- while [ "$STATUS" != "completed" ] && [ "$STATUS" != "failed" ]; do
- # Process pending actions from RESULT
- # ... execute tasks, post results ...
-
- # Iterate again
- RESULT=$($CLI run:iterate --run-id "$RUN_ID" --json)
- STATUS=$(echo "$RESULT" | jq -r '.status')
- done
+ $CLI instructions:babysit-skill --harness cursor --no-interactive
```
+
+ Follow the instructions returned by the command above to orchestrate the run.