Commit Graph

75 Commits

Author SHA1 Message Date
Levi Neely 88a7a3fbff Replace Bot Templates section with anvilspawn documentation 2026-03-19 00:00:05 +01:00
Levi Neely 6cde9090c1 Update 9P filesystem tree: complete beads API (ctl commands, query endpoints, per-bead properties) 2026-03-18 23:57:49 +01:00
Levi Neely 4cf346934d Fix docs: tools path is anvillm/tools, not anvillm/tools/anvilmcp 2026-03-18 23:40:16 +01:00
Levi Neely c5b96bcac1 Update docs: execute_code is the only MCP tool
- Rewrite code execution docs to reflect single-tool model
- Remove obsolete migration guide and testing doc
- Update README, kiro-cli README, BEADS.md MCP sections
- Remove all 'direct tool calls' / 'legacy tools' framing
- Update sandbox-config diagram: roles→sandbox, override→merge
- Add 9P security mitigation: run locally on trusted network
- Regenerate sandbox-config.svg
2026-03-18 23:39:23 +01:00
Levi Neely c5e95eb1ea Remove cmd/anvilweb, cmd/anvilwebgw, cmd/anvillm, and elisp/
Drop legacy frontend proof-of-concepts (TUI, web UI, HTTP gateway,
Emacs major mode) to focus on the core. Assist remains as the primary
frontend; any 9P-speaking program can serve as a frontend.

