AnviLLM was an experimental 9P interface for common CLI-based AI agents. It is no longer actively maintained, but kept for progeny.
This repository has been archived on 2026-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Levi Neely 13e9873ac8 docs: condense README for clarity 2026-02-13 11:18:43 +01:00
internal fix bot-to-bot interaction in claude? 2026-02-13 07:54:06 +01:00
scripts planning workflow 2026-02-13 11:10:40 +01:00
.gitignore cleanup 2026-02-10 22:30:57 +01:00
IDEAS.md ideas: conductor bot and supervisor concepts 2026-02-12 15:31:28 +01:00
LICENSE.md initial docs 2026-02-10 22:57:21 +01:00
README.md docs: condense README for clarity 2026-02-13 11:18:43 +01:00
anvillm-notify Add session context, summary, and bot-to-bot communication support 2026-02-12 14:59:35 +01:00
go.mod basic sandboxing support with landrun, fail fast 2026-02-11 08:32:14 +01:00
go.sum basic sandboxing support with landrun, fail fast 2026-02-11 08:32:14 +01:00
main.go remove Open command, add backends display 2026-02-12 23:19:25 +01:00
mkfile Add anvillm-notify script for session state change notifications 2026-02-11 16:30:57 +01:00

README.md

AnviLLM

Acme-native interface for LLM chat backends. Sessions appear as Acme windows and are exposed via 9P filesystem.

Requirements

Installation

git clone https://github.com/lneely/anvillm
cd anvillm
mk  # installs to $HOME/bin

Usage

Type Assist in Acme and middle-click to open the /AnviLLM/ session manager.

Commands

Main window (/AnviLLM/) tag: Get Attach Kill Alias Context Sandbox

Command Description
Kiro <dir> Start kiro-cli session
Claude <dir> Start Claude session
Kill <id> Terminate session
Attach <id> Open tmux terminal
Alias <id> <name> Name a session
Context <id> Edit context (prepended to prompts)
Sandbox Configure sandboxing

Right-click a session ID to open its prompt window. Select text anywhere and 2-1 chord on a session ID for fire-and-forget prompts.

Prompt window (+Prompt.<id>) tag: Send

Type prompt, click Send.

Notifications

Desktop notifications on session completion via anvillm-notify (starts automatically, requires notify-send).

9P Filesystem

agent/
├── ctl             # "new <backend> <cwd>" creates session
├── list            # id, alias, state, pid, cwd
└── <id>/
    ├── in          # Write prompts
    ├── out         # Read responses
    ├── ctl         # "stop" or "kill"
    ├── state       # idle, running, exited
    ├── context     # Prepended to prompts (r/w)
    ├── alias       # Session name (r/w)
    ├── pid, cwd, winid, backend
    └── err         # (unused)

Example:

echo 'new claude /home/user/project' > agent/ctl
echo 'Hello' > agent/a3f2b9d1/in
9p read agent/a3f2b9d1/state

Backends

Backend Install Notes
Claude npm install -g @anthropic-ai/claude-code Auto-saves to ~/.claude/projects/
Kiro kiro-cli /chat save and /chat load

Both run with full permissions inside the sandbox (--dangerously-skip-permissions, --trust-all-tools).

Adding Backends

Create internal/backends/yourbackend.go, implement CommandHandler and StateInspector interfaces, register in main.go. See existing backends for examples.

Sandboxing

Backends run inside landrun sandboxes. Sandboxing cannot be disabled — it's the only safety layer.

Defaults

  • Filesystem: CWD, /tmp, config dirs (rw); /usr, /lib, /bin (ro+exec)
  • Network: disabled
  • Mode: strict (best_effort: false) — sessions fail if sandbox unavailable

Configuration

Click Sandbox in main window, then Edit to modify ~/.config/anvillm/sandbox.yaml.

Path templates: {CWD}, {HOME}, {TMPDIR}

# Enable network
network:
  enabled: true
  unrestricted: true

# Add paths
filesystem:
  rw:
    - "{CWD}"
    - "{HOME}/.npm"

Changes apply to new sessions only.

Kernel Requirements

Kernel Landlock ABI Features
5.13+ v1 Filesystem
6.7+ v4 Improved FS
6.10+ v5 Network

Best-Effort Mode

Set best_effort: true for graceful degradation on older kernels.

Warning: If landrun is missing or kernel lacks Landlock, sessions run completely unsandboxed. Only enable if you accept this risk.

Troubleshooting

Problem Solution
Session won't start Check stderr; verify which claude or which kiro-cli
Landlock ABI error Set best_effort: true or upgrade kernel
Permission denied Add paths to sandbox config
Orphaned tmux tmux kill-session -t anvillm-claude
9P not working Verify plan9port: 9p ls agent

Terminal for Attach configured in main.go (terminalCommand).