Commit graph

83 commits

Author SHA1 Message Date
Snider
5f83cf902a fix: messaging routes use auth.api, fix InboxInput schema
- Remove messaging routes from core/agent (conflict with AgentApiAuth)
- Routes now only in host app with auth.api middleware (same as brain)
- Add Agent field to InboxInput so MCP schema isn't empty

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 15:11:10 +00:00
Snider
7b8b93b4b1 feat: merge review/verify into core plugin, add messaging MCP tools
Consolidate all commands under /core: prefix — review and verify plugins
merged into core. Adds agent_send, agent_inbox, agent_conversation as
Laravel MCP tools so messaging works through the HTTP server.

- 15 commands all under /core: (was split across 3 plugins)
- Messaging tools registered in Boot::onMcpTools()
- Hooks merged (PostToolUse for PR create, PreToolUse for git push)
- Plugin bumped to v0.6.0

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 14:52:01 +00:00
Snider
ec6b07dea2 chore: bump plugin to v0.5.0 (agent messaging)
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 14:17:21 +00:00
Snider
37f6d61368 feat: agent messaging — direct chronological messages between agents
New: agent_send, agent_inbox, agent_conversation MCP tools.
API: /v1/messages/send, /v1/messages/inbox, /v1/messages/conversation/{agent}
Model: AgentMessage with inbox, unread, conversation scopes.

Separate channel from semantic brain search. Messages are chronological,
not vector-searched. Agents can now have direct conversations.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 14:03:36 +00:00
Snider
85dd0555ac fix(brain): shared brain — don't filter by agent_id on recall
Was forcing agent isolation. Now all agents see all memories by default.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 11:50:20 +00:00
Snider
5fbaf4f211 fix(brain): use hostname-based agent_id instead of hardcoded cladius
Charon gets agent_id 'charon', Cladius gets 'cladius'.
Override with AGENT_NAME env var.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 11:24:59 +00:00
Snider
2ea50959f2 refactor: move brain + agentic packages into core/agent, use core/cli
Brain and agentic subsystems now live in core/agent/pkg/ instead of
core/mcp/pkg/mcp/. core-agent binary uses core/cli for proper command
framework. Usage: core-agent mcp

One repo, one clone, everything works.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 11:10:33 +00:00
Snider
84e2b62beb feat: core-agent MCP binary using core/mcp subsystems
Replaces old mcp-go based server with core/mcp (brain + agentic).
Single binary: go install ./cmd/core-agent/
Provides: brain_recall, brain_remember, brain_forget, agentic_dispatch,
agentic_status, agentic_resume, agentic_scan, agentic_create_pr, etc.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 10:58:25 +00:00
Snider
0f12156104 docs: Charon onboarding guide — ecosystem changes March 2026
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 09:04:28 +00:00
Snider
e359522c97 feat(issues): add epic type
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 08:36:25 +00:00
Snider
a389388b9d feat(ui): core-agent-panel Lit custom element
Dashboard showing issues + sprint progress. Works in:
- core/ide (Wails desktop via provider system)
- lthn.sh (Laravel web via Blade component)
- Standalone browser (index.html)

