Agentic AI Atlasby a5c.ai
OverviewWikiGraphFor AgentsEdgesSearchWorkspace
/
GitHubDocsDiscord
i.4Wiki
Agentic AI Atlas · Babysitter Configuration Reference
docs/user-guide/reference/configurationa5c.ai
Search the atlas/
Wiki · linked records

Article and nearby pages

I.Current articlepp. 1 - 1
Adapter Types: the full taxonomyAdapters CLI ReferenceBabysitter CLI ReferenceError CatalogFrequently Asked Questions (FAQ)Babysitter Glossary
I.
Wiki article

docs/user-guide/reference/configuration

Reading · 11 min

Babysitter Configuration Reference reference

Docs(../index.md) › Reference(./index.md) › Configuration

Page nodewiki/docs/user-guide/reference/configuration.mdNearby pages · 9Documents · 0

Continue reading

Nearby pages in the same section.

Adapter Types: the full taxonomyAdapters CLI ReferenceBabysitter CLI ReferenceError CatalogFrequently Asked Questions (FAQ)Babysitter GlossarySecurity GuideBabysitter Slash Commands ReferenceTroubleshooting Guide

Docs › Reference › Configuration

Babysitter Configuration Reference

**Version:** 6.0.0 (v6) **Last Updated:** 2026-06-22

Complete reference for all Babysitter configuration options, environment variables, file paths, and settings.

**In plain English:** the variables and paths below work the same on every supported harness. v6 standardized session identification on the harness-agnostic AGENT_SESSION_ID, removed the --plugin-root flag, and made session resolution PID-scoped. Deprecated keys are marked below.

---

On this page

- SDK Variables - Debug Variables - Session Variables

- Runs Directory - Run Directory Structure - Plugin Directory

- run.json - inputs.json - state.json - hooks.json

- Hook Discovery - Hook Types - Custom Hook Development

- Task Definitions - Breakpoint Configuration

  • Overview
  • Environment Variables
  • Directory Structure
  • Configuration Files
  • Hook Configuration
  • Process Configuration
  • Default Values
  • Configuration Precedence

---

Overview

Babysitter configuration is managed through: 1. **Environment variables** - Runtime settings 2. **File-based configuration** - Per-run and per-project settings 3. **CLI flags** - Command-line overrides 4. **Hooks** - Extensible behavior customization

Configuration Philosophy

  • **Convention over configuration** - Sensible defaults work out of the box
  • **Explicit overrides** - Environment variables and CLI flags for customization
  • **Immutable runs** - Run configuration is captured at creation time
  • **Git-friendly** - Human-readable JSON and markdown files

---

Environment Variables

SDK Variables

VariableDescriptionDefaultExample
RUNS_DIRBase directory for runs. (current directory).a5c/runs
REPO_ROOTRepository root directoryCurrent working directory/home/user/project
BABYSITTER_LOG_LEVELLogging verbosityinfodebug, warn, error
BABYSITTER_ALLOW_SECRET_LOGSAllow logging sensitive datafalsetrue

RUNS_DIR

Specifies the base directory where run directories are created and stored.

bash
# Default behavior - runs created in current directory
babysitter run:create --process-id dev/build --entry ./main.js#process

# Override via environment variable
export RUNS_DIR=.a5c/runs
babysitter run:create --process-id dev/build --entry ./main.js#process

# Override via CLI flag (takes precedence)
babysitter run:create --runs-dir .a5c/runs --process-id dev/build --entry ./main.js#process

BABYSITTER_LOG_LEVEL

Controls the verbosity of log output.

LevelDescription
errorOnly errors
warnWarnings and errors
infoNormal operation (default)
debugDetailed debugging information
bash
export BABYSITTER_LOG_LEVEL=debug
babysitter run:iterate run-123 --json

BABYSITTER_ALLOW_SECRET_LOGS

When set to true along with --verbose and --json, allows task payloads to be included in output.

bash
BABYSITTER_ALLOW_SECRET_LOGS=true babysitter task:show run-123 ef-abc --json --verbose

**Security Warning:** Only enable in development/debugging. Never enable in production logs.

---

Debug Variables

VariableDescriptionDefaultExample
DEBUGNode.js debug namespacesNonebabysitter:*
bash

# Enable Node.js debug output
export DEBUG=babysitter:*
babysitter run:iterate run-123

---

Session Variables

These variables are set by the harness and used by the plugin. v6 uses **harness-agnostic** names so the same hooks work across all 12 supported harnesses.

