@a5c-ai/babysitter-codex 0.1.6-staging.2df34517 → 0.1.6-staging.3faa6c86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.app.json +3 -0
- package/.codex-plugin/plugin.json +3 -0
- package/README.md +16 -19
- package/assets/icon.svg +7 -0
- package/assets/logo.svg +8 -0
- package/bin/install-shared.js +87 -2
- package/bin/install.js +3 -3
- package/hooks/babysitter-session-start.sh +14 -7
- package/hooks/babysitter-stop-hook.sh +14 -7
- package/hooks/user-prompt-submit.sh +2 -8
- package/package.json +4 -2
- package/scripts/team-install.js +3 -1
- package/skills/babysit/SKILL.md +17 -384
- package/skills/call/SKILL.md +1 -0
- package/skills/yolo/SKILL.md +3 -0
package/.app.json
ADDED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"skills": "./skills/",
|
|
21
21
|
"hooks": "./hooks.json",
|
|
22
|
+
"apps": "./.app.json",
|
|
22
23
|
"interface": {
|
|
23
24
|
"displayName": "Babysitter",
|
|
24
25
|
"shortDescription": "Run Babysitter orchestration flows from Codex",
|
|
@@ -39,6 +40,8 @@
|
|
|
39
40
|
"Resume the latest Babysitter run in this workspace"
|
|
40
41
|
],
|
|
41
42
|
"brandColor": "#0F766E",
|
|
43
|
+
"composerIcon": "./assets/icon.svg",
|
|
44
|
+
"logo": "./assets/logo.svg",
|
|
42
45
|
"screenshots": []
|
|
43
46
|
}
|
|
44
47
|
}
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Babysitter integration package for OpenAI Codex CLI.
|
|
4
4
|
|
|
5
|
-
This package
|
|
5
|
+
This package ships a real Codex plugin bundle:
|
|
6
6
|
|
|
7
7
|
- `.codex-plugin/plugin.json`
|
|
8
8
|
- `skills/`
|
|
@@ -10,8 +10,9 @@ This package now ships as a real Codex plugin bundle:
|
|
|
10
10
|
- `hooks/`
|
|
11
11
|
|
|
12
12
|
It still uses the Babysitter SDK CLI and the shared `~/.a5c` process-library
|
|
13
|
-
state
|
|
14
|
-
|
|
13
|
+
state. The installer registers the plugin bundle and also materializes the
|
|
14
|
+
active Codex `skills/`, `hooks/`, and `hooks.json` surface at the selected
|
|
15
|
+
scope so Codex can execute the Babysitter commands and hook scripts directly.
|
|
15
16
|
|
|
16
17
|
## Installation
|
|
17
18
|
|
|
@@ -21,27 +22,17 @@ Install the SDK CLI first:
|
|
|
21
22
|
npm install -g @a5c-ai/babysitter-sdk
|
|
22
23
|
```
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
clone the repo and install the plugin globally:
|
|
25
26
|
|
|
26
27
|
```bash
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
This copies the plugin into `~/.codex/plugins/babysitter-codex`, registers it
|
|
31
|
-
in `~/.agents/plugins/marketplace.json`, merges the required global Codex
|
|
32
|
-
config into `~/.codex/config.toml`, and ensures the Babysitter process library
|
|
33
|
-
is active in `~/.a5c`.
|
|
28
|
+
git clone https://github.com/a5c-ai/babysitter.git
|
|
29
|
+
cd babysitter
|
|
30
|
+
codex
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
npx @a5c-ai/babysitter-codex install --workspace /path/to/repo
|
|
32
|
+
> /plugins
|
|
39
33
|
```
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
it in `<workspace>/.agents/plugins/marketplace.json`, merges
|
|
43
|
-
`<workspace>/.codex/config.toml`, and records install metadata under
|
|
44
|
-
`<workspace>/.a5c/team/`.
|
|
35
|
+
then navigate to the 'babysitter' entry and select 'Install'.
|
|
45
36
|
|
|
46
37
|
## Integration Model
|
|
47
38
|
|
|
@@ -62,6 +53,9 @@ After `install --workspace`, the important files are:
|
|
|
62
53
|
- `plugins/babysitter-codex/.codex-plugin/plugin.json`
|
|
63
54
|
- `plugins/babysitter-codex/skills/babysit/SKILL.md`
|
|
64
55
|
- `plugins/babysitter-codex/hooks.json`
|
|
56
|
+
- `.codex/skills/`
|
|
57
|
+
- `.codex/hooks/`
|
|
58
|
+
- `.codex/hooks.json`
|
|
65
59
|
- `.agents/plugins/marketplace.json`
|
|
66
60
|
- `.codex/config.toml`
|
|
67
61
|
- `.a5c/team/install.json`
|
|
@@ -77,6 +71,9 @@ test -f ~/.codex/plugins/babysitter-codex/.codex-plugin/plugin.json
|
|
|
77
71
|
test -f ~/.codex/plugins/babysitter-codex/hooks.json
|
|
78
72
|
test -f ~/.codex/plugins/babysitter-codex/hooks/babysitter-stop-hook.sh
|
|
79
73
|
test -f ~/.codex/plugins/babysitter-codex/skills/babysit/SKILL.md
|
|
74
|
+
test -f ~/.codex/hooks.json
|
|
75
|
+
test -f ~/.codex/hooks/babysitter-stop-hook.sh
|
|
76
|
+
test -f ~/.codex/skills/babysit/SKILL.md
|
|
80
77
|
test -f ~/.agents/plugins/marketplace.json
|
|
81
78
|
```
|
|
82
79
|
|
package/assets/icon.svg
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Babysitter icon">
|
|
2
|
+
<rect width="64" height="64" rx="14" fill="#0F766E"/>
|
|
3
|
+
<path d="M16 22h32v20H16z" fill="#ECFEFF"/>
|
|
4
|
+
<circle cx="24" cy="32" r="3" fill="#0F766E"/>
|
|
5
|
+
<circle cx="32" cy="32" r="3" fill="#0F766E"/>
|
|
6
|
+
<circle cx="40" cy="32" r="3" fill="#0F766E"/>
|
|
7
|
+
</svg>
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 80" role="img" aria-label="Babysitter logo">
|
|
2
|
+
<rect x="0" y="8" width="64" height="64" rx="14" fill="#0F766E"/>
|
|
3
|
+
<path d="M16 26h32v28H16z" fill="#ECFEFF"/>
|
|
4
|
+
<circle cx="24" cy="40" r="3" fill="#0F766E"/>
|
|
5
|
+
<circle cx="32" cy="40" r="3" fill="#0F766E"/>
|
|
6
|
+
<circle cx="40" cy="40" r="3" fill="#0F766E"/>
|
|
7
|
+
<text x="80" y="50" font-family="Arial, sans-serif" font-size="34" fill="#0F766E">Babysitter</text>
|
|
8
|
+
</svg>
|
package/bin/install-shared.js
CHANGED
|
@@ -58,10 +58,11 @@ const DEFAULT_MARKETPLACE = {
|
|
|
58
58
|
};
|
|
59
59
|
const PLUGIN_BUNDLE_ENTRIES = [
|
|
60
60
|
'.codex-plugin',
|
|
61
|
+
'.app.json',
|
|
62
|
+
'assets',
|
|
61
63
|
'hooks',
|
|
62
64
|
'hooks.json',
|
|
63
65
|
'skills',
|
|
64
|
-
'README.md',
|
|
65
66
|
'babysitter.lock.json',
|
|
66
67
|
];
|
|
67
68
|
|
|
@@ -306,6 +307,26 @@ function writeJson(filePath, value) {
|
|
|
306
307
|
writeFileIfChanged(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
307
308
|
}
|
|
308
309
|
|
|
310
|
+
function ensureExecutable(filePath) {
|
|
311
|
+
try {
|
|
312
|
+
fs.chmodSync(filePath, 0o755);
|
|
313
|
+
} catch {
|
|
314
|
+
// Best-effort only. Windows and some filesystems may ignore mode changes.
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function normalizeMarketplaceSourcePath(marketplacePath, pluginSourcePath) {
|
|
319
|
+
let next = pluginSourcePath;
|
|
320
|
+
if (path.isAbsolute(next)) {
|
|
321
|
+
next = path.relative(path.dirname(marketplacePath), next);
|
|
322
|
+
}
|
|
323
|
+
next = String(next || '').replace(/\\/g, '/');
|
|
324
|
+
if (!next.startsWith('./') && !next.startsWith('../')) {
|
|
325
|
+
next = `./${next}`;
|
|
326
|
+
}
|
|
327
|
+
return next;
|
|
328
|
+
}
|
|
329
|
+
|
|
309
330
|
function ensureMarketplaceEntry(marketplacePath, pluginSourcePath) {
|
|
310
331
|
const marketplace = fs.existsSync(marketplacePath)
|
|
311
332
|
? readJson(marketplacePath)
|
|
@@ -318,7 +339,7 @@ function ensureMarketplaceEntry(marketplacePath, pluginSourcePath) {
|
|
|
318
339
|
name: PLUGIN_NAME,
|
|
319
340
|
source: {
|
|
320
341
|
source: 'local',
|
|
321
|
-
path: pluginSourcePath,
|
|
342
|
+
path: normalizeMarketplaceSourcePath(marketplacePath, pluginSourcePath),
|
|
322
343
|
},
|
|
323
344
|
policy: {
|
|
324
345
|
installation: 'AVAILABLE',
|
|
@@ -401,6 +422,69 @@ function removeLegacyCodexSurface(codexHome) {
|
|
|
401
422
|
}
|
|
402
423
|
}
|
|
403
424
|
|
|
425
|
+
function installManagedSkills(packageRoot, codexHome) {
|
|
426
|
+
const sourceRoot = path.join(packageRoot, 'skills');
|
|
427
|
+
const targetRoot = path.join(codexHome, 'skills');
|
|
428
|
+
fs.mkdirSync(targetRoot, { recursive: true });
|
|
429
|
+
|
|
430
|
+
for (const entry of fs.readdirSync(sourceRoot, { withFileTypes: true })) {
|
|
431
|
+
if (!entry.isDirectory()) continue;
|
|
432
|
+
copyRecursive(
|
|
433
|
+
path.join(sourceRoot, entry.name),
|
|
434
|
+
path.join(targetRoot, entry.name),
|
|
435
|
+
);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
function mergeManagedHooksConfig(packageRoot, codexHome) {
|
|
440
|
+
const managedHooks = readJson(path.join(packageRoot, 'hooks.json')).hooks || {};
|
|
441
|
+
const hooksConfigPath = path.join(codexHome, 'hooks.json');
|
|
442
|
+
const existing = fs.existsSync(hooksConfigPath)
|
|
443
|
+
? readJson(hooksConfigPath)
|
|
444
|
+
: { hooks: {} };
|
|
445
|
+
if (!existing.hooks || typeof existing.hooks !== 'object') {
|
|
446
|
+
existing.hooks = {};
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
for (const [eventName, matchers] of Object.entries(managedHooks)) {
|
|
450
|
+
const existingMatchers = Array.isArray(existing.hooks[eventName]) ? existing.hooks[eventName] : [];
|
|
451
|
+
const filteredMatchers = existingMatchers
|
|
452
|
+
.map((matcher) => {
|
|
453
|
+
const hooks = Array.isArray(matcher.hooks) ? matcher.hooks : [];
|
|
454
|
+
const keptHooks = hooks.filter((hook) => {
|
|
455
|
+
const command = String(hook.command || '');
|
|
456
|
+
return !LEGACY_HOOK_SCRIPT_NAMES.some((name) => command.includes(name));
|
|
457
|
+
});
|
|
458
|
+
return keptHooks.length > 0 ? { ...matcher, hooks: keptHooks } : null;
|
|
459
|
+
})
|
|
460
|
+
.filter(Boolean);
|
|
461
|
+
existing.hooks[eventName] = [...filteredMatchers, ...matchers];
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
writeJson(hooksConfigPath, existing);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
function installManagedHooks(packageRoot, codexHome) {
|
|
468
|
+
const sourceRoot = path.join(packageRoot, 'hooks');
|
|
469
|
+
const targetRoot = path.join(codexHome, 'hooks');
|
|
470
|
+
fs.mkdirSync(targetRoot, { recursive: true });
|
|
471
|
+
|
|
472
|
+
for (const scriptName of LEGACY_HOOK_SCRIPT_NAMES) {
|
|
473
|
+
const sourcePath = path.join(sourceRoot, scriptName);
|
|
474
|
+
const targetPath = path.join(targetRoot, scriptName);
|
|
475
|
+
copyRecursive(sourcePath, targetPath);
|
|
476
|
+
ensureExecutable(targetPath);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
mergeManagedHooksConfig(packageRoot, codexHome);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function installCodexSurface(packageRoot, codexHome) {
|
|
483
|
+
removeLegacyCodexSurface(codexHome);
|
|
484
|
+
installManagedSkills(packageRoot, codexHome);
|
|
485
|
+
installManagedHooks(packageRoot, codexHome);
|
|
486
|
+
}
|
|
487
|
+
|
|
404
488
|
function warnWindowsHooks() {
|
|
405
489
|
if (process.platform !== 'win32') {
|
|
406
490
|
return;
|
|
@@ -416,6 +500,7 @@ module.exports = {
|
|
|
416
500
|
getCodexHome,
|
|
417
501
|
getHomeMarketplacePath,
|
|
418
502
|
getHomePluginRoot,
|
|
503
|
+
installCodexSurface,
|
|
419
504
|
mergeCodexConfigFile,
|
|
420
505
|
removeLegacyCodexSurface,
|
|
421
506
|
removeMarketplaceEntry,
|
package/bin/install.js
CHANGED
|
@@ -9,8 +9,8 @@ const {
|
|
|
9
9
|
getCodexHome,
|
|
10
10
|
getHomeMarketplacePath,
|
|
11
11
|
getHomePluginRoot,
|
|
12
|
+
installCodexSurface,
|
|
12
13
|
mergeCodexConfigFile,
|
|
13
|
-
removeLegacyCodexSurface,
|
|
14
14
|
warnWindowsHooks,
|
|
15
15
|
} = require('./install-shared');
|
|
16
16
|
|
|
@@ -25,9 +25,9 @@ function main() {
|
|
|
25
25
|
|
|
26
26
|
try {
|
|
27
27
|
copyPluginBundle(PACKAGE_ROOT, pluginRoot);
|
|
28
|
-
ensureMarketplaceEntry(marketplacePath,
|
|
28
|
+
ensureMarketplaceEntry(marketplacePath, pluginRoot);
|
|
29
29
|
mergeCodexConfigFile(path.join(codexHome, 'config.toml'));
|
|
30
|
-
|
|
30
|
+
installCodexSurface(PACKAGE_ROOT, codexHome);
|
|
31
31
|
|
|
32
32
|
const active = ensureGlobalProcessLibrary(PACKAGE_ROOT);
|
|
33
33
|
console.log(`[babysitter-codex] marketplace: ${marketplacePath}`);
|
|
@@ -11,16 +11,23 @@ export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
|
|
|
11
11
|
export BABYSITTER_STATE_DIR="${STATE_DIR}"
|
|
12
12
|
|
|
13
13
|
mkdir -p "$LOG_DIR" 2>/dev/null
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
|
|
15
|
+
blog() {
|
|
16
|
+
local msg="$1"
|
|
17
|
+
local ts
|
|
18
|
+
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
19
|
+
echo "[INFO] $ts $msg" >> "$LOG_FILE" 2>/dev/null
|
|
20
|
+
babysitter log --type hook --label "hook:session-start" --message "$msg" --source shell-hook 2>/dev/null || true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
blog "Hook script invoked"
|
|
24
|
+
blog "PLUGIN_ROOT=$PLUGIN_ROOT"
|
|
25
|
+
blog "STATE_DIR=$STATE_DIR"
|
|
19
26
|
|
|
20
27
|
INPUT_FILE=$(mktemp 2>/dev/null || echo "/tmp/codex-session-start-hook-$$.json")
|
|
21
28
|
cat > "$INPUT_FILE"
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
blog "Hook input received ($(wc -c < "$INPUT_FILE") bytes)"
|
|
24
31
|
|
|
25
32
|
RESULT=$(babysitter hook:run \
|
|
26
33
|
--hook-type session-start \
|
|
@@ -30,7 +37,7 @@ RESULT=$(babysitter hook:run \
|
|
|
30
37
|
< "$INPUT_FILE" 2>"$LOG_DIR/babysitter-session-start-hook-stderr.log")
|
|
31
38
|
EXIT_CODE=$?
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
blog "CLI exit code=$EXIT_CODE"
|
|
34
41
|
|
|
35
42
|
rm -f "$INPUT_FILE" 2>/dev/null
|
|
36
43
|
printf '%s\n' "$RESULT"
|
|
@@ -11,16 +11,23 @@ export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
|
|
|
11
11
|
export BABYSITTER_STATE_DIR="${STATE_DIR}"
|
|
12
12
|
|
|
13
13
|
mkdir -p "$LOG_DIR" 2>/dev/null
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
|
|
15
|
+
blog() {
|
|
16
|
+
local msg="$1"
|
|
17
|
+
local ts
|
|
18
|
+
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
19
|
+
echo "[INFO] $ts $msg" >> "$LOG_FILE" 2>/dev/null
|
|
20
|
+
babysitter log --type hook --label "hook:stop" --message "$msg" --source shell-hook 2>/dev/null || true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
blog "Hook script invoked"
|
|
24
|
+
blog "PLUGIN_ROOT=$PLUGIN_ROOT"
|
|
25
|
+
blog "STATE_DIR=$STATE_DIR"
|
|
19
26
|
|
|
20
27
|
INPUT_FILE=$(mktemp 2>/dev/null || echo "/tmp/codex-stop-hook-$$.json")
|
|
21
28
|
cat > "$INPUT_FILE"
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
blog "Hook input received ($(wc -c < "$INPUT_FILE") bytes)"
|
|
24
31
|
|
|
25
32
|
RESULT=$(babysitter hook:run \
|
|
26
33
|
--hook-type stop \
|
|
@@ -30,7 +37,7 @@ RESULT=$(babysitter hook:run \
|
|
|
30
37
|
< "$INPUT_FILE" 2>"$LOG_DIR/babysitter-stop-hook-stderr.log")
|
|
31
38
|
EXIT_CODE=$?
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
blog "CLI exit code=$EXIT_CODE"
|
|
34
41
|
|
|
35
42
|
rm -f "$INPUT_FILE" 2>/dev/null
|
|
36
43
|
printf '%s\n' "$RESULT"
|
|
@@ -5,22 +5,16 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
5
5
|
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
6
6
|
STATE_DIR="${BABYSITTER_STATE_DIR:-${PWD}/.a5c}"
|
|
7
7
|
LOG_DIR="${BABYSITTER_LOG_DIR:-$PLUGIN_ROOT/.a5c/logs}"
|
|
8
|
-
LOG_FILE="$LOG_DIR/babysitter-user-prompt-submit-hook.log"
|
|
9
8
|
|
|
10
9
|
export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
|
|
11
10
|
export BABYSITTER_STATE_DIR="${STATE_DIR}"
|
|
12
11
|
|
|
13
12
|
mkdir -p "$LOG_DIR" 2>/dev/null
|
|
14
|
-
{
|
|
15
|
-
echo "[INFO] $(date -u +%Y-%m-%dT%H:%M:%SZ) Hook script invoked"
|
|
16
|
-
echo "[INFO] $(date -u +%Y-%m-%dT%H:%M:%SZ) PLUGIN_ROOT=$PLUGIN_ROOT"
|
|
17
|
-
echo "[INFO] $(date -u +%Y-%m-%dT%H:%M:%SZ) STATE_DIR=$STATE_DIR"
|
|
18
|
-
} >> "$LOG_FILE" 2>/dev/null
|
|
19
13
|
|
|
20
14
|
INPUT_FILE=$(mktemp 2>/dev/null || echo "/tmp/codex-user-prompt-submit-hook-$$.json")
|
|
21
15
|
cat > "$INPUT_FILE"
|
|
22
16
|
|
|
23
|
-
|
|
17
|
+
babysitter log --type hook --label "hook:user-prompt-submit" --message "Hook invoked" --source shell-hook 2>/dev/null || true
|
|
24
18
|
|
|
25
19
|
RESULT=$(babysitter hook:run \
|
|
26
20
|
--hook-type user-prompt-submit \
|
|
@@ -30,7 +24,7 @@ RESULT=$(babysitter hook:run \
|
|
|
30
24
|
< "$INPUT_FILE" 2>"$LOG_DIR/babysitter-user-prompt-submit-hook-stderr.log")
|
|
31
25
|
EXIT_CODE=$?
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
babysitter log --type hook --label "hook:user-prompt-submit" --message "CLI exit code=$EXIT_CODE" --source shell-hook 2>/dev/null || true
|
|
34
28
|
|
|
35
29
|
rm -f "$INPUT_FILE" 2>/dev/null
|
|
36
30
|
if [ -n "$RESULT" ]; then
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a5c-ai/babysitter-codex",
|
|
3
|
-
"version": "0.1.6-staging.
|
|
3
|
+
"version": "0.1.6-staging.3faa6c86",
|
|
4
4
|
"description": "Babysitter Codex skill bundle and integration package for OpenAI Codex CLI with SDK-managed process-library bootstrapping, 15 orchestration modes, and BOM-safe SKILL installation",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node test/integration.test.js && node test/packaged-install.test.js",
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
17
|
".codex-plugin/",
|
|
18
|
+
".app.json",
|
|
19
|
+
"assets/",
|
|
18
20
|
"hooks/",
|
|
19
21
|
"hooks.json",
|
|
20
22
|
"skills/",
|
|
@@ -41,6 +43,6 @@
|
|
|
41
43
|
},
|
|
42
44
|
"homepage": "https://github.com/a5c-ai/babysitter/tree/main/plugins/babysitter-codex#readme",
|
|
43
45
|
"dependencies": {
|
|
44
|
-
"@a5c-ai/babysitter-sdk": "0.0.183-staging.
|
|
46
|
+
"@a5c-ai/babysitter-sdk": "0.0.183-staging.3faa6c86"
|
|
45
47
|
}
|
|
46
48
|
}
|
package/scripts/team-install.js
CHANGED
|
@@ -7,6 +7,7 @@ const {
|
|
|
7
7
|
copyPluginBundle,
|
|
8
8
|
ensureGlobalProcessLibrary,
|
|
9
9
|
ensureMarketplaceEntry,
|
|
10
|
+
installCodexSurface,
|
|
10
11
|
mergeCodexConfigFile,
|
|
11
12
|
warnWindowsHooks,
|
|
12
13
|
writeJson,
|
|
@@ -54,8 +55,9 @@ function main() {
|
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
copyPluginBundle(packageRoot, workspacePluginRoot);
|
|
57
|
-
ensureMarketplaceEntry(workspaceMarketplacePath,
|
|
58
|
+
ensureMarketplaceEntry(workspaceMarketplacePath, workspacePluginRoot);
|
|
58
59
|
mergeCodexConfigFile(workspaceConfigPath);
|
|
60
|
+
installCodexSurface(packageRoot, path.join(workspaceRoot, '.codex'));
|
|
59
61
|
|
|
60
62
|
const active = ensureGlobalProcessLibrary(packageRoot);
|
|
61
63
|
installInfo.processLibraryStateFile = active.stateFile;
|
package/skills/babysit/SKILL.md
CHANGED
|
@@ -1,414 +1,47 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: babysit
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
diagnose run health, install Codex integration, or assimilate a methodology.
|
|
4
|
+
Orchestrate via @babysitter. Use this skill when asked to babysit a run,
|
|
5
|
+
orchestrate a process or whenever it is called explicitly. (babysit,
|
|
6
|
+
babysitter, orchestrate, orchestrate a run, workflow, etc.)
|
|
8
7
|
---
|
|
9
8
|
|
|
10
9
|
# babysit
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- the installed plugin under `~/.codex/plugins/babysitter-codex` or `<workspace>/plugins/babysitter-codex`
|
|
15
|
-
- the plugin skill tree under `skills/babysit` and `skills/<mode>`
|
|
16
|
-
- the plugin hook registry at `hooks.json`
|
|
17
|
-
- the plugin hook scripts under `hooks/`
|
|
18
|
-
- global `~/.codex/config.toml`
|
|
19
|
-
- optional workspace `.codex/config.toml`
|
|
20
|
-
- workspace `.a5c/`
|
|
21
|
-
- shared global `.a5c/` process-library state
|
|
22
|
-
- the Babysitter SDK CLI for `run:create`, `run:iterate`, `run:status`,
|
|
23
|
-
`task:list`, `task:post`, and process-library binding
|
|
24
|
-
|
|
25
|
-
This package supports only the hooks model for the Codex plugin path. Do not
|
|
26
|
-
introduce an app-server loop, an external orchestrator, or fake plugin-manifest
|
|
27
|
-
machinery for the Codex integration.
|
|
28
|
-
|
|
29
|
-
Native Windows caveat: Codex does not execute hooks on Windows yet. When the
|
|
30
|
-
current Codex session is running on native Windows, do not yield the turn and
|
|
31
|
-
wait for the `Stop` hook. Keep driving the Babysitter loop in the current turn
|
|
32
|
-
until the run completes or you hit a real user breakpoint that requires chat
|
|
33
|
-
input. Only rely on the `SessionStart`/`Stop` hook handoff on platforms where
|
|
34
|
-
Codex hook execution is actually available.
|
|
35
|
-
|
|
36
|
-
## Choosing a Mode
|
|
37
|
-
|
|
38
|
-
Use this skill whenever it is invoked directly, and whenever one of the
|
|
39
|
-
installed mode-wrapper skills such as `$call`, `$plan`, `$resume`, or `$yolo`
|
|
40
|
-
loads it.
|
|
41
|
-
|
|
42
|
-
Choose the mode from either:
|
|
43
|
-
|
|
44
|
-
1. the direct user intent when the skill is invoked as `$babysit`
|
|
45
|
-
2. the installed wrapper skill name when the user invoked `$call`, `$plan`,
|
|
46
|
-
`$resume`, `$yolo`, and the rest
|
|
47
|
-
|
|
48
|
-
| User intent | Mode |
|
|
49
|
-
|-------------|------|
|
|
50
|
-
| Start an orchestration run | `call` |
|
|
51
|
-
| Work an issue-centric flow | `issue` |
|
|
52
|
-
| Run autonomously | `yolo` |
|
|
53
|
-
| Run continuously / recurring workflow | `forever` |
|
|
54
|
-
| Resume an existing run | `resume` |
|
|
55
|
-
| Plan without executing | `plan` |
|
|
56
|
-
| Observe or inspect a run | `observe` |
|
|
57
|
-
| Summarize a completed run | `retrospect` |
|
|
58
|
-
| Diagnose run health | `doctor` |
|
|
59
|
-
| Change or inspect model routing | `model` |
|
|
60
|
-
| Help and documentation | `help` |
|
|
61
|
-
| Install into a project | `project-install` |
|
|
62
|
-
| Install user profile/setup | `user-install` |
|
|
63
|
-
| Install team-pinned setup | `team-install` |
|
|
64
|
-
| Assimilate external methodology | `assimilate` |
|
|
65
|
-
|
|
66
|
-
Deprecated prompt aliases are not the Codex command surface anymore. Do not
|
|
67
|
-
depend on `.codex/prompts` for normal operation.
|
|
11
|
+
Orchestrate `.a5c/runs/<runId>/` through iterative execution.
|
|
68
12
|
|
|
69
13
|
## Dependencies
|
|
70
14
|
|
|
71
15
|
### Babysitter SDK and CLI
|
|
72
16
|
|
|
73
|
-
|
|
17
|
+
Read the SDK version from `versions.json` to ensure version compatibility:
|
|
74
18
|
|
|
75
19
|
```bash
|
|
76
|
-
|
|
20
|
+
SDK_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('${CODEX_PLUGIN_ROOT}/versions.json','utf8')).sdkVersion||'latest')}catch{console.log('latest')}")
|
|
21
|
+
sudo npm i -g @a5c-ai/babysitter-sdk@$SDK_VERSION
|
|
22
|
+
# sudo is depending on the env and system
|
|
77
23
|
```
|
|
78
24
|
|
|
79
|
-
|
|
25
|
+
then use the CLI alias: CLI="babysitter"
|
|
80
26
|
|
|
81
|
-
|
|
82
|
-
CLI="npx -y @a5c-ai/babysitter-sdk"
|
|
83
|
-
```
|
|
27
|
+
**Alternatively, use the CLI alias:** `CLI="npx -y @a5c-ai/babysitter-sdk@$SDK_VERSION"`
|
|
84
28
|
|
|
85
29
|
### jq
|
|
86
30
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
## Core Iteration Workflow
|
|
90
|
-
|
|
91
|
-
The Babysitter workflow has 8 steps:
|
|
92
|
-
|
|
93
|
-
1. **Create or find the process** - interview the user or parse the prompt,
|
|
94
|
-
research the repo and process library, and build a process definition
|
|
95
|
-
2. **Create run and bind session** - create the run via the Babysitter CLI and
|
|
96
|
-
bind it to the current Codex session honestly
|
|
97
|
-
3. **Run iteration** - execute one orchestration step
|
|
98
|
-
4. **Get effects** - inspect pending effects
|
|
99
|
-
5. **Perform effects** - execute the requested tasks through skills, agents, or
|
|
100
|
-
shell work
|
|
101
|
-
6. **Post results** - commit results back through `task:post`
|
|
102
|
-
7. **Stop and yield** - on platforms with working Codex hooks, the Codex stop
|
|
103
|
-
hook decides whether to continue; on native Windows, stay in-turn and
|
|
104
|
-
continue the loop yourself instead of waiting for a hook that will not run
|
|
105
|
-
8. **Completion proof** - finish only when the emitted proof is returned
|
|
106
|
-
|
|
107
|
-
### 1. Create or find the process for the run
|
|
108
|
-
|
|
109
|
-
#### Interview phase
|
|
110
|
-
|
|
111
|
-
##### Interactive mode (default)
|
|
112
|
-
|
|
113
|
-
Interview the user for intent, requirements, goals, scope, and constraints
|
|
114
|
-
before entering the hook-driven loop.
|
|
115
|
-
|
|
116
|
-
This phase should be iterative and adaptive:
|
|
117
|
-
|
|
118
|
-
- inspect the current repo state first
|
|
119
|
-
- resolve the active process-library root with
|
|
120
|
-
`babysitter process-library:active --json`
|
|
121
|
-
- conduct an actual search against that active process library before writing a
|
|
122
|
-
process
|
|
123
|
-
- research the repo, online references, methodologies, specializations, skills,
|
|
124
|
-
agents, and related processes as needed
|
|
125
|
-
- ask the user follow-up questions when the intent or constraints are still not
|
|
126
|
-
clear
|
|
127
|
-
|
|
128
|
-
Do not plan more than one step ahead during the interview phase. After each
|
|
129
|
-
step, decide the next best step from the current evidence.
|
|
130
|
-
|
|
131
|
-
The `process-library:active` command bootstraps the shared global SDK process
|
|
132
|
-
library automatically if no binding exists yet. Read:
|
|
133
|
-
|
|
134
|
-
- `binding.dir` as the active process-library root that must be searched
|
|
135
|
-
- `defaultSpec.cloneDir` as the cloned repo root when adjacent repo-level
|
|
136
|
-
material is needed
|
|
137
|
-
|
|
138
|
-
After that, treat `specializations/**/**/**`, `methodologies/`, `contrib/`, and
|
|
139
|
-
`reference/` as paths relative to `binding.dir`.
|
|
140
|
-
|
|
141
|
-
##### Non-interactive mode
|
|
31
|
+
make sure you have jq installed and available in the path. if not, install it.
|
|
142
32
|
|
|
143
|
-
|
|
33
|
+
## Instructions
|
|
144
34
|
|
|
145
|
-
|
|
146
|
-
2. inspect the repo structure
|
|
147
|
-
3. resolve the active process-library root with
|
|
148
|
-
`babysitter process-library:active --json`
|
|
149
|
-
4. search that active library for the most relevant specialization,
|
|
150
|
-
methodology, process, skill, or agent
|
|
151
|
-
5. proceed directly to process creation
|
|
152
|
-
|
|
153
|
-
Do not skip the active-library search step.
|
|
154
|
-
|
|
155
|
-
#### User Profile Integration
|
|
156
|
-
|
|
157
|
-
Before building the process, check for an existing user profile:
|
|
158
|
-
|
|
159
|
-
1. run `babysitter profile:read --user --json`
|
|
160
|
-
2. use the profile to pre-fill user preferences, expertise, and communication
|
|
161
|
-
style
|
|
162
|
-
3. calibrate breakpoint density from `breakpointTolerance`
|
|
163
|
-
4. prefer tools, skills, and agents the user already uses
|
|
164
|
-
5. adapt explanations and breakpoint text to the user's communication style
|
|
165
|
-
6. if no profile exists, proceed normally and consider suggesting `$user-install`
|
|
166
|
-
|
|
167
|
-
All profile read/write/merge/render operations must go through the Babysitter
|
|
168
|
-
CLI, never direct SDK imports.
|
|
169
|
-
|
|
170
|
-
#### Process creation phase
|
|
171
|
-
|
|
172
|
-
After the interview phase, create the full custom process files for the run
|
|
173
|
-
according to the process-library patterns and the process-creation guidelines
|
|
174
|
-
below.
|
|
175
|
-
|
|
176
|
-
Install `@a5c-ai/babysitter-sdk` into `.a5c/` if it is missing. When doing so,
|
|
177
|
-
run the install from the project root and use either `npm i --prefix .a5c ...`
|
|
178
|
-
or a subshell so the working directory does not stay inside `.a5c/`.
|
|
179
|
-
|
|
180
|
-
Always use an **absolute path** for `--entry` when calling `run:create`.
|
|
181
|
-
|
|
182
|
-
After the process is created and before creating the run:
|
|
183
|
-
|
|
184
|
-
- in interactive mode, describe the process at a high level, generate
|
|
185
|
-
`[process-name].diagram.md` and `[process-name].process.md`, and get user
|
|
186
|
-
confirmation before proceeding
|
|
187
|
-
- in non-interactive mode, proceed directly to `run:create`
|
|
188
|
-
|
|
189
|
-
Common mistakes to avoid:
|
|
190
|
-
|
|
191
|
-
- wrong: skipping repo/process-library research before writing the process
|
|
192
|
-
- wrong: bypassing the orchestration model with helper scripts or inline logic
|
|
193
|
-
- wrong: using `kind: 'node'` in generated tasks
|
|
194
|
-
- correct: use `agent` or `skill` tasks for reasoning work, with `shell` only
|
|
195
|
-
for existing CLIs, tests, linters, git, or builds
|
|
196
|
-
- correct: include verification loops, refinement loops, quality gates, and
|
|
197
|
-
breakpoints where appropriate
|
|
198
|
-
|
|
199
|
-
### 2. Create run and bind session
|
|
200
|
-
|
|
201
|
-
For new runs:
|
|
35
|
+
Run the following command to get full orchestration instructions:
|
|
202
36
|
|
|
203
37
|
```bash
|
|
204
|
-
|
|
205
|
-
--process-id <id> \
|
|
206
|
-
--entry <absolute-path>#<export> \
|
|
207
|
-
--inputs <file> \
|
|
208
|
-
--prompt "$PROMPT" \
|
|
209
|
-
--harness codex \
|
|
210
|
-
--state-dir .a5c \
|
|
211
|
-
--plugin-root "${CODEX_PLUGIN_ROOT}" \
|
|
212
|
-
--json
|
|
38
|
+
babysitter instructions:babysit-skill --harness codex --interactive
|
|
213
39
|
```
|
|
214
40
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
- `--process-id <id>` - unique identifier for the process definition
|
|
218
|
-
- `--entry <absolute-path>#<export>` - process JS file plus named export
|
|
219
|
-
- `--prompt "$PROMPT"` - the user's initial request
|
|
220
|
-
- `--harness codex` - activates Codex session binding
|
|
221
|
-
- `--state-dir .a5c` - required for honest workspace-local Codex session state
|
|
222
|
-
- `--plugin-root "${CODEX_PLUGIN_ROOT}"` - plugin root used for session/state
|
|
223
|
-
resolution
|
|
224
|
-
|
|
225
|
-
Optional flags:
|
|
226
|
-
|
|
227
|
-
- `--inputs <file>` - process input JSON
|
|
228
|
-
- `--run-id <id>` - override the generated run id
|
|
229
|
-
- `--runs-dir <dir>` - override the default runs directory
|
|
230
|
-
|
|
231
|
-
Inside a real Codex hook/session environment, do **not** pass `--session-id`
|
|
232
|
-
explicitly. The Codex adapter auto-resolves the session/thread id from
|
|
233
|
-
`CODEX_THREAD_ID`, `CODEX_SESSION_ID`, or `CODEX_ENV_FILE`. Only pass
|
|
234
|
-
`--session-id` in out-of-band recovery flows where no ambient Codex session
|
|
235
|
-
identity exists.
|
|
236
|
-
|
|
237
|
-
In normal Codex usage, `run:create` must bind the session into the active
|
|
238
|
-
workspace `.a5c`, not the global `~/.a5c`, so the Stop hook can find the same
|
|
239
|
-
session state file in later turns.
|
|
240
|
-
|
|
241
|
-
On native Windows, still bind the session honestly with `run:create`, but do
|
|
242
|
-
not assume that later turns will be resumed by Codex hooks. After `run:create`
|
|
243
|
-
you must keep executing the orchestration loop yourself in the current turn
|
|
244
|
-
until completion or a real user-facing breakpoint.
|
|
245
|
-
|
|
246
|
-
For resuming existing runs in a manual recovery flow:
|
|
41
|
+
For non-interactive runs (e.g., with `-p` flag or no question tool):
|
|
247
42
|
|
|
248
43
|
```bash
|
|
249
|
-
|
|
250
|
-
--session-id <id> \
|
|
251
|
-
--state-dir .a5c \
|
|
252
|
-
--run-id <runId> \
|
|
253
|
-
--runs-dir .a5c/runs \
|
|
254
|
-
--json
|
|
44
|
+
babysitter instructions:babysit-skill --harness codex --no-interactive
|
|
255
45
|
```
|
|
256
46
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
$CLI run:iterate .a5c/runs/<runId> --json --iteration <n> --plugin-root "${CODEX_PLUGIN_ROOT}"
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
Status values:
|
|
264
|
-
|
|
265
|
-
- `"executed"` - tasks executed, continue looping
|
|
266
|
-
- `"waiting"` - breakpoint or sleep is pending
|
|
267
|
-
- `"completed"` - run finished successfully
|
|
268
|
-
- `"failed"` - run failed
|
|
269
|
-
- `"none"` - no runnable effects exist
|
|
270
|
-
|
|
271
|
-
### 4. Get effects
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
$CLI task:list .a5c/runs/<runId> --pending --json
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
### 5. Perform effects
|
|
278
|
-
|
|
279
|
-
Run the effect externally to the SDK, then post the outcome summary with
|
|
280
|
-
`task:post`.
|
|
281
|
-
|
|
282
|
-
Important:
|
|
283
|
-
|
|
284
|
-
- delegate using Codex skills or agent tooling when possible
|
|
285
|
-
- make sure the requested change actually happened
|
|
286
|
-
- do not describe or imply success without verifying the requested effect
|
|
287
|
-
- do not use the `babysit` skill itself inside delegated task execution
|
|
288
|
-
|
|
289
|
-
#### 5.1 Breakpoint handling
|
|
290
|
-
|
|
291
|
-
##### Interactive mode
|
|
292
|
-
|
|
293
|
-
Ask the user explicitly for approval. If the Codex environment provides a
|
|
294
|
-
structured question UI, include explicit approve/reject options. If not, ask in
|
|
295
|
-
chat and require an explicit approval response.
|
|
296
|
-
|
|
297
|
-
Never infer approval from silence, ambiguity, or dismissal.
|
|
298
|
-
|
|
299
|
-
Breakpoint rejections must still be posted with `--status ok` and a value such
|
|
300
|
-
as `{"approved": false, "response": "..."}`.
|
|
301
|
-
|
|
302
|
-
##### Non-interactive mode
|
|
303
|
-
|
|
304
|
-
Choose the best option from context and post the result. Rejections still use
|
|
305
|
-
`--status ok` with `{"approved": false}`.
|
|
306
|
-
|
|
307
|
-
### 6. Results posting
|
|
308
|
-
|
|
309
|
-
Never write `result.json` directly.
|
|
310
|
-
|
|
311
|
-
Workflow:
|
|
312
|
-
|
|
313
|
-
1. write the result value to `tasks/<effectId>/output.json`
|
|
314
|
-
2. call `task:post` with `--value tasks/<effectId>/output.json`
|
|
315
|
-
3. let the SDK write `result.json`, append the journal event, and update state
|
|
316
|
-
|
|
317
|
-
### 7. Stop after every phase after run-session association
|
|
318
|
-
|
|
319
|
-
After `run:create` or any posted effect result, end the current assistant turn
|
|
320
|
-
and yield back to the Codex hook loop. Do not run multiple `run:iterate` steps
|
|
321
|
-
in the same turn.
|
|
322
|
-
|
|
323
|
-
Native Windows exception: because Codex does not execute hooks on Windows yet,
|
|
324
|
-
do not end the turn and wait for the hook loop there. Continue with the next
|
|
325
|
-
`run:iterate`, inspect tasks, perform effects, and post results in the same
|
|
326
|
-
turn until the run completes or you need explicit user input for a breakpoint.
|
|
327
|
-
Do not tell the user you are waiting for the stop hook on Windows.
|
|
328
|
-
|
|
329
|
-
### 8. Completion proof
|
|
330
|
-
|
|
331
|
-
When `run:iterate` or `run:status` returns `completionProof`, return that exact
|
|
332
|
-
value wrapped in `<promise>...</promise>`.
|
|
333
|
-
|
|
334
|
-
## Hook Loop
|
|
335
|
-
|
|
336
|
-
Global install must register the plugin in `~/.agents/plugins/marketplace.json`
|
|
337
|
-
with the plugin bundle at `~/.codex/plugins/babysitter-codex`, and must merge
|
|
338
|
-
`~/.codex/config.toml`.
|
|
339
|
-
|
|
340
|
-
Workspace onboarding may also register the plugin in
|
|
341
|
-
`<workspace>/.agents/plugins/marketplace.json` with the plugin bundle at
|
|
342
|
-
`<workspace>/plugins/babysitter-codex`, and may merge `.codex/config.toml` for
|
|
343
|
-
repo-local pinning.
|
|
344
|
-
|
|
345
|
-
Both levels must provide:
|
|
346
|
-
|
|
347
|
-
1. `SessionStart` seeds `.a5c` session state
|
|
348
|
-
2. `UserPromptSubmit` performs prompt-time transformations when needed
|
|
349
|
-
3. `Stop` decides whether the run is complete or Codex should receive the next
|
|
350
|
-
Babysitter iteration context
|
|
351
|
-
|
|
352
|
-
On native Windows, treat these hook registrations as installation/configuration
|
|
353
|
-
state only. Codex currently does not execute them there, so the skill must keep
|
|
354
|
-
the orchestration loop moving in-turn instead of waiting for hook callbacks.
|
|
355
|
-
|
|
356
|
-
## Task Kinds
|
|
357
|
-
|
|
358
|
-
Never generate `kind: 'node'` effects.
|
|
359
|
-
|
|
360
|
-
| Kind | When to use |
|
|
361
|
-
|------|-------------|
|
|
362
|
-
| `agent` | default for planning, implementation, analysis, debugging, scoring, research |
|
|
363
|
-
| `skill` | when a matching installed skill exists |
|
|
364
|
-
| `shell` | existing CLI tools, tests, git, linters, builds |
|
|
365
|
-
| `breakpoint` | human approval gates |
|
|
366
|
-
| `sleep` | time gates |
|
|
367
|
-
|
|
368
|
-
## Process Creation Guidelines
|
|
369
|
-
|
|
370
|
-
- always research the repo and the active process library before writing the
|
|
371
|
-
process
|
|
372
|
-
- prefer composing multiple relevant library processes rather than copying just
|
|
373
|
-
one template blindly
|
|
374
|
-
- include verification and refinement loops
|
|
375
|
-
- prefer processes that close the widest practical quality loop
|
|
376
|
-
- add `@skill` and `@agent` discovery markers to generated process files for
|
|
377
|
-
the dependencies you actually selected
|
|
378
|
-
- prefer incremental work that can be tested as you go
|
|
379
|
-
|
|
380
|
-
Search for relevant processes, skills, agents, methodologies, and references
|
|
381
|
-
in:
|
|
382
|
-
|
|
383
|
-
1. `.a5c/processes/`
|
|
384
|
-
2. the active process-library root from `binding.dir`
|
|
385
|
-
3. the cloned repo root from `defaultSpec.cloneDir` when adjacent material is
|
|
386
|
-
needed
|
|
387
|
-
|
|
388
|
-
## Codex-Specific Rules
|
|
389
|
-
|
|
390
|
-
- `$babysit` is the core skill
|
|
391
|
-
- `$call`, `$plan`, `$resume`, `$yolo`, and the other mode skills are thin
|
|
392
|
-
wrappers that must only load `babysit` for the matching mode
|
|
393
|
-
- do not revive prompt aliases as a parallel integration surface
|
|
394
|
-
- do not fabricate a session id
|
|
395
|
-
- use `notify` only for telemetry or monitoring, never as the orchestration
|
|
396
|
-
control loop
|
|
397
|
-
- on native Windows, never claim that you are yielding to or waiting for the
|
|
398
|
-
Codex stop hook; continue the Babysitter loop in the current turn instead
|
|
399
|
-
|
|
400
|
-
## Critical Rules
|
|
401
|
-
|
|
402
|
-
CRITICAL RULE: The completion proof is emitted only when the run is truly
|
|
403
|
-
completed. Output `<promise>SECRET</promise>` only when the orchestration status
|
|
404
|
-
is completed.
|
|
405
|
-
|
|
406
|
-
CRITICAL RULE: Never bypass the Babysitter orchestration model when this skill
|
|
407
|
-
is active. Do not replace it with ad-hoc direct execution.
|
|
408
|
-
|
|
409
|
-
CRITICAL RULE: Never build helper scripts or wrapper programs to drive the run.
|
|
410
|
-
Use the CLI and the hook loop directly.
|
|
411
|
-
|
|
412
|
-
CRITICAL RULE: In interactive mode, never auto-approve breakpoints.
|
|
413
|
-
|
|
414
|
-
CRITICAL RULE: Do not use `kind: 'node'` in generated process files.
|
|
47
|
+
Follow the instructions returned by the command above to orchestrate the run.
|
package/skills/call/SKILL.md
CHANGED
|
@@ -12,5 +12,6 @@ Resolve the request in `call` mode:
|
|
|
12
12
|
- treat everything after `$call` as the initial Babysitter request for a new
|
|
13
13
|
orchestration run
|
|
14
14
|
- create the process, create the run, and enter the Babysitter loop
|
|
15
|
+
- using this always means the user meant an interactive run.
|
|
15
16
|
- do not create a separate command surface here; this skill only forwards into
|
|
16
17
|
`babysit`
|
package/skills/yolo/SKILL.md
CHANGED
|
@@ -12,5 +12,8 @@ Resolve the request in `yolo` mode:
|
|
|
12
12
|
- treat everything after `$yolo` as the autonomous execution request
|
|
13
13
|
- follow the `babysit` skill contract while optimizing for minimal manual
|
|
14
14
|
interruption
|
|
15
|
+
- using this means the user wants to run autonomously with minimal manual
|
|
16
|
+
interruption, so optimize for that by skipping or minimizing any steps that
|
|
17
|
+
would require user input or decision-making during the run
|
|
15
18
|
- do not create a separate command surface here; this skill only forwards into
|
|
16
19
|
`babysit`
|