Auto-refreshes every 30s. Accepts api-url and api-key attributes.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 08:16:30 +00:00
Snider
d1537879b3 fix: add keep_alive to local-agent.sh — unloads model after 5m idle
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 07:48:42 +00:00
Snider
796eb83204 feat: add local-agent.sh wrapper + local concurrency config
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 07:35:34 +00:00
Snider
d659f1c2c9 chore: reduce gemini concurrency to 1 (free tier quota)
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 06:36:28 +00:00
Snider
0b8d7b13ed fix(issues): use workspace_id from middleware, not workspace object
AgentApiAuth middleware sets workspace_id attribute, not workspace.
Controllers were trying to read ->id on null.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 06:16:29 +00:00
Snider
12a22aa892 test(issues): phase 5 — feature tests for Issue and Sprint models and actions
IssueTest covers: model CRUD, status transitions, slug generation,
sprint association, comments, label management, scopes, MCP context,
and all Issue Action classes with validation.
SprintTest covers: model lifecycle, progress calculation, scopes,
MCP context, and all Sprint Action classes with validation.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 06:02:08 +00:00
Snider
5a0b126f51 feat(issues): phase 3 — Actions and API controllers for issues and sprints
Issue Actions: CreateIssue, GetIssue, ListIssues, UpdateIssue,
ArchiveIssue, AddIssueComment with full validation and workspace scoping.
Sprint Actions: CreateSprint, GetSprint, ListSprints, UpdateSprint,
ArchiveSprint with status lifecycle management.
IssueController: REST endpoints with filtering by status, type,
priority, sprint, and label. Comment sub-resource endpoints.
SprintController: REST endpoints with progress tracking.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 06:02:08 +00:00
Snider
225b0b4812 feat(issues): phase 2 — migration, models, routes for issue tracker
Add Issue, Sprint, IssueComment models with workspace scoping,
soft deletes, activity logging, and MCP context support.
Migration creates issues, sprints, and issue_comments tables.
API routes registered with read/write permission scopes.
Controller stubs for IssueController and SprintController.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 06:02:08 +00:00
Snider
54e9fe0b61 chore: bump core plugin to v0.4.0 (hook cleanup)
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 05:42:25 +00:00
Snider
88e5fc6f49 refactor(plugin): remove restrictive hooks, clean up orphaned scripts
Removed:
- prefer-core.sh: blocked raw go/php commands unnecessarily
- post-commit-check.sh: noisy warnings after every commit
- block-docs.sh: blocked writing specs and RFCs
- capture-context.sh, extract-actionables.sh, pr-created.sh,
  suggest-compact.sh: orphaned scripts not referenced by any hook

Kept:
- go-format.sh, php-format.sh: auto-format after edits (helpful)
- check-debug.sh: warns about dd()/fmt.Print* (lightweight)
- session-start.sh, pre-compact.sh, session-save.sh: essential

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 05:37:52 +00:00
Snider
cce41faa39 fix(plugin): remove block-docs hook — was blocking specs and RFCs
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 05:32:21 +00:00
Snider
670e4c9a10 feat(templates): add 5 audit templates for self-healing codebase
New scan templates:
- dependency-audit: find code rolling its own vs using framework
- dead-code: unreachable functions, unused exports, orphaned files
- test-gaps: untested functions, missing error path coverage
- api-consistency: endpoint naming, response shapes, error formats
- doc-sync: documentation vs code drift

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 18:33:52 +00:00
Snider
e6dbce3a78 feat: rate config for quota-aware scheduling — gemini burst/sustained modes
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 17:56:04 +00:00
Snider
e77140a58f feat: per-agent concurrency — claude: 1, gemini: 3, codex: 1
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 17:33:26 +00:00
Snider
73212624a3 fix(plugin): update marketplace listing code → core, bump to v0.3.0
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 17:11:09 +00:00
Snider
86040da16a chore(plugin): bump version to 0.3.0 for core/ rename
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 17:07:47 +00:00
Snider
fd7be94b2c fix(plugin): rename plugin from code → core for /core: namespace
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 17:03:58 +00:00
Snider
afbc915db3 rename: claude/code → claude/core for /core: command namespace
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:59:01 +00:00
Snider
4373af173b fix(plugin): use bare command names — plugin adds code: prefix automatically
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:58:23 +00:00
Snider
4d43b4c9bf fix(plugin): restore core: prefix on commands
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:54:53 +00:00
Snider
03b77bd9db fix(plugin): drop core: prefix — commands use code: namespace from dir
Plugin commands derive namespace from directory (claude/code/) not
the name field. Commands now: /code:dispatch, /code:status, /code:recall,
/code:review, /code:sweep, /code:scan.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:51:40 +00:00
Snider
290a582656 feat(plugin): add review and sweep commands, update dispatch with persona
New commands:
- /core:review — review agent workspace output, diff, merge options
- /core:sweep — batch dispatch audit across all Go repos