VariableDescriptionSet By
AGENT_SESSION_IDCurrent harness session identifierThe active harness
BABYSITTER_PLUGIN_ROOTPlugin installation directory (injected into hooks by the runtime)The runtime
BABYSITTER_ENV_FILEPath to environment persistence fileThe runtime
BABYSITTER_TRUST_ENV_SESSIONOpt back into legacy env-first session resolution (1 to enable)You (escape hatch)

These are automatically available in hooks and skills. Use them for session isolation and state management.

bash
# In a hook script
echo "Session: $AGENT_SESSION_ID"
echo "Plugin root: $BABYSITTER_PLUGIN_ROOT"

# State file path pattern
STATE_FILE="${BABYSITTER_STATE_DIR:-$HOME/.a5c/state}/${AGENT_SESSION_ID}.md"

Session Resolution (v6)

Session resolution is now **PID-scoped**: the active session is resolved from PID-scoped session markers rather than inheriting blindly from the environment. This prevents one shell's session ID from leaking into another. If you need the legacy env-first behavior (for example, in a wrapper that deliberately exports a session ID), set:

bash
export BABYSITTER_TRUST_ENV_SESSION=1

**Deprecated (do not use as canonical):** CLAUDE_SESSION_ID → AGENT_SESSION_ID; BABYSITTER_SESSION_ID → AGENT_SESSION_ID. The --plugin-root flag and the CLAUDE_PLUGIN_ROOT variable are **gone** — plugin-root resolution is handled automatically by the runtime, which injects BABYSITTER_PLUGIN_ROOT into hooks for you. It is not a variable you set. See the Migration Guide.

---

Directory Structure

Runs Directory

Default location: .a5c/runs/ (configurable via RUNS_DIR or --runs-dir)

Code
.a5c/
└── runs/
    ├── run-20260125-143012-feature-a/
    ├── run-20260125-150000-bugfix/
    └── run-20260126-090000-refactor/

Run Directory Structure

Each run has the following structure:

Code
.a5c/runs/<runId>/
├── run.json              # Run metadata (immutable after creation)
├── inputs.json           # Initial inputs (immutable after creation)
├── code/
│   └── main.js           # Process implementation
├── artifacts/
│   ├── process.md        # Process description
│   ├── plan.md           # Implementation plan
│   └── ...               # Other generated artifacts
├── journal/
│   ├── 000001.<ulid>.json  # Event 1
│   ├── 000002.<ulid>.json  # Event 2
│   └── ...                 # Append-only event log
├── state/
│   └── state.json        # Derived state cache (gitignored, rebuildable)
└── tasks/
    └── <effectId>/
        ├── task.json     # Task definition
        ├── input.json    # Task inputs
        ├── result.json   # Task result (written by SDK)
        ├── output.json   # Value file (written by executor)
        ├── stdout.log    # Standard output
        └── stderr.log    # Standard error

File Descriptions

