Commit graph

140 commits

Author SHA1 Message Date
Snider
e0bcb6b271 ci: add GitHub Actions workflow with Codecov
Runs tests for brain, monitor, and agentic packages on push to main.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 15:06:04 +00:00
Snider
f2276904bf test(monitor): add unit tests for completions, inbox, lifecycle
Coverage: 23.2% → 86.5%
Tests for checkCompletions, checkInbox, monitor loop,
Poke, New, Start/Shutdown. Uses httptest for API mocking.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 15:06:04 +00:00
Snider
c38a3aefff test(brain): add unit tests for recall, remember, messaging
Coverage: 5.3% → 92.8%. Tests cover DirectSubsystem (apiCall, remember,
recall, forget via httptest), messaging (sendMessage, inbox, conversation,
parseMessages, toInt), BrainProvider (gin handlers, routes, describe,
status), Subsystem bridge-backed handlers, and RegisterTools.

Also fixes build error in dispatch.go (removed KillGroup, Timeout,
GracePeriod fields no longer in process.RunOptions).

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 15:06:04 +00:00
Snider
2c0b75d6f1 test(monitor): add harvest and channel notification tests
15 tests covering:
- Branch detection, unpushed commit counting, file counting
- Safety checks: binary rejection, large file rejection
- Workspace harvesting: happy path, skip running, skip main, reject binary
- Channel event emission via mock notifier
- Status file updates

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 15:06:04 +00:00
Snider
7932f3a7ba feat(agent): wire channel notifications into monitor
- Monitor pushes agent.complete, inbox.message, harvest.complete
  events via ChannelSend instead of temp files
- Remove /tmp/claude-inbox-notify file write (channels replace it)
- Update mcp.New() to use Options{} struct
- Wire mcpSvc as ChannelNotifier after creation

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 15:06:04 +00:00
Snider
5628abcc7f refactor: flatten go/ subdir, migrate to dappco.re/go/agent, restore process service
- Module path: dappco.re/go/agent
- Core import: dappco.re/go/core v0.4.7
- Process service re-enabled with new Core API
- Plugin bumped to v0.11.0
- Directory flattened from go/ to root

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-21 11:12:40 +00:00
Claude
fc9fc1af83 feat(skills): add repo-sweep skill for multi-repo agent dispatch
Orchestrates dispatching agents across multiple repos with:
- Repo selection (all, by org, by language, explicit list)
- Configurable persona + template + task per sweep
- Concurrency-aware dispatch with queue monitoring
- Finding triage: actionable → Forge issue, informational → OpenBrain, noise → ignore
- Summary report with per-repo findings

5 default profiles: quality, security, conventions, tests, docs.
Uses testing/reality-checker persona for quality sweeps.

Co-Authored-By: Charon <charon@lethean.io>
2026-03-21 11:12:40 +00:00
Snider
1215898608 agent updates 2026-03-20 19:31:45 +00:00
Snider
dc7c89fdae refactor: remove pkg/prompts — consolidated into pkg/lib
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-18 14:09:17 +00:00
Snider
53482cb0c8 feat: workspace templates via Extract — Gosod pattern for agent dispatch
- Move pkg/prompts/lib → pkg/lib (prompt, task, flow, persona, workspace)
- New lib.go: unified package with ExtractWorkspace() using text/template
- Workspace templates: default, security, review — .tmpl files with data injection
- prep.go: uses lib.ExtractWorkspace() + detect helpers for language/build/test
- prompts.go: thin re-export wrapper for backwards compat

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-18 14:03:06 +00:00
Snider
85bdf26aa0 feat: add orchestration skills + local dispatch scripts
- orchestrate skill: full plan→dispatch→review→fix→verify pipeline
- prompts skill: browse/read personas, tasks, flows, templates
- review-pipeline skill: multi-stage security→fix→simplify→architecture→verify
- local-dispatch.sh: dispatch agents without MCP (clone, run CLI, capture)
- workspace-status.sh: check all workspace statuses
- main.go: fix ServiceFor removal (use c.Service() + type assert)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-18 12:18:40 +00:00
Snider
e7b47bf1a0 feat: TaskBundle — task file + directory of additionals
Pattern: task name maps to file + bundle directory
  task/code/review.md      ← the task definition
  task/code/review/        ← additional context files
    conventions.md         ← checklist
    severity.md            ← rating guide
    plan.yaml              ← structured phases

TaskBundle("code/review") returns (main, bundle, err)
where bundle is map[filename]content of everything in review/.

Agent name maps to lib path:
  core:agent-task-code-review → lib/task/code/review + review/