Updated /core:dispatch with persona argument support.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:45:39 +00:00
Snider
99e8456c57 feat: add agents.yaml config for dispatch concurrency control
max_concurrent: 2 limits parallel agent processes.
Agent identities: cladius (dispatch/review), athena (worker),
charon (worker/review, inactive), clotho (worker, inactive).

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:03:21 +00:00
Snider
f0cb5dd2bd chore: update dependencies
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 15:43:31 +00:00
Snider
3ac81d47cb chore: sync go.mod dependencies
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 15:28:58 +00:00
Snider
4c0c5f6572 chore: update GEMINI.md
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 15:10:57 +00:00
Snider
d3bbda3698 fix(plugin): prefix commands with core: namespace to avoid clashes
/dispatch → /core:dispatch, /status → /core:status, etc.
Prevents collision with built-in Claude commands.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 14:50:35 +00:00
Snider
6045805dfc feat(plugin): add dispatch, status, recall, scan commands
New slash commands for the agentic system:
- /dispatch — dispatch subagent to sandboxed workspace
- /status — show workspace status (running/blocked/completed)
- /recall — search OpenBrain memories
- /scan — find actionable Forge issues

Fix MCP URL: api.lthn.sh/mcp → mcp.lthn.sh (subdomain routing).

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 14:47:17 +00:00
Snider
7da0294100 refactor: restructure agents → prompts/personas, add plan templates
Move agent persona definitions from agents/ to prompts/personas/.
Add plan templates (bug-fix, code-review, feature-port, new-feature,
refactor) from the PHP PlanTemplateService into prompts/templates/.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 13:55:25 +00:00
Snider
9df5ed10f6 feat(docker): local development stack for community onboarding
Multistage Dockerfile (FrankenPHP + Octane + Horizon + Reverb) with
docker-compose wiring 6 services: app, mariadb, qdrant, ollama, redis,
traefik. All data mounts to .core/vm/mnt/{config,data,log}. Traefik
routes *.lthn.sh with self-signed TLS. Setup script handles first-run
bootstrap including cert generation and embedding model pull.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 13:15:05 +00:00
Snider
9f2253cd9b fix(brain): improve session-start recall queries with type filters
Tuned OpenBrain recall queries to use type-filtered searches (decision,
plan, convention) instead of generic keyword matching. Increased content
truncation from 300 to 600 chars. Added roadmap/priorities query.
Renamed MCP server from openbrain to core in mcp.json.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 13:14:58 +00:00
Snider
b317064c51 chore: add .core/ and .idea/ to .gitignore 2026-03-15 10:17:49 +00:00
Snider
c5c50f310c feat(brain): improve recall quality and ingest deduplication
- Add source field to brain_memories (manual, ingest:claude-md, etc.)
- Pass Qdrant similarity scores through to API response
- Minimum 50-char content length filter during ingest
- Content hash deduplication prevents duplicate memories on re-ingest
- Update VALID_TYPES to include all 13 memory types
- Include score and source in toMcpContext response

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 07:42:38 +00:00
Snider
116fecb0d6 fix: align indirect dependency versions via go work sync
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 13:42:30 +00:00
Snider
3a2bc7c1f5 fix: update stale import paths and dependency versions from extraction
Resolve stale forge.lthn.ai/core/cli v0.1.0 references (tag never existed,
earliest is v0.0.1) and regenerate go.sum via workspace-aware go mod tidy.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 13:38:58 +00:00
Snider
8e63c19137 fix: debounce session-save hook to once per 10 minutes
Prevents flooding OpenBrain with near-identical context memories
during long sessions. Uses per-project timestamp file for debounce.
Also includes recent commits in saved context.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 11:50:49 +00:00
Snider
93415257f3 feat: OpenBrain integration for session hooks
SessionStart: query OpenBrain for recent activity + project context,
inject into Claude's context window on every new session.

Stop: async save session context to OpenBrain when git changes exist.

PreCompact: save working state to OpenBrain before context compaction.

API key read from ~/.claude/brain.key or CORE_BRAIN_KEY env var.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 11:44:04 +00:00
Snider
2e8e071d75 fix: reduce hook false positives
- Allow go mod tidy, go work sync, go get, go run (no core wrapper)
- Only block sed -i on local files (allow via ssh/docker)
- grep -l only blocked when piped to destructive commands
- Remove sed > and awk > blocks (too aggressive)
- check-debug: only flag fmt.Print* not log.Println (go-log is valid)

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 11:39:23 +00:00
Snider
6442cb85ad refactor: update import path from go-config to core/config
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 10:22:39 +00:00
Snider
9071f28eb9 refactor(api): update import path from go-api to core/api
Part of the polyglot merge — forge.lthn.ai/core/go-api is now
forge.lthn.ai/core/api.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 10:10:39 +00:00