Update README, mkfile, .gitignore, and architecture/client-interactions
diagrams accordingly.
2026-03-18 23:20:54 +01:00
Levi Neely d3e2a543cb Update remaining read_inbox references to check_inbox 2026-03-18 08:20:41 +01:00
Levi Neely 2a1d620a31 rename 9P endpoint from 'agent' to 'anvillm'
- Update socket path, MountService calls, path prefixes
- Update mcptools, scripts, docs, diagrams, services
- Fix idleSince initialization at session creation
2026-03-12 12:13:40 +01:00
Levi Neely 6475b9f216 Add maildir messaging support for agent communication 2026-03-05 14:33:47 +01:00
Levi Neely 2111f19e9f Add zap logging to ~/.config/anvillm/logs with panic recovery
- Created internal/logging package with zap logger
- Added panic recovery to anvilsrv main loop, monitor goroutine, and mail processing
- Replaced log.Printf/Fatal with zap in debug, p9, tmux packages
- Fixed beads race condition: clear assignee before closing issue
- All errors and crashes now logged to ~/.config/anvillm/logs
2026-02-27 11:46:49 +01:00
Levi Neely 5f8c41b576
Implement MCP code execution pattern (#20)
* Implement MCP code execution pattern

- Add execute_code tool for bash execution in landrun sandbox
- Remove redundant MCP tools (read_inbox, send_message, etc.)
- Implement dynamic tool discovery from ~/.config/anvillm/mcptools/
- Add workspace isolation (~/.cache/anvillm/exec)
- Add security: output limits, concurrency limits, validation, path traversal protection
- Update bot templates (Conductor, Taskmaster) with bash examples
- Update anvillm-communication skill to use execute_code pattern
- Create comprehensive documentation (user guide, migration guide, security guide)
- Add test suite for validation and limitedWriter
- Fix landrun flags: --rox for executables, --env for AGENT_ID passthrough
- Network blocked by default (no --connect-tcp or --unrestricted-network)

Token reduction: 80-99% via progressive tool discovery and subprocess data processing

* Fix code review issues in MCP code execution pattern

- Security: Change security.jsonl permissions from 0644 to 0600
- Bug: Fix limitedWriter to return correct byte count for io.Copy
- Bug: Fix tool schema inconsistency (execute_code requires only 'code')
- Performance: Move whitespace regex to package-level var
- Security: Improve validateCode with regex patterns and normalization
- Cleanup: Remove dead code from main.go and tools.go
- Cleanup: Rewrite shell scripts to use jq for safe JSON construction
- Docs: Fix duplicate sections and JavaScript syntax in bash examples

* Improve code validation security patterns

- Fix rm -rf bypass: allow optional whitespace before /
- Expand rm -rf to block sensitive paths (/home, /var, /usr, etc.)
- Block all network protocols in curl/wget (not just http/https)
- Add test for regex pattern compilation
- Add test cases for tabs, sensitive paths, ftp/file protocols

* Harden shell scripts and improve rate limiting

---------

Co-authored-by: Levi Neely <lkn@darkstar.example.net>
Co-authored-by: Levi Neely <lneely@pascom.net>
2026-02-26 14:02:54 +01:00
Levi Neely 8fccaa8977 Make autonomous workflow diagram full-width 2026-02-22 12:25:21 +01:00
Levi Neely 36e5de7e3c Replace autonomous workflow with sequence diagram
- Shows full workflow: User → Taskmaster → Beads → Conductor → Bots
- Illustrates dependency management and completion notification
- Increased width to 600px for better readability
- Updated cache-busting to v=3
2026-02-22 12:24:01 +01:00
Levi Neely c5c07a3840 Increase automation workflow diagram to 300px 2026-02-22 12:20:28 +01:00
Levi Neely af83bc26df Rename to Autonomous Workflows and reduce diagram to 250px 2026-02-22 12:19:46 +01:00
Levi Neely b99954c214 Center all images and reduce sandbox config to 250px
- All diagrams now centered with <p align="center">
- Sandbox config reduced from 400px to 250px
2026-02-22 12:18:29 +01:00
Levi Neely 52be2d56c4 Remove leftover ASCII diagram after crash recovery SVG 2026-02-22 12:16:56 +01:00
Levi Neely b0bfc2d777 Scale down smaller diagrams
- sandbox-config: 400px
- session-lifecycle: 500px
- crash-recovery: 500px
- client-interactions: 400px
- events: 400px
- Keeps larger diagrams (architecture, mailbox, automation) at full width
2026-02-22 12:15:38 +01:00
Levi Neely cf83b07b04 Add cache-busting to SVG URLs and use default theme
- Add ?v=2 query parameter to all SVG URLs to bypass GitHub cache
- Regenerate with default theme as requested
2026-02-22 12:13:54 +01:00
Levi Neely 41acc805d1 Replace ASCII diagrams with SVG images
- Create Mermaid source files for all diagrams
- Generate SVGs using mermaid-cli
- Replace all ASCII art with embedded SVG images
- Diagrams: architecture, sandbox-config, session-lifecycle, crash-recovery, client-interactions, mailbox-flow, automation-workflow, events
- Fixes alignment issues with ASCII box drawing characters
2026-02-22 12:08:12 +01:00
Levi Neely d3267d8771 Add visual diagrams throughout documentation
- Architecture: clients → core services → backends (with ollie → Ollama)
- Sandbox config: layered YAML override hierarchy
- Mailbox flow: user ↔ agent A ↔ agent B cross-backend messaging
- Automation workflow: Taskmaster → beads → Conductor → parallel agents
- 9P filesystem: client interaction patterns
- Session lifecycle: idle ↔ running cycle via CLI hooks
- Crash recovery: state preservation and auto-resume
- Events: multiple consumers reading event stream
- Add 9fans.net/go reference
- Add github.com/simonfxr/pubsub reference for event bus
2026-02-22 11:56:20 +01:00
Levi Neely ee6f50f50c Tech edit README: improve clarity, concision, and flow
- Streamline opening sections (tagline, architecture, 9P rationale)
- Add anvilwebgw to core components
- Replace Workflows section with Bot Templates
- Remove obsolete bot templates (keep only Taskmaster and Conductor)
- Consolidate sandboxing documentation
- Improve formatting and readability throughout
- Correct MCP description (discover agents vs control sessions)
2026-02-22 11:28:37 +01:00
Levi Neely f8083a84c0 Add automation documentation
- Add Automating Development section to README
- Create EVENTS.md documenting event stream system
- Document Taskmaster and Conductor workflow
2026-02-22 10:57:37 +01:00
Levi Neely 8ecbbbd678 Add bot templates and orchestration system
- Add bot-templates/ directory with specialized agent templates
- Update README.md with orchestration documentation
- Update mkfile with new build targets
- Remove old workflow files (DevReview, DevReviewQA, Docs, Planning, Research, Taskmaster)
2026-02-22 10:45:03 +01:00
Levi Neely 9d0e9b7e42 Add ollama backend support
- Add ollama backend implementation using mcphost and ollie
- Add ollama.yaml sandbox configuration
- Update README with ollama installation and usage instructions
- Add ollama command to Assist, anvilmcp, and anvilsrv
- Add ANVILLM_OLLAMA_MODEL environment variable
- Hardcode ollama-mcp.json config path to ~/.config/anvillm/ollama-mcp.json
2026-02-21 21:03:55 +01:00
Levi Neely 9f544be1dc update README 2026-02-21 07:45:25 +01:00
Levi Neely e0e5a1ac04 Document generic environment variable expansion in templates
Any environment variable can be used as {VARNAME} in sandbox configs
Listed common ones (CWD, HOME, TMPDIR, XDG_*) are examples with defaults
Added note explaining the general pattern
2026-02-20 00:29:48 +01:00
Levi Neely d8907e1029 Fix KIRO_API_KEY documentation
Optional if using 'kiro-cli login' (OAuth flow)
Same pattern as ANTHROPIC_API_KEY
2026-02-20 00:28:05 +01:00
Levi Neely 1c883b6a18 Fix ANTHROPIC_API_KEY documentation
Not required if using 'claude /login' (OAuth flow)
Only needed for non-interactive API key authentication
2026-02-20 00:27:41 +01:00
Levi Neely ebeac0da6a Add 'Why 9P?' section
Explains design rationale: orchestration as file manipulation
Benefits: simplicity, universal access, composability
Placement: after Architecture, before Requirements

Addresses the 'why this obscure protocol' question upfront
2026-02-20 00:25:27 +01:00
Levi Neely 536b358006 Sort session list by creation time (newest first)
Backend changes:
- Add CreatedAt() to Session interface
- Implement CreatedAt() in tmux.Session (field already existed)
- Sort Manager.List() by creation time descending

Benefits:
- Deterministic ordering (no more random map iteration)
- Newest sessions appear first (most useful)
- All clients benefit immediately
- head -1 now reliably gets most recent session

README:
- Update example to use head -1 for newest session
- Document that list is sorted newest first
2026-02-19 23:51:10 +01:00
Levi Neely 17ad0fcafd Fix example: list order is non-deterministic
- Remove tail -1 hack (doesn't work - map iteration is random)
- Show listing sessions first with output format
- Document that order is non-deterministic
- Use manual ID selection (realistic workflow)

The session list iterates over a Go map, which has non-deterministic
order. Cannot rely on tail/head to get 'last created' session.
2026-02-19 23:48:16 +01:00
Levi Neely 4a9179f6e2 Fix filesystem tree and example: use mailbox system
Filesystem tree fixes:
- Remove non-existent 'in' and 'out' files
- Add missing 'role', 'tasks', 'tmux' files

Example fixes:
- Use mailbox system for prompts (user/mail with JSON message)
- Show reading response from user/inbox
- Correct workflow: prompts are messages, not direct writes

The old 'in/out' interface no longer exists - all communication
is via the mailbox system
2026-02-19 23:46:08 +01:00
Levi Neely 79bc7bf724 Fix 9P filesystem example
- Rename 'Example' to 'Basic Session Example' (more descriptive)
- Fix workflow: get actual session ID from list (not hardcoded)
- Add comments explaining each step
- Show both 'running' and 'idle' as possible states

Previous example used hardcoded ID that wouldn't exist
2026-02-19 23:44:44 +01:00
Levi Neely d07315a772 Reorganize README for logical flow
New section order:
1. Architecture/Requirements/Installation/Usage (getting started)
2. Configuration (env vars, templates) - before backends
3. Backends & Sandboxing (references Configuration templates)
4. 9P Filesystem (understand backend first, then filesystem)
5. Workflows (uses 9P concepts)
6. MCP Integration (alternative integration method)
7. Troubleshooting (end)

Improves flow: config before use, concepts before advanced features
2026-02-19 23:42:04 +01:00
Levi Neely 9fbcf8de51 Document all configurable options
Add Configuration section with:
- Environment variables table (NAMESPACE, ANVILLM_*, API keys)
- Sandbox config templates table (CWD, HOME, TMPDIR, XDG_*)
- Reference from Backends section
- Remove redundant debug/terminal note from Troubleshooting

All behavior-changing environment variables now documented
2026-02-19 23:39:57 +01:00
Levi Neely 24e30baa28 Fix content contradictions
- Fix mailbox filesystem: add outbox, completed, mail (was missing)
- Clarify 'Archive' command maps to 'completed' directory
- Fix mailbox example: use 'completed' not 'archive'
- Remove non-existent 'Log' command from Acme tag and table
- Add missing 'Get' command to Acme table
- Fix backends description: sandboxed with network (not 'full permissions')
- Reorder Acme commands table for clarity
2026-02-19 23:34:13 +01:00
Levi Neely ff4dcf4692 Internal consistency pass
- Remove duplicate Namespaces line
- Standardize separator style: em dash (—) throughout
- Remove trailing periods from standalone statements
- Merge Acme tag and interaction notes inline
- Reorder Emacs keys to match TUI order (help before quit)
- 5 lines removed (consolidation)
2026-02-19 23:30:59 +01:00
Levi Neely 45155650ce Add MCP integration section
- Document anvilmcp MCP server
- Installation command
- List available tools
- Explain use case (Claude Desktop, Cline integration)
2026-02-19 23:27:21 +01:00
Levi Neely d05ebac197 Final editing pass: maximum condensation
- Ultra-condense architecture to 3 lines
- Merge requirements into single line
- Flatten service integration commands
- Condense all clients into single-line descriptions
- Compress Acme commands table
- Remove obvious statements (path validation)
- Merge events & mailbox into single code block
- Ultra-condense backends/sandboxing/config/kernel/self-healing
- Compress workflows to essentials
- 118 lines removed (50% reduction from previous)
- Total: 322 lines removed from original (63% reduction overall)
2026-02-19 23:25:26 +01:00
Levi Neely 8ea62fd0fc Update README: document layered sandbox configuration
- Replace single sandbox.yaml with layered system
- Document: global.yaml → backends/ → roles/ → tasks/
- Note default role (roles/default.yaml) when none specified
- Add tip: make default.yaml permissive for quick starts
- Update troubleshooting reference
2026-02-19 23:23:03 +01:00
Levi Neely 751bac6543 Second editing pass: aggressive condensation
- Flatten service integration into single block
- Consolidate all client sections (TUI/Emacs/web/Acme) into compact format
- Merge beads commands into single code block
- Combine events & mailbox into one section
- Merge backends, self-healing, sandboxing into unified section
- Condense workflows: merge skills, examples, patterns
- Tighten troubleshooting table
- 126 lines removed (38% reduction from previous)
2026-02-19 23:20:34 +01:00
Levi Neely 2b101355e9 Edit README for clarity and concision
- Tighten architecture, requirements, and usage sections
- Condense UI sections (TUI, Emacs, web, Acme) - compact key lists
- Streamline 9P filesystem, beads, events, mailbox sections
- Condense workflow examples and self-healing explanation
- Remove redundant statements and obvious details
- 78 lines removed (35% reduction)
2026-02-19 23:17:52 +01:00
Levi Neely 8e421ead7d Fix outdated README: remove Sandbox command, add Inbox/Archive, update config instructions 2026-02-19 23:12:21 +01:00
Levi Neely 1d0aa9d091 Update README: add beads, events, mailbox, skills, and anvilmcp 2026-02-19 23:10:36 +01:00
Levi Neely ff2bd372c1 improve send message api 2026-02-17 18:20:01 +01:00
Levi Neely b66e9822a2 Fix attach for new tmux session naming and clean up emacs prompts
Front-ends were constructing anvillm-{backend} but backend now uses
anvillm-{namespace}. Updated Assist and emacs to read tmux target from
the tmux file instead of constructing it from backend name.

Also removed broken direct prompt functionality from emacs (P and M-P
keybindings that used /in file directly).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-17 15:32:48 +01:00
Levi Neely 9ff6262d62 Rename peer-bot skill to anvillm-communication
- Rename skill to reflect broader scope (agent-to-agent, agent-to-user)
- Add AnviLLM references to all workflow agent contexts
- Update README example to use mailbox pattern
- Fix heredoc delimiter conflict (EOF -> MSGEOF) in injected prompt
2026-02-16 15:35:46 +01:00
Levi Neely b47f6ba97d Add Log command to Acme interface
Opens streaming log window that displays session chat history.
Window is named /AnviLLM/Log.{session-id-or-alias} and streams
log data continuously, marking window as clean after each write.
2026-02-15 12:09:14 +01:00
Levi Neely ab5f9705cd Remove redundant Refresh command from Acme interface
Get command now simply reads from agent/list since anvilsrv
handles session state management. Removed client-side PID
checking and refresh logic.
2026-02-15 11:47:11 +01:00
Levi Neely ea32a6a17f
Update project description in README.md 2026-02-14 18:19:09 +01:00