Converted code/ tasks from YAML plans to markdown task prompts
with optional bundles. Simplifier gets patterns.md bundle.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:48:56 +00:00
Snider
aed8226edd refactor: singular naming + task/code/ namespace
Plurals → singular:
  prompts/ → prompt/
  tasks/ → task/
  flows/ → flow/
  personas/ → persona/

Nested task namespace:
  task/code/review.yaml
  task/code/refactor.yaml
  task/code/dead-code.yaml
  task/code/test-gaps.yaml

Mirrors agent naming: core:agent-task-code-review → task/code/review

API: prompts.Task("code/review"), prompts.Persona("secops/developer")

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:35:39 +00:00
Snider
fe98fccdeb feat: add build flow specs for 9 languages/tools
flows/git.md — commit workflow
flows/go.md — build, vet, test, tidy
flows/php.md — pint, phpstan, pest, audit
flows/ts.md — tsc, eslint, test, build
flows/cpp.md — cmake configure, build, test
flows/py.md — venv, ruff, pytest
flows/docker.md — build, smoke test, compose
flows/npm.md — lint, test, build, publish
flows/release.md — tag, push, artefacts, downstream deps

Each flow is a reminder of the standard build sequence for that stack.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:31:41 +00:00
Snider
433deb1c30 refactor: split templates/ into prompts/, tasks/, flows/
Three distinct concepts in lib/:
  prompts/  — System prompts (PROMPT.md, HOW to work)
  tasks/    — Structured task plans (PLAN.md, WHAT to do)
  flows/    — Multi-phase workflows (orchestration)
  personas/ — Domain/role system prompts (WHO you are)

API updated:
  prompts.Prompt("coding")     — system prompt
  prompts.Task("bug-fix")      — task plan
  prompts.Flow("prod-push-polish") — workflow
  prompts.Template()           — backwards compat (searches both)

templates/ dir reserved for future output templates
(CodeRabbit report formatting, CLI output parsing, etc.)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:26:46 +00:00
Snider
f1e1c08aff refactor: restructure personas into semantic task-based domains
Domain renames:
  engineering/ → code/ (write/review code)
  paid-media/ → ads/ (advertising)
  project-management/ → plan/ (planning, coordination)
  spatial-computing/ → spatial/ (XR, Metal)

New domains:
  secops/ — security operations (from engineering/security-*)
  blockchain/ — chain, consensus, crypto (from specialized/)

Dissolved:
  specialized/ → split into blockchain/, code/, support/, smm/, testing/
  strategy/ → merged into plan/ (playbooks, runbooks, coordination)
  examples/ → removed (reference only, not functional)

secops/ names cleaned: security-developer → developer, security-senior → senior, etc.

13 domains, 111 personas. Path = context, file = lens.
  secops/developer — code-level security
  secops/architect — threat modelling
  secops/devops — infrastructure security
  code/backend-architect — system design
  smm/tiktok-strategist — TikTok content

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:19:50 +00:00
Snider
a1c2ed2376 refactor: move prompt templates from Go strings to embedded markdown
Extract 4 hardcoded templates from prep.go raw strings into
pkg/prompts/lib/templates/ as markdown files:
- coding.md — main coding template with closeout sequence
- conventions.md — convention audit (report only)
- security.md — security review
- verify.md — PR verification
- default.md — fallback

prep.go now calls prompts.Template("coding") instead of
maintaining 120 lines of raw Go string literals.

Backticks now work properly in templates — no more
concatenation hacks for inline code formatting.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:14:39 +00:00
Snider
9f4afb9a15 feat: rewrite CLAUDE.md, add tests for agentic + prompts packages
CLAUDE.md:
- Complete rewrite reflecting current architecture (30 files, 6.5K lines)
- Documents all 33 MCP tools, 7 agent types, dispatch flow
- Removes all references to deleted packages

Tests:
- pkg/agentic: 20 tests covering paths, extractPRNumber, truncate,
  countFindings, parseRetryAfter, resolveHost, baseAgent, validPlanStatus,
  generatePlanID, extractJSONField
- pkg/prompts: 7 tests covering Template, Persona, ListTemplates,
  ListPersonas, prefix duplication check

Fix: rename support/support-responder → support/responder (caught by test)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 22:09:29 +00:00
Snider
73fa4ba6c9 feat: expand personas with cross-domain functional roles
New domain: devops/ (3 personas — security-developer, senior, junior)

