@a5c-ai/babysitter-cursor 0.1.1-staging.400de59e
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/.cursor-plugin/plugin.json +22 -0
- package/.cursorrules +55 -0
- package/README.md +488 -0
- package/bin/cli.js +104 -0
- package/bin/install-shared.js +394 -0
- package/bin/install.js +46 -0
- package/bin/uninstall.js +40 -0
- package/commands/assimilate.md +37 -0
- package/commands/call.md +7 -0
- package/commands/cleanup.md +20 -0
- package/commands/contrib.md +33 -0
- package/commands/doctor.md +423 -0
- package/commands/forever.md +7 -0
- package/commands/help.md +244 -0
- package/commands/observe.md +12 -0
- package/commands/plan.md +7 -0
- package/commands/plugins.md +255 -0
- package/commands/project-install.md +17 -0
- package/commands/resume.md +8 -0
- package/commands/retrospect.md +55 -0
- package/commands/user-install.md +17 -0
- package/commands/yolo.md +7 -0
- package/hooks/hooks-cursor.json +21 -0
- package/hooks/session-start.ps1 +115 -0
- package/hooks/session-start.sh +105 -0
- package/hooks/stop-hook.ps1 +72 -0
- package/hooks/stop-hook.sh +64 -0
- package/hooks.json +21 -0
- package/package.json +48 -0
- package/plugin.json +24 -0
- package/scripts/team-install.js +81 -0
- package/skills/assimilate/SKILL.md +17 -0
- package/skills/babysit/SKILL.md +81 -0
- package/skills/call/SKILL.md +17 -0
- package/skills/doctor/SKILL.md +16 -0
- package/skills/help/SKILL.md +15 -0
- package/skills/observe/SKILL.md +15 -0
- package/skills/plan/SKILL.md +16 -0
- package/skills/resume/SKILL.md +15 -0
- package/skills/retrospect/SKILL.md +55 -0
- package/skills/user-install/SKILL.md +15 -0
- package/versions.json +3 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Babysitter Stop Hook for Cursor IDE/CLI (PowerShell)
|
|
2
|
+
# Drives the orchestration loop by checking run state on session stop.
|
|
3
|
+
#
|
|
4
|
+
# Protocol:
|
|
5
|
+
# Input: JSON via stdin (session context)
|
|
6
|
+
# Output: JSON via stdout (with optional continue/stop signal)
|
|
7
|
+
# Stderr: debug/log output only
|
|
8
|
+
# Exit 0: success
|
|
9
|
+
|
|
10
|
+
$ErrorActionPreference = "Stop"
|
|
11
|
+
|
|
12
|
+
$PluginRoot = if ($env:CURSOR_PLUGIN_ROOT) { $env:CURSOR_PLUGIN_ROOT } else { Split-Path -Parent $PSScriptRoot }
|
|
13
|
+
$StateDir = if ($env:BABYSITTER_STATE_DIR) { $env:BABYSITTER_STATE_DIR } else { Join-Path $PWD ".a5c" }
|
|
14
|
+
|
|
15
|
+
$env:CURSOR_PLUGIN_ROOT = $PluginRoot
|
|
16
|
+
$env:BABYSITTER_STATE_DIR = $StateDir
|
|
17
|
+
|
|
18
|
+
$LogDir = if ($env:BABYSITTER_LOG_DIR) { $env:BABYSITTER_LOG_DIR } else { Join-Path $PluginRoot ".a5c\logs" }
|
|
19
|
+
$LogFile = Join-Path $LogDir "babysitter-stop-hook.log"
|
|
20
|
+
New-Item -ItemType Directory -Path $LogDir -Force -ErrorAction SilentlyContinue | Out-Null
|
|
21
|
+
|
|
22
|
+
function Write-Blog {
|
|
23
|
+
param([string]$Message)
|
|
24
|
+
$ts = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
|
|
25
|
+
Add-Content -Path $LogFile -Value "[INFO] $ts $Message" -ErrorAction SilentlyContinue
|
|
26
|
+
if (Get-Command babysitter -ErrorAction SilentlyContinue) {
|
|
27
|
+
& babysitter log --type hook --label "hook:stop" --message $Message --source shell-hook 2>$null
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Write-Blog "Hook script invoked"
|
|
32
|
+
Write-Blog "PLUGIN_ROOT=$PluginRoot"
|
|
33
|
+
Write-Blog "STATE_DIR=$StateDir"
|
|
34
|
+
|
|
35
|
+
# Resolve babysitter CLI
|
|
36
|
+
$useFallback = $false
|
|
37
|
+
if (-not (Get-Command babysitter -ErrorAction SilentlyContinue)) {
|
|
38
|
+
$localBin = Join-Path $env:USERPROFILE ".local\bin\babysitter.cmd"
|
|
39
|
+
if (Test-Path $localBin) {
|
|
40
|
+
$env:PATH = "$(Split-Path $localBin);$env:PATH"
|
|
41
|
+
} else {
|
|
42
|
+
$versionsFile = Join-Path $PluginRoot "versions.json"
|
|
43
|
+
try {
|
|
44
|
+
$script:SdkVersion = (Get-Content $versionsFile -Raw | ConvertFrom-Json).sdkVersion
|
|
45
|
+
if (-not $script:SdkVersion) { $script:SdkVersion = "latest" }
|
|
46
|
+
} catch {
|
|
47
|
+
$script:SdkVersion = "latest"
|
|
48
|
+
}
|
|
49
|
+
$useFallback = $true
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Capture stdin
|
|
54
|
+
$InputFile = [System.IO.Path]::GetTempFileName()
|
|
55
|
+
$input | Out-File -FilePath $InputFile -Encoding utf8
|
|
56
|
+
|
|
57
|
+
Write-Blog "Hook input received"
|
|
58
|
+
|
|
59
|
+
$stderrLog = Join-Path $LogDir "babysitter-stop-hook-stderr.log"
|
|
60
|
+
|
|
61
|
+
if ($useFallback) {
|
|
62
|
+
$Result = Get-Content $InputFile | & npx -y "@a5c-ai/babysitter-sdk@$script:SdkVersion" hook:run --hook-type stop --harness cursor --plugin-root $PluginRoot --state-dir $StateDir --json 2>$stderrLog
|
|
63
|
+
} else {
|
|
64
|
+
$Result = Get-Content $InputFile | & babysitter hook:run --hook-type stop --harness cursor --plugin-root $PluginRoot --state-dir $StateDir --json 2>$stderrLog
|
|
65
|
+
}
|
|
66
|
+
$ExitCode = $LASTEXITCODE
|
|
67
|
+
|
|
68
|
+
Write-Blog "CLI exit code=$ExitCode"
|
|
69
|
+
|
|
70
|
+
Remove-Item $InputFile -Force -ErrorAction SilentlyContinue
|
|
71
|
+
Write-Output $Result
|
|
72
|
+
exit $ExitCode
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Babysitter Stop Hook for Cursor IDE/CLI
|
|
3
|
+
# Drives the orchestration loop by checking run state on session stop.
|
|
4
|
+
#
|
|
5
|
+
# Protocol:
|
|
6
|
+
# Input: JSON via stdin (session context)
|
|
7
|
+
# Output: JSON via stdout (with optional continue/stop signal)
|
|
8
|
+
# Stderr: debug/log output only
|
|
9
|
+
# Exit 0: success
|
|
10
|
+
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
15
|
+
STATE_DIR="${BABYSITTER_STATE_DIR:-${PWD}/.a5c}"
|
|
16
|
+
LOG_DIR="${BABYSITTER_LOG_DIR:-$PLUGIN_ROOT/.a5c/logs}"
|
|
17
|
+
LOG_FILE="$LOG_DIR/babysitter-stop-hook.log"
|
|
18
|
+
|
|
19
|
+
export CURSOR_PLUGIN_ROOT="${CURSOR_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
|
|
20
|
+
export BABYSITTER_STATE_DIR="${STATE_DIR}"
|
|
21
|
+
|
|
22
|
+
mkdir -p "$LOG_DIR" 2>/dev/null
|
|
23
|
+
|
|
24
|
+
blog() {
|
|
25
|
+
local msg="$1"
|
|
26
|
+
local ts
|
|
27
|
+
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
28
|
+
echo "[INFO] $ts $msg" >> "$LOG_FILE" 2>/dev/null
|
|
29
|
+
babysitter log --type hook --label "hook:stop" --message "$msg" --source shell-hook 2>/dev/null || true
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
blog "Hook script invoked"
|
|
33
|
+
blog "PLUGIN_ROOT=$PLUGIN_ROOT"
|
|
34
|
+
blog "STATE_DIR=$STATE_DIR"
|
|
35
|
+
|
|
36
|
+
# Resolve babysitter CLI if not on PATH
|
|
37
|
+
if ! command -v babysitter &>/dev/null; then
|
|
38
|
+
if [ -x "$HOME/.local/bin/babysitter" ]; then
|
|
39
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
40
|
+
else
|
|
41
|
+
SDK_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('${PLUGIN_ROOT}/versions.json','utf8')).sdkVersion||'latest')}catch{console.log('latest')}" 2>/dev/null || echo "latest")
|
|
42
|
+
babysitter() { npx -y "@a5c-ai/babysitter-sdk@${SDK_VERSION}" "$@"; }
|
|
43
|
+
export -f babysitter
|
|
44
|
+
fi
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
INPUT_FILE=$(mktemp 2>/dev/null || echo "/tmp/cursor-stop-hook-$$.json")
|
|
48
|
+
cat > "$INPUT_FILE"
|
|
49
|
+
|
|
50
|
+
blog "Hook input received ($(wc -c < "$INPUT_FILE") bytes)"
|
|
51
|
+
|
|
52
|
+
RESULT=$(babysitter hook:run \
|
|
53
|
+
--hook-type stop \
|
|
54
|
+
--harness cursor \
|
|
55
|
+
--plugin-root "$PLUGIN_ROOT" \
|
|
56
|
+
--state-dir "${BABYSITTER_STATE_DIR}" \
|
|
57
|
+
--json < "$INPUT_FILE" 2>"$LOG_DIR/babysitter-stop-hook-stderr.log")
|
|
58
|
+
EXIT_CODE=$?
|
|
59
|
+
|
|
60
|
+
blog "CLI exit code=$EXIT_CODE"
|
|
61
|
+
|
|
62
|
+
rm -f "$INPUT_FILE" 2>/dev/null
|
|
63
|
+
printf '%s\n' "$RESULT"
|
|
64
|
+
exit $EXIT_CODE
|
package/hooks.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"hooks": {
|
|
4
|
+
"sessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"type": "command",
|
|
7
|
+
"bash": "bash \"./hooks/session-start.sh\"",
|
|
8
|
+
"powershell": "powershell -NoProfile -ExecutionPolicy Bypass -File \"./hooks/session-start.ps1\"",
|
|
9
|
+
"timeoutSec": 30
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"stop": [
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"bash": "bash \"./hooks/stop-hook.sh\"",
|
|
16
|
+
"powershell": "powershell -NoProfile -ExecutionPolicy Bypass -File \"./hooks/stop-hook.ps1\"",
|
|
17
|
+
"loop_limit": null
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a5c-ai/babysitter-cursor",
|
|
3
|
+
"version": "0.1.1-staging.400de59e",
|
|
4
|
+
"description": "Babysitter orchestration plugin for Cursor IDE with SDK-managed process-library bootstrapping and in-turn iteration model",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"test": "echo \"No tests yet\"",
|
|
7
|
+
"postinstall": "node bin/install.js",
|
|
8
|
+
"preuninstall": "node bin/uninstall.js",
|
|
9
|
+
"team:install": "node scripts/team-install.js",
|
|
10
|
+
"deploy": "npm publish --access public",
|
|
11
|
+
"deploy:staging": "npm publish --access public --tag staging"
|
|
12
|
+
},
|
|
13
|
+
"bin": {
|
|
14
|
+
"babysitter-cursor": "bin/cli.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
".cursor-plugin/",
|
|
18
|
+
".cursorrules",
|
|
19
|
+
"bin/",
|
|
20
|
+
"commands/",
|
|
21
|
+
"hooks/",
|
|
22
|
+
"hooks.json",
|
|
23
|
+
"plugin.json",
|
|
24
|
+
"scripts/",
|
|
25
|
+
"skills/",
|
|
26
|
+
"versions.json"
|
|
27
|
+
],
|
|
28
|
+
"keywords": [
|
|
29
|
+
"babysitter",
|
|
30
|
+
"cursor",
|
|
31
|
+
"orchestration",
|
|
32
|
+
"ai-agent",
|
|
33
|
+
"sdk-integration"
|
|
34
|
+
],
|
|
35
|
+
"author": "a5c.ai",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/a5c-ai/babysitter"
|
|
43
|
+
},
|
|
44
|
+
"homepage": "https://github.com/a5c-ai/babysitter/tree/main/plugins/babysitter-cursor#readme",
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@a5c-ai/babysitter-sdk": "0.0.184-staging.400de59e"
|
|
47
|
+
}
|
|
48
|
+
}
|
package/plugin.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "babysitter",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Orchestrate complex, multi-step workflows with event-sourced state management, hook-based extensibility, and human-in-the-loop approval -- powered by the Babysitter SDK",
|
|
5
|
+
"author": "a5c.ai",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"hooks": "hooks/hooks-cursor.json",
|
|
8
|
+
"commands": "commands/",
|
|
9
|
+
"skills": "skills/",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/a5c-ai/babysitter"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"orchestration",
|
|
16
|
+
"workflow",
|
|
17
|
+
"automation",
|
|
18
|
+
"event-sourced",
|
|
19
|
+
"hooks",
|
|
20
|
+
"cursor",
|
|
21
|
+
"agent",
|
|
22
|
+
"LLM"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const {
|
|
7
|
+
copyPluginBundle,
|
|
8
|
+
ensureGlobalProcessLibrary,
|
|
9
|
+
ensureMarketplaceEntry,
|
|
10
|
+
installCursorSurface,
|
|
11
|
+
warnWindowsHooks,
|
|
12
|
+
writeJson,
|
|
13
|
+
} = require('../bin/install-shared');
|
|
14
|
+
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = {
|
|
17
|
+
workspace: process.cwd(),
|
|
18
|
+
dryRun: false,
|
|
19
|
+
};
|
|
20
|
+
for (let i = 2; i < argv.length; i += 1) {
|
|
21
|
+
if (argv[i] === '--workspace' && argv[i + 1]) {
|
|
22
|
+
args.workspace = path.resolve(argv[++i]);
|
|
23
|
+
} else if (argv[i] === '--dry-run') {
|
|
24
|
+
args.dryRun = true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return args;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function main() {
|
|
31
|
+
const args = parseArgs(process.argv);
|
|
32
|
+
const packageRoot = path.resolve(process.env.BABYSITTER_PACKAGE_ROOT || path.join(__dirname, '..'));
|
|
33
|
+
const workspaceRoot = args.workspace;
|
|
34
|
+
const workspacePluginRoot = path.join(workspaceRoot, 'plugins', 'babysitter');
|
|
35
|
+
const workspaceMarketplacePath = path.join(workspaceRoot, '.agents', 'plugins', 'marketplace.json');
|
|
36
|
+
|
|
37
|
+
const installInfo = {
|
|
38
|
+
installedAt: new Date().toISOString(),
|
|
39
|
+
packageRoot,
|
|
40
|
+
workspaceRoot,
|
|
41
|
+
pluginRoot: workspacePluginRoot,
|
|
42
|
+
marketplacePath: workspaceMarketplacePath,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (args.dryRun) {
|
|
46
|
+
console.log(JSON.stringify({
|
|
47
|
+
ok: true,
|
|
48
|
+
dryRun: true,
|
|
49
|
+
installInfo,
|
|
50
|
+
}, null, 2));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
copyPluginBundle(packageRoot, workspacePluginRoot);
|
|
55
|
+
ensureMarketplaceEntry(workspaceMarketplacePath, workspacePluginRoot);
|
|
56
|
+
installCursorSurface(packageRoot, path.join(workspaceRoot, '.cursor'));
|
|
57
|
+
|
|
58
|
+
const active = ensureGlobalProcessLibrary(packageRoot);
|
|
59
|
+
installInfo.processLibraryStateFile = active.stateFile;
|
|
60
|
+
installInfo.processLibraryRoot = active.binding?.dir || '';
|
|
61
|
+
installInfo.processLibraryCloneDir = active.defaultSpec?.cloneDir || '';
|
|
62
|
+
|
|
63
|
+
const outDir = path.join(workspaceRoot, '.a5c', 'team');
|
|
64
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
65
|
+
writeJson(path.join(outDir, 'install.json'), installInfo);
|
|
66
|
+
|
|
67
|
+
const profilePath = path.join(outDir, 'profile.json');
|
|
68
|
+
if (!fs.existsSync(profilePath)) {
|
|
69
|
+
writeJson(profilePath, {
|
|
70
|
+
teamName: 'default',
|
|
71
|
+
pluginRoot: workspacePluginRoot,
|
|
72
|
+
marketplacePath: workspaceMarketplacePath,
|
|
73
|
+
processLibraryLookupCommand: 'babysitter process-library:active --json',
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
warnWindowsHooks();
|
|
78
|
+
console.log('[team-install] complete');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
main();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: assimilate
|
|
3
|
+
description: Assimilate an external methodology, repo, spec, or process into a Babysitter workflow.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# assimilate
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `assimilate` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$assimilate` as the target repo, methodology, spec,
|
|
13
|
+
or reference to ingest
|
|
14
|
+
- follow the `babysit` skill contract for research, process-library discovery,
|
|
15
|
+
and orchestration
|
|
16
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
17
|
+
`babysit`
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: babysit
|
|
3
|
+
description: >-
|
|
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.)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# babysit
|
|
10
|
+
|
|
11
|
+
Orchestrate `.a5c/runs/<runId>/` through iterative execution.
|
|
12
|
+
|
|
13
|
+
## Dependencies
|
|
14
|
+
|
|
15
|
+
### Babysitter SDK and CLI
|
|
16
|
+
|
|
17
|
+
Read the SDK version from `versions.json` to ensure version compatibility:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
SDK_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('${PLUGIN_ROOT}/versions.json','utf8')).sdkVersion||'latest')}catch{console.log('latest')}")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Then ensure the CLI is installed:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
sudo npm i -g @a5c-ai/babysitter-sdk@$SDK_VERSION
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use the CLI alias: `CLI="babysitter"`
|
|
30
|
+
|
|
31
|
+
**Alternatively:** `CLI="npx -y @a5c-ai/babysitter-sdk@$SDK_VERSION"`
|
|
32
|
+
|
|
33
|
+
### jq
|
|
34
|
+
|
|
35
|
+
make sure you have jq installed and available in the path. if not, install it.
|
|
36
|
+
|
|
37
|
+
## Instructions
|
|
38
|
+
|
|
39
|
+
Run the following command to get full orchestration instructions:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
babysitter instructions:babysit-skill --harness cursor --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Follow the instructions returned by the command above to orchestrate the run.
|
|
46
|
+
|
|
47
|
+
## Cursor -- In-Turn Loop Model
|
|
48
|
+
|
|
49
|
+
**IMPORTANT**: Cursor does NOT have a Stop hook that can drive the orchestration
|
|
50
|
+
loop between turns. Unlike Claude Code, there is no hook mechanism to
|
|
51
|
+
automatically re-enter the orchestration loop.
|
|
52
|
+
|
|
53
|
+
Therefore, you MUST use **in-turn iteration**: run the full orchestration loop
|
|
54
|
+
within a single session turn. The pattern is:
|
|
55
|
+
|
|
56
|
+
1. `babysitter run:iterate --json` -- get pending actions
|
|
57
|
+
2. For each pending action: execute it (run tasks, post results via `task:post`)
|
|
58
|
+
3. `babysitter run:iterate --json` -- check for more pending actions
|
|
59
|
+
4. Repeat steps 2-3 until run completes or reaches a breakpoint requiring user input
|
|
60
|
+
5. If a breakpoint requires user input, ask the user and post the response, then continue iterating
|
|
61
|
+
|
|
62
|
+
All iteration happens within the same turn -- do NOT rely on hooks to re-enter
|
|
63
|
+
the orchestration loop. The agent drives the loop directly by calling
|
|
64
|
+
`run:iterate` repeatedly until completion.
|
|
65
|
+
|
|
66
|
+
### Loop Example
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Initial iterate
|
|
70
|
+
RESULT=$(babysitter run:iterate --run-id "$RUN_ID" --json)
|
|
71
|
+
STATUS=$(echo "$RESULT" | jq -r '.status')
|
|
72
|
+
|
|
73
|
+
while [ "$STATUS" != "completed" ] && [ "$STATUS" != "failed" ]; do
|
|
74
|
+
# Process pending actions from RESULT
|
|
75
|
+
# ... execute tasks, post results ...
|
|
76
|
+
|
|
77
|
+
# Iterate again
|
|
78
|
+
RESULT=$(babysitter run:iterate --run-id "$RUN_ID" --json)
|
|
79
|
+
STATUS=$(echo "$RESULT" | jq -r '.status')
|
|
80
|
+
done
|
|
81
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: call
|
|
3
|
+
description: Start a new Babysitter orchestration run from Cursor IDE/CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# call
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `call` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$call` as the initial Babysitter request for a new
|
|
13
|
+
orchestration run
|
|
14
|
+
- create the process, create the run, and enter the Babysitter loop
|
|
15
|
+
- using this always means the user meant an interactive run
|
|
16
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
17
|
+
`babysit`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doctor
|
|
3
|
+
description: Diagnose Babysitter run health, integration issues, or orchestration failures.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# doctor
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `doctor` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$doctor` as the run selector, subsystem, or problem
|
|
13
|
+
statement to diagnose
|
|
14
|
+
- focus on run health, orchestration correctness, and recovery guidance
|
|
15
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
16
|
+
`babysit`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: help
|
|
3
|
+
description: Explain Babysitter Cursor IDE/CLI usage, modes, setup, or operational behavior.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# help
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `help` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$help` as the help target or question
|
|
13
|
+
- focus on explaining the right Babysitter flow or integration surface
|
|
14
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
15
|
+
`babysit`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: observe
|
|
3
|
+
description: Observe, inspect, or monitor a Babysitter run.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# observe
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `observe` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$observe` as the run selector or observation target
|
|
13
|
+
- focus on inspection, monitoring, and state visibility
|
|
14
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
15
|
+
`babysit`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan
|
|
3
|
+
description: Plan a Babysitter workflow without executing the run.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# plan
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `plan` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$plan` as the planning request
|
|
13
|
+
- focus on building the best process possible without creating and running the
|
|
14
|
+
actual run unless the user explicitly changes mode
|
|
15
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
16
|
+
`babysit`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resume
|
|
3
|
+
description: Resume an existing Babysitter run from Cursor IDE/CLI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# resume
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `resume` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$resume` as the run selector or run id
|
|
13
|
+
- focus on restoring the orchestration context and continuing the run honestly
|
|
14
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
15
|
+
`babysit`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: retrospect
|
|
3
|
+
description: Summarize or retrospect on one or more completed Babysitter runs.
|
|
4
|
+
argument-hint: "[run-id...] [--all] Optional run IDs or --all for all runs"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# retrospect
|
|
8
|
+
|
|
9
|
+
Load and use the installed `babysit` skill.
|
|
10
|
+
|
|
11
|
+
Resolve the request in `retrospect` mode:
|
|
12
|
+
|
|
13
|
+
- treat everything after `$retrospect` as the run selector(s) to summarize
|
|
14
|
+
- focus on the run history, outcomes, lessons, and gaps
|
|
15
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
16
|
+
`babysit`
|
|
17
|
+
|
|
18
|
+
## Phase 1: Resolve Target Run(s)
|
|
19
|
+
|
|
20
|
+
- If `--all` or "all" is present in args: list all runs via `ls -lt .a5c/runs/` and collect all completed/failed run IDs
|
|
21
|
+
- If multiple run IDs are provided: use all of them
|
|
22
|
+
- Otherwise: existing behavior (resolve the latest single run)
|
|
23
|
+
- Use interactive prompts to confirm run selection when possible
|
|
24
|
+
|
|
25
|
+
## Phase 2: Load Run Data
|
|
26
|
+
|
|
27
|
+
For each selected run, load:
|
|
28
|
+
- `run.json` metadata
|
|
29
|
+
- Journal events
|
|
30
|
+
- Task definitions and results
|
|
31
|
+
- State snapshots
|
|
32
|
+
|
|
33
|
+
## Phase 3: Analysis
|
|
34
|
+
|
|
35
|
+
Perform standard per-run analysis (outcomes, process effectiveness, suggestions).
|
|
36
|
+
|
|
37
|
+
### Cross-Run Pattern Analysis (multi-run mode)
|
|
38
|
+
|
|
39
|
+
When analyzing multiple runs, additionally cover:
|
|
40
|
+
- **Common failure modes** across runs
|
|
41
|
+
- **Velocity trends** (tasks/time across runs)
|
|
42
|
+
- **Process evolution** (how processes changed over time)
|
|
43
|
+
- **Repeated breakpoint patterns**
|
|
44
|
+
|
|
45
|
+
## Phase 4: Suggestions
|
|
46
|
+
|
|
47
|
+
Provide actionable suggestions for process improvements, optimizations, and fixes.
|
|
48
|
+
|
|
49
|
+
## Phase 5: Implementation
|
|
50
|
+
|
|
51
|
+
If the user agrees, implement improvements to processes, skills, or configuration.
|
|
52
|
+
|
|
53
|
+
## Phase 6: Cleanup Suggestion
|
|
54
|
+
|
|
55
|
+
After analysis, suggest: "Consider running `babysitter cleanup` (or `/babysitter:cleanup`) to clean up old run data and reclaim disk space."
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: user-install
|
|
3
|
+
description: Install the user-level Babysitter Cursor IDE/CLI setup.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# user-install
|
|
7
|
+
|
|
8
|
+
Load and use the installed `babysit` skill.
|
|
9
|
+
|
|
10
|
+
Resolve the request in `user-install` mode:
|
|
11
|
+
|
|
12
|
+
- treat everything after `$user-install` as the user-setup request
|
|
13
|
+
- focus on user profile, user-level install, and personal defaults
|
|
14
|
+
- do not create a separate command surface here; this skill only forwards into
|
|
15
|
+
`babysit`
|
package/versions.json
ADDED