UNPKG

aiwg

Version:

Deployment tool and support utility for AI context. Copies agents, skills, commands, rules, and behaviors into the paths each AI platform reads (Claude Code, Codex, Copilot, Cursor, Warp, OpenClaw, and 6 more) so one source of truth works across 10 platfo

301 lines (251 loc) 9.01 kB
# Daemon Configuration Reference All daemon configuration lives in `.aiwg/daemon.json`. This file is created by `aiwg daemon-init` with defaults, then customized per project. ## Full Configuration Structure ```json { "daemon": { "heartbeat_interval_seconds": 30, "max_parallel_actions": 3, "action_timeout_minutes": 120, "log": { "max_size_mb": 50, "max_files": 5 } }, "supervisor": { "max_concurrent": 4, "max_queue_depth": 20, "restart_intensity": { "max_restarts": 3, "window_seconds": 300 }, "circuit_breaker": { "failure_threshold": 5, "cooldown_ms": 120000 }, "daily_budget_usd": 0, "behaviors": [] }, "interface": { "web": { "enabled": false, "port": 7474, "host": "127.0.0.1" } }, "watch": { "enabled": false, "paths": [], "ignore": ["node_modules/", ".git/", "*.log"], "debounce_ms": 1000 }, "schedule": { "enabled": false, "jobs": [] }, "rules": [], "behaviors": {} } ``` --- ## daemon Core process settings. | Key | Type | Default | Description | |-----|------|---------|-------------| | `daemon.heartbeat_interval_seconds` | number | 30 | How often the daemon writes a heartbeat to `.aiwg/daemon/heartbeat.json` | | `daemon.max_parallel_actions` | number | 3 | Maximum concurrent actions in the base action runner (not the supervisor) | | `daemon.action_timeout_minutes` | number | 120 | Kill an action after this many minutes regardless of state | | `daemon.log.max_size_mb` | number | 50 | Log file size before rotation | | `daemon.log.max_files` | number | 5 | Number of rotated log files to keep | --- ## supervisor The DaemonSupervisor wraps the base agent supervisor and adds governance policy. | Key | Type | Default | Description | |-----|------|---------|-------------| | `supervisor.max_concurrent` | number | 4 | Maximum simultaneous agent sessions | | `supervisor.max_queue_depth` | number | 20 | Maximum queued tasks; rejections above this threshold | | `supervisor.restart_intensity.max_restarts` | number | 3 | Restarts allowed within the window before marking a task permanently failed | | `supervisor.restart_intensity.window_seconds` | number | 300 | Sliding window for restart counting (seconds) | | `supervisor.circuit_breaker.failure_threshold` | number | 5 | Consecutive failures that open the circuit breaker | | `supervisor.circuit_breaker.cooldown_ms` | number | 120000 | Time the circuit stays open before a half-open probe (ms) | | `supervisor.daily_budget_usd` | number | 0 | Daily spend cap across all agent loops. 0 = no cap. Resets at midnight local time. | | `supervisor.behaviors` | string[] | `[]` | Behavior names to activate at session initialization | **Circuit breaker states**: - **Closed** (normal): tasks run normally - **Open**: new tasks are blocked until `cooldown_ms` elapses - **Half-open**: one probe task runs; if it succeeds, the circuit closes; if it fails, the cooldown resets **Budget behavior**: At 90% of `daily_budget_usd`, a warning is emitted. At 100%, new agent spawns are blocked. Token cost is aggregated across all supervised loops. --- ## interface Web UI settings. | Key | Type | Default | Description | |-----|------|---------|-------------| | `interface.web.enabled` | boolean | false | Enable the operator web UI | | `interface.web.port` | number | 7474 | Port to listen on | | `interface.web.host` | string | `"127.0.0.1"` | Bind address. Keep as `127.0.0.1` unless you need remote access. | The web UI at `http://localhost:7474` shows: active sessions, task queue, subsystem health, supervisor state, and session logs. It is read-only by default. --- ## watch File system monitoring. Triggers automation rules when files change. | Key | Type | Default | Description | |-----|------|---------|-------------| | `watch.enabled` | boolean | false | Enable file system monitoring | | `watch.paths` | string[] | | Directories to watch (relative to project root) | | `watch.ignore` | string[] | | Glob patterns to exclude from watching | | `watch.debounce_ms` | number | 1000 | Wait this long after the last change before firing triggers | **Example**: Watch source and test directories: ```json { "watch": { "enabled": true, "paths": ["src/", "test/", ".aiwg/requirements/"], "ignore": ["node_modules/", ".git/", "*.log", "*.tmp"], "debounce_ms": 2000 } } ``` --- ## schedule Cron-based job scheduling. | Key | Type | Default | Description | |-----|------|---------|-------------| | `schedule.enabled` | boolean | false | Enable the scheduler | | `schedule.jobs` | object[] | | Array of cron job definitions | **Job schema**: | Key | Type | Required | Description | |-----|------|----------|-------------| | `name` | string | yes | Unique job identifier | | `cron` | string | yes | Cron expression (5-field: minute hour day month weekday) | | `action` | string | yes | Action name to run | | `timeout_minutes` | number | no | Job-specific timeout (overrides daemon default) | **Example jobs**: ```json { "schedule": { "enabled": true, "jobs": [ { "name": "health-check", "cron": "*/30 * * * *", "action": "health-check" }, { "name": "daily-security-audit", "cron": "0 9 * * 1-5", "action": "security-audit", "timeout_minutes": 60 }, { "name": "weekly-test-run", "cron": "0 8 * * 1", "action": "run-tests" } ] } } ``` --- ## rules Automation rules: event-driven trigger condition action. Each rule is an object with: | Key | Type | Description | |-----|------|-------------| | `id` | string | Unique rule identifier | | `trigger.type` | string | `"file_change"`, `"schedule"`, or `"task_complete"` | | `trigger.pattern` | string | Glob pattern (for `file_change`) | | `condition.type` | string | `"debounce"`, `"always"`, or `"on_error"` | | `condition.interval_ms` | number | Debounce interval (for `debounce` condition) | | `action.type` | string | `"submit_task"` or `"run_skill"` | | `action.prompt` | string | Task prompt (for `submit_task`) | | `action.skill` | string | Skill name (for `run_skill`) | **Example rule**: Run tests when TypeScript files change: ```json { "rules": [ { "id": "auto-test-on-ts-change", "trigger": { "type": "file_change", "pattern": "src/**/*.ts" }, "condition": { "type": "debounce", "interval_ms": 5000 }, "action": { "type": "submit_task", "prompt": "Run the TypeScript tests for the changed files" } } ] } ``` --- ## behaviors Per-behavior configuration blocks. Each key corresponds to a behavior name listed in `supervisor.behaviors`. ### concierge ```json { "behaviors": { "concierge": { "enabled": true, "tone": "professional-warm", "verbosity": "concise", "escalation": "absorb-by-default", "memory": { "cross_session": true, "store": ".aiwg/daemon/concierge-memory.json" } } } } ``` | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | boolean | true | Activate the concierge | | `tone` | string | `"professional-warm"` | `"professional-warm"`, `"technical-authority"`, or `"friendly-explainer"` | | `verbosity` | string | `"concise"` | `"minimal"`, `"concise"`, or `"detailed"` | | `escalation` | string | `"absorb-by-default"` | `"absorb-by-default"` (handle errors silently) or `"surface-immediately"` (show all errors) | | `memory.cross_session` | boolean | true | Persist session context across restarts | | `memory.store` | string | | Path to the memory file | **Tone options**: - `professional-warm` Hotel concierge register; the default. Warm but not casual; professional but not cold. - `technical-authority` Direct, precise. For teams that prefer unmediated technical communication. - `friendly-explainer` Approachable, patient. For less technical users or onboarding contexts. --- ## Minimal Configuration Example For a development project with file watching and no spend cap: ```json { "daemon": { "heartbeat_interval_seconds": 30 }, "supervisor": { "max_concurrent": 2, "behaviors": ["concierge"] }, "interface": { "web": { "enabled": true, "port": 7474 } }, "watch": { "enabled": true, "paths": ["src/", "test/"], "ignore": ["node_modules/", ".git/"], "debounce_ms": 1000 }, "behaviors": { "concierge": { "enabled": true, "tone": "technical-authority", "verbosity": "concise" } } } ``` ## References - `@$AIWG_ROOT/agentic/code/addons/daemon/docs/quickstart.md` Start and stop the daemon - `@$AIWG_ROOT/agentic/code/addons/daemon/docs/daemon-addon-guide.md` Architecture and provider support - `@$AIWG_ROOT/docs/daemon-guide.md` Supervisor architecture and headend details