Cross-cutting security-developer role now in 7 domains:
  engineering/ — Go/PHP code security, nil pointers, injection
  devops/ — Ansible, Docker, Traefik, CI/CD security
  smm/ — OAuth tokens, platform API keys, account security
  support/ — customer incident investigation, data exposure
  testing/ — security test writing, fuzzing, auth bypass tests
  design/ — XSS, CSRF, CSP, clickjacking, template escaping
  product/ — feature security review, threat models, privacy

Same role name, different domain knowledge. Path = context, file = lens.
16 domains, 116 personas.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 21:42:24 +00:00
Snider
1716122b72 feat: restructure personas — domain as context, role as lens
- marketing/ → smm/ (social media marketing)
- Add smm/security-developer (OAuth, API keys, account security)
- Add smm/security-secops (account compromise, brand hijacking, incidents)

Pattern: same role name in different domains produces domain-specific expertise.
  engineering/security-developer → reviews Go/PHP code
  smm/security-developer → reviews social media API integrations

14 domains, 95 personas. Path has semantic meaning.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 21:39:16 +00:00
Snider
d9cd7f94b1 feat: split security persona into functional roles
engineering/security-* family:
- security-senior: full-stack security (was security-engineer)
- security-developer: code-level review, OWASP, fixes code
- security-devops: Docker, Traefik, Ansible, CI/CD, TLS
- security-secops: incident response, monitoring, forensics
- security-architect: threat modelling, STRIDE, trust boundaries
- security-junior: checklist-based scanning, batch convention checks

Each persona is a system prompt attached via dispatch:
  agentic_dispatch persona=engineering/security-developer

Folder = domain, filename = function, template = task type.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 21:27:43 +00:00
Snider
977feb0881 refactor: strip redundant folder prefix from persona filenames
engineering/engineering-security-engineer.md → engineering/security-engineer.md
testing/testing-api-tester.md → testing/api-tester.md
etc. across all 68 persona files.

Path is now: prompts.Persona("engineering/security-engineer")
Folder provides the namespace, filename provides the role.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 21:21:33 +00:00
Snider
1e351f36ec feat: embed prompts into pkg/prompts via go:embed
- Move prompts/ → pkg/prompts/lib/ (112 templates + personas)
- pkg/prompts provides Template(), Persona(), ListTemplates(), ListPersonas()
- prep.go uses embedded prompts instead of filesystem reads
- No external file dependency — prompts compiled into binary
- Remove old prompts/ directory

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 20:49:10 +00:00
Snider
1b4b0bf381 feat: add core:agent-task-code-review and core:agent-task-code-simplifier
Plugin agents for the closeout sequence:
- agent-task-code-review: conventions, security, nil pointers, confidence scoring
- agent-task-code-simplifier: consolidate, deduplicate, flatten, no behaviour change

Namespace: agent-task-code-* (SASE boundary pattern)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 20:43:33 +00:00
Snider
81be4717fe feat: add mandatory closeout sequence to coding template
Dispatched agents must now run a 4-pass polish cycle before committing:
1. Self-review (conventions, nil pointers, hardcoded paths)
2. Build + test (fix failures, add tests for critical paths)
3. Simplify (consolidate, deduplicate, reduce complexity)
4. Final check (build clean → commit)

This captures the review→fix→simplify→re-review flow that produces
polished code. Goal: CodeRabbit finds zero issues on agent output.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 20:03:52 +00:00
Snider
8c1625873c refactor: simplify internals — consolidate, deduplicate, fix bugs
Simplifier pass (-38 lines):
- Consolidate status update branches in spawnAgent (3 → 1 write)
- Remove 6 duplicate defer resp.Body.Close() calls
- Fix nil err reference in non-200 error paths (scan.go, pr.go)
- Remove redundant plansDir() and workspaceRoot() wrappers
- Simplify countRunningByAgent to use baseAgent() helper
- Extract markMerged in verify.go to remove duplication
- Clean imports and remove dead code

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:35:15 +00:00
Snider
e66ea0512b fix: address re-review findings — nil pointer, races, curl, clone error
Important:
- Fix nil pointer dereference on resp.StatusCode when err!=nil (8 sites)
- Replace curl shell-out with net/http in monitor inbox check
- Handle clone failure in prep.go (was silently swallowed)
- Use GitHubOrg() instead of hardcoded "dAppCore"