FilePurposeMutability
run.jsonRun metadata, process configurationImmutable
inputs.jsonInitial process inputsImmutable
code/main.jsProcess implementationEditable
artifacts/*Generated files (plans, specs)Generated
journal/*Event logAppend-only
state/state.jsonCached stateDerived (rebuildable)
tasks/*/task.jsonTask definitionsImmutable
tasks/*/result.jsonTask resultsWritten by SDK

Plugin Directory

Location: Managed by Claude Code plugin system

Code
plugins/babysitter-unified/
├── plugin.json           # Plugin manifest
├── versions.json         # Unified SDK/plugin version marker
├── skills/
│   └── babysit/
│       └── SKILL.md      # Skill instructions
├── hooks/
│   ├── session-start.sh
│   ├── stop.sh
│   ├── pre-tool-use.sh
│   └── user-prompt-submit.sh
├── per-harness/          # Harness-specific generated surfaces and docs
└── bin/                  # Shared install helpers

---

Configuration Files

run.json

Created by run:create. Contains immutable run metadata.

**Schema:**

json
{
  "runId": "run-20260125-143012",
  "createdAt": "2026-01-25T14:30:12.123Z",
  "process": {
    "processId": "dev/build",
    "entry": ".a5c/processes/build/main.js#buildProcess",
    "revision": "1.0.0"
  },
  "request": "Build the authentication module",
  "prompt": "Build the authentication module with JWT tokens and role-based access control"
}
FieldTypeDescription
runIdstringUnique run identifier
createdAtISO 8601Creation timestamp
process.processIdstringProcess type identifier
process.entrystringEntry point <path>#<export>
process.revisionstringOptional version/revision
requeststringOptional human-readable description
promptstringOptional initial user prompt (persisted for context recovery)

---

inputs.json

Initial inputs provided to the process.

**Schema:** User-defined, passed to process function as first argument.

**Example:**

json
{
  "feature": "user-authentication",
  "targetQuality": 85,
  "maxIterations": 5,
  "config": {
    "database": "sqlite",
    "testFramework": "jest"
  }
}

---

state.json

Derived state cache. Rebuilt from journal if missing.

**Schema:**

json
{
  "runId": "run-20260125-143012",
  "status": "running",
  "version": 42,
  "processState": {},
  "invocations": {
    "task/build:1": {
      "effectId": "effect-abc123",
      "status": "completed",
      "resultRef": "tasks/effect-abc123/result.json"
    }
  },
  "pendingEffects": [
    {
      "effectId": "effect-def456",
      "kind": "node",
      "status": "requested",
      "taskId": "task/lint"
    }
  ]
}
FieldDescription
runIdRun identifier
statuscreated, running, waiting, completed, failed
versionState version (increments with each event)
processStateProcess-specific state data
invocationsMap of completed task invocations
pendingEffectsList of pending effects

**Note:** This file is gitignored and can be deleted. It will be rebuilt by run:rebuild-state or the next CLI command.

---

hooks.json (Claude Code)

Hook registration for the Claude Code harness. Other harnesses register continuation hooks via their own manifests (gemini-extension.json, the openclaw daemon, ACP for Hermes, and so on) — see Hooks for the per-harness continuation models.

**Location (Claude Code):** generated from plugins/babysitter-unified/plugin.json

**Schema:**

json
{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${BABYSITTER_PLUGIN_ROOT}/hooks/session-start.sh"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "${BABYSITTER_PLUGIN_ROOT}/hooks/stop.sh"
          }
        ]
      }
    ]
  }
}

**Hook Events (Claude Code):**

  • SessionStart - When the Claude Code session starts
  • Stop - When Claude tries to exit (drives the loop on Claude Code only)
  • PreToolUse - Before tool invocation
  • PostToolUse - After tool invocation

The Stop-driven loop is **specific to Claude Code**. Do not assume it on AfterAgent (Gemini/antigravity), daemon (openclaw), ACP (Hermes), or session-idle (opencode) harnesses.

---

Hook Configuration

Hook Discovery

Hooks are discovered in priority order:

1. **Per-repo hooks:** .a5c/hooks/<hook-name>/*.sh 2. **Per-user hooks:** ~/.config/babysitter/hooks/<hook-name>/*.sh 3. **Plugin hooks:** plugins/babysitter-unified/hooks/<hook-name>.sh

All executable files (.sh) in the hook directory are executed in lexicographic order.

Hook Types

SDK Lifecycle Hooks

HookTriggerPurpose
on-run-startRun creationInitialize run resources
on-run-completeSuccessful completionCleanup, notifications
on-run-failRun failureError handling, alerts
on-iteration-startBefore iteration**Core orchestration**
on-iteration-endAfter iterationFinalization, logging
on-task-startBefore task executionPreparation, metrics
on-task-completeAfter task executionCleanup, metrics
on-breakpointBreakpoint createdNotifications

Harness Continuation Hooks (vary by harness)

The hooks that drive the loop turn-to-turn differ per harness. The Claude Code set is shown below; see Hooks for the full per-harness table (AfterAgent, daemon, ACP, session-idle, thin-skill aliases).

Hook (Claude Code)TriggerPurpose
SessionStartSession beginsSession setup
StopExit attemptIn-session loop control (Claude Code only)
PreToolUseBefore tool callValidation
PostToolUseAfter tool callLogging

Custom Hook Development

Basic Hook Template

bash
#!/bin/bash
set -euo pipefail

# Read JSON payload from stdin
PAYLOAD=$(cat)

# Parse payload
RUN_ID=$(echo "$PAYLOAD" | jq -r '.runId')
EFFECT_ID=$(echo "$PAYLOAD" | jq -r '.effectId // empty')

# Log to stderr (not captured as result)
echo "Processing: $RUN_ID" >&2

# Your logic here
# ...

# Return JSON result via stdout
echo '{"ok": true, "action": "processed"}'

Hook Input/Output

ChannelPurpose
stdinJSON payload input
stdoutJSON result output (must be valid JSON)
stderrLogging (not captured)

Making Hooks Executable

bash
chmod +x .a5c/hooks/on-run-complete/my-hook.sh

Example: Slack Notification Hook

bash
#!/bin/bash
set -euo pipefail

PAYLOAD=$(cat)
RUN_ID=$(echo "$PAYLOAD" | jq -r '.runId')
STATUS=$(echo "$PAYLOAD" | jq -r '.status')

# Send to Slack
curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d "{\"text\": \"Run $RUN_ID completed with status: $STATUS\"}" >&2

echo '{"ok": true}'

---

Process Configuration

Task Definitions

Tasks are defined in the process file using the defineTask helper.

Node Task

javascript
export const buildTask = defineTask('build', (args, ctx) => ({
  kind: 'node',
  title: 'Build project',
  node: {
    entry: './scripts/build.js',
    args: ['--target', args.target],
    env: {
      NODE_ENV: 'production'
    },
    timeout: 300000  // 5 minutes
  },
  io: {
    inputJsonPath: `tasks/${ctx.effectId}/input.json`,
    outputJsonPath: `tasks/${ctx.effectId}/result.json`
  }
}));

Agent Task

javascript
export const analyzeTask = defineTask('analyze', (args, ctx) => ({
  kind: 'agent',
  title: 'Analyze code quality',
  agent: {
    name: 'code-analyzer',
    prompt: {
      role: 'Senior code reviewer',
      task: 'Analyze the codebase for quality issues',
      context: args,
      instructions: [
        'Review code structure',
        'Check naming conventions',
        'Identify potential bugs'
      ],
      outputFormat: 'JSON'
    },
    outputSchema: {
      type: 'object',
      required: ['score', 'issues'],
      properties: {
        score: { type: 'number', minimum: 0, maximum: 100 },
        issues: { type: 'array' }
      }
    }
  }
}));

Skill Task

javascript
export const refactorTask = defineTask('refactor', (args, ctx) => ({
  kind: 'skill',
  title: 'Refactor module',
  skill: {
    name: 'code-refactor',
    context: {
      files: args.files,
      pattern: args.pattern,
      instructions: args.instructions
    }
  }
}));

Breakpoint Configuration

javascript
await ctx.breakpoint({
  question: 'Approve the deployment to production?',
  title: 'Production Deployment Approval',
  context: {
    runId: ctx.runId,
    files: [
      { path: 'artifacts/deploy-plan.md', format: 'markdown', label: 'Deployment Plan' },
      { path: 'artifacts/changes.md', format: 'markdown', label: 'Changes Summary' },
      { path: 'code/main.js', format: 'code', language: 'javascript', label: 'Process Code' }
    ]
  }
});

---

Default Values

SDK Defaults

SettingDefault Value
Runs directoryCurrent directory (.)
Log levelinfo
Max iterations100 (in testing harness)
Task timeoutNone (process-defined)

In-Session Loop Defaults

SettingDefault Value
Max iterations0 (unlimited)
State file location${BABYSITTER_STATE_DIR:-~/.a5c/state}/${SESSION_ID}.md

---

Configuration Precedence

When multiple configuration sources exist, they are applied in this order (later overrides earlier):

1. **Built-in defaults** - Hardcoded in SDK 2. **Configuration files** - run.json, inputs.json 3. **Environment variables** - RUNS_DIR, PORT, etc. 4. **CLI flags** - --runs-dir, --json, --verbose

Example Precedence

bash
# Built-in default: runs dir = "."
# Environment variable: RUNS_DIR=.a5c/runs
# CLI flag: --runs-dir /custom/runs

export RUNS_DIR=.a5c/runs
babysitter run:create --runs-dir /custom/runs --process-id dev/build

# Result: runs dir = /custom/runs (CLI flag wins)

---

Configuration Best Practices

Development Environment

bash
# .envrc or .env
export RUNS_DIR=.a5c/runs
export BABYSITTER_LOG_LEVEL=debug

CI/CD Environment

bash
# GitHub Actions example
env:
  RUNS_DIR: .a5c/runs
  BABYSITTER_LOG_LEVEL: info
  BABYSITTER_ALLOW_SECRET_LOGS: false

Security Recommendations

1. **Never commit tokens** - Use environment variables or secrets management 2. **Restrict network binding** - Use --host 127.0.0.1 for local-only access 3. **Enable authentication** - Set AGENT_TOKEN and HUMAN_TOKEN 4. **Audit logs** - Keep BABYSITTER_ALLOW_SECRET_LOGS=false in production

---

Related Documentation

  • CLI Reference - Complete CLI documentation
  • Glossary - Term definitions
  • Troubleshooting - Common issues and solutions

---

Next steps

  • **Next:** Security
  • **Related:** CLI Reference, Troubleshooting

Trail

Wiki
Babysitter Docs
Babysitter User Guide
User Guide Reference

Babysitter Configuration Reference

Continue reading

Adapter Types: the full taxonomy
Adapters CLI Reference
Babysitter CLI Reference
Error Catalog
Frequently Asked Questions (FAQ)
Babysitter Glossary
Security Guide
Babysitter Slash Commands Reference

Page record

Open node ledger

wiki/docs/user-guide/reference/configuration.md

Documents

No documented graph nodes on this page.