Medium:
- Fix JSONL append race (read+write → os.OpenFile O_APPEND)
- Remove dead google/mcp/ directory

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:27:44 +00:00
Snider
6d04c893b7 fix: address all code review findings (medium + low)
- os.ReadFile/WriteFile → coreio.Local in monitor and remote packages
- Deduplicate agentName() → shared agentic.AgentName()
- Deduplicate workspaceRoot() → shared agentic.WorkspaceRoot()
- fileExists uses IsFile() instead of reading whole file
- Fix SPDX-Licence → SPDX-License typo
- Remove time.Now import hack
- Fix hardcoded PR #1 in review queue

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:19:04 +00:00
Snider
4832827da7 fix: address code review findings (critical + high)
Critical:
- Fix token leaked in URL query string (getLabelID) — now uses Authorization header
- Fix unchecked type assertion panic in parseMessages — safe toInt() helper

High:
- Remove dead canDispatch() function
- Remove time.Now import hack from mirror.go
- Remove invalid --no-force git flag from mirror.go
- Tidy go.mod (remove unused deps from deleted packages)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:12:06 +00:00
Snider
7248928545 refactor: remove 28K lines of dead/legacy code
Removed:
- pkg/loop/ — superseded by Claude native tool use
- pkg/lifecycle/ — 14K lines, old PHP API polling client
- pkg/jobrunner/ — old CodeRabbit orchestration (rebuilt in verify.go)
- pkg/orchestrator/ — old AgentCI config (replaced by agents.yaml)
- pkg/workspace/ — empty stub
- pkg/plugin/ — empty stub
- cmd/agent/ — old fleet management CLI
- cmd/dispatch/ — old polling dispatcher
- cmd/workspace/ — unused CLI
- cmd/tasks/ — unused CLI
- cmd/taskgit/ — unused CLI

120 files deleted, 28,780 lines removed.
Remaining: 31 Go files, 6,666 lines — cmd/core-agent + pkg/agentic + pkg/brain + pkg/monitor.

All functionality preserved in the new MCP-native architecture.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:06:03 +00:00
Snider
742ca0799f fix: remove all hardcoded machine paths from Go code
- orchestrator: queue dir uses CoreRoot()/queue
- cmd/agent: queue dir resolved by config, not hardcoded
- cmd/workspace: specs path uses ~/Code/specs (no host-uk)
- Zero remaining /home/claude or host-uk references in Go

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 19:00:47 +00:00
Snider
327d78d08f fix: config search uses CoreRoot() — ~/Code/.core/agents.yaml
Config now found at:
1. ~/Code/.core/agents.yaml (shared, portable)
2. ~/Code/core/agent/config/agents.yaml (repo fallback)

Both Cladius and Charon find the same config.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:57:02 +00:00
Snider
8c76f496ed fix: bump marketplace.json to v0.10.0, fix hooks.json structure, remove invalid hooks from plugin.json
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:47:36 +00:00
Snider
7a75a3969d chore: bump plugin to v0.10.0
- Plugin now provides MCP server via mcp.json (local core-agent stdio)
- No manual .mcp.json needed — plugin auto-registers
- Portable paths (CORE_WORKSPACE env var, no hardcoded machine paths)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:41:28 +00:00
Snider
462d5123f9 fix: plugin provides local core-agent MCP (not remote mcp.lthn.sh)
Plugin's mcp.json now uses local "core-agent mcp" via stdio instead of
remote HTTPS. This means installing the plugin auto-registers the MCP
server — no manual .mcp.json needed.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:38:18 +00:00
Snider
06b72136b6 chore: add .mcp.json for Claude Code MCP integration
Uses just "core-agent" (no absolute paths) — works on any machine
where core-agent is on PATH.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:35:29 +00:00
Snider
317be4c53f fix: use CORE_WORKSPACE env var in shell scripts, fallback to ~/Code/.core
Scripts now use ${CORE_WORKSPACE:-$HOME/Code/.core} instead of
hardcoded host-uk path. Works on both Cladius and Charon.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:23:39 +00:00
Snider
e677d15bdd fix: remove hardcoded paths, gitignore binaries
- Add paths.go with WorkspaceRoot(), CoreRoot(), PlansRoot()
- All workspace paths now check CORE_WORKSPACE env var first
- Fallback: ~/Code/.core/workspace (works on any machine)
- Remove committed core-agent and mcp binaries from tracking
- Add .gitignore for compiled binaries

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:13:44 +00:00
Snider
0622982fa7 chore: bump plugin to v0.9.0, update description and keywords
Reflects all capabilities added today:
- Remote dispatch (Charon HTTP daemon)
- Verify+merge pipeline with rebase retry
- CodeRabbit + Codex review queue
- GitHub mirror sync
- PostToolUse inbox notification hook
- Cross-agent messaging

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 18:04:10 +00:00
Snider
90b03191b2 feat(agent): v0.2.0 — HTTP daemon, remote dispatch, review queue, verify+merge
Major additions:
- core-agent serve: persistent HTTP daemon with PID file, health check, registry
- agentic_dispatch_remote: dispatch tasks to remote agents (Charon) over MCP HTTP
- agentic_status_remote: check remote agent workspace status
- agentic_mirror: sync Forge repos to GitHub mirrors with file count limits
- agentic_review_queue: CodeRabbit/Codex review queue with rate-limit awareness
- verify.go: auto-verify (run tests) + auto-merge + retry with rebase + needs-review label
- monitor sync: checkin API integration for cross-agent repo sync
- PostToolUse inbox notification hook (check-notify.sh)

Dispatch improvements:
- --dangerously-skip-permissions (CLI flag changed)
- proc.CloseStdin() after spawn (Claude CLI stdin pipe fix)
- GOWORK=off in agent env and verify
- Exit code / BLOCKED.md / failure detection
- Monitor poke for instant notifications

New agent types:
- coderabbit: CodeRabbit CLI review (--plain --base)
- codex:review: OpenAI Codex review mode

Integrations:
- CODEX.md: OpenAI Codex conventions file
- Gemini extension: points at core-agent MCP (not Node server)
- Codex config: core-agent MCP server added
- GitHub webhook handler + CodeRabbit KPI tables (PHP)
- Forgejo provider for uptelligence webhooks
- Agent checkin endpoint for repo sync

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 17:45:04 +00:00
Snider
b95a367d9d feat: add check-inbox.sh with marker-based change detection
Only outputs when there are new messages since last check.
Uses .inbox-last-id marker file to track highest seen message ID.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 06:17:29 +00:00
Snider
c639a848c2 fix: PID polling fallback for process completion detection
proc.Wait() hangs when Claude Code's child processes inherit pipes.
Added PID polling every 5s — when the main process is dead (Signal(0)
fails), force completion even if pipes are still open.

Fixes: empty agent logs, missing completion events, stuck queue drain.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 05:56:22 +00:00
Snider
ccfd68ca1a feat: fire resource subscription notification on agent status change
Monitor now calls Server.ResourceUpdated() for status://agents when
agent completions or inbox changes are detected. Clients subscribed
to this resource get notified automatically via MCP protocol.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 05:52:12 +00:00
Snider
99733bd83e chore: bump plugin to v0.7.0
New since v0.6.0:
- Monitor subsystem (background ecosystem watcher via MCP session)
- agentic_watch tool (progress notifications)
- Auto PR creation on agent completion
- Sandbox enforcement (3-layer)
- Completion events (events.jsonl)
- status://agents MCP resource
- go-process init for dispatch

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 05:45:01 +00:00
Snider
0ca253fe68 feat: add monitor subsystem — background ecosystem watcher
Runs every 2 minutes while MCP server is active:
- Checks for newly completed agent workspaces
- Checks inbox for unread messages
- Pushes notifications via ServerSession.Log() to connected clients

Also registers status://agents resource for on-demand workspace status.

The MCP connection is bidirectional — monitor uses it to actively
notify rather than waiting for tool calls.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 05:37:57 +00:00
Snider
132ade1765 feat: add agentic_watch tool with MCP progress notifications
Watches running/queued agent workspaces until all complete.
Sends progress notifications via MCP protocol as each agent finishes.
Returns summary with completed/failed counts and PR URLs.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 04:31:19 +00:00
Snider
71decc26b2 feat: auto-create PR on Forge after agent completion
When a dispatched agent completes with commits:
1. Branch name threaded through PrepOutput → status.json
2. Completion goroutine pushes branch to forge
3. Auto-creates PR via Forge API with task description
4. PR URL stored in status.json for review

Agents now create PRs instead of committing to main. Combined
with sandbox restrictions, this closes the loop on controlled
agent contributions.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 04:19:48 +00:00
Snider
da1c45b4df feat: sandbox dispatched agents to workspace directory
Three-layer sandboxing:
1. --append-system-prompt with SANDBOX boundary instructions
2. PROMPT.md templates include SANDBOX BOUNDARY (HARD LIMIT) section
3. Agent starts in src/ with only cloned repo visible

Agents are instructed to reject absolute paths, cd .., and any
file operations outside the repository. Violations cause work rejection.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 04:12:54 +00:00
Snider
67705e2be9 fix: remove SessionStart completion check, keep idle_prompt only
Completion notifications should fire while running (idle), not on restart.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 03:47:42 +00:00
Snider
cb56cfb270 fix: initialise go-process for dispatch, fix Notification hook matcher
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 03:22:34 +00:00