Major architectural refactoring to separate server and UI concerns: Architecture Changes: - Split into anvilsrv (server daemon) and Assist (Acme client) - Removed UI coupling from server (OnAliasChange, WinID tracking) - Server runs as background daemon, client reconnects as needed - Client auto-starts server if not running Server (anvilsrv): - Add daemon management: start/stop/status commands - Daemonize by default (fgstart for foreground/debug mode) - Proper PID file handling in $NAMESPACE (not /tmp) - Graceful shutdown with SIGTERM handling - Duplicate start prevention with stale PID detection Client (Assist): - Auto-start anvilsrv if not running - Fixed plan9 package imports (OWRITE/OREAD constants) - Removed unused context import Security Fixes: - Move PID file from /tmp to $NAMESPACE (prevent symlink attacks) - Add path validation in session creation: - Clean path traversal (/../../../etc → /etc) - Verify directory exists before creating session - Ensure absolute paths - Reject non-directory paths - Add SECURITY.md documenting 9P socket risks Service Integration: - Add systemd service files (system, user, template) - Add runit service files (run, finish) - Add service documentation and installation instructions Build & Testing: - Both binaries build successfully - All daemon operations verified (start/stop/status/daemonize) - Path validation tested and working - Auto-start functionality verified - Add DevReviewQA workflow script 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| runit | ||
| systemd | ||
| README.md | ||
README.md
AnviLLM Service Management
This directory contains service management scripts for running anvilsrv as a system service.
Available Init Systems
systemd (Most Common)
For modern Linux distributions using systemd (Ubuntu, Fedora, Arch, Debian, etc.).
See systemd/README.md for installation instructions.
Quick Start (User Service):
mkdir -p ~/.config/systemd/user
cp services/systemd/anvilsrv-user.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now anvilsrv-user.service
runit
For systems using runit (Void Linux, some custom setups).
See runit/README.md for installation instructions.
Quick Start:
sudo cp -r services/runit /etc/sv/anvilsrv
sudo chmod +x /etc/sv/anvilsrv/run /etc/sv/anvilsrv/finish
sudo ln -s /etc/sv/anvilsrv /var/service/anvilsrv
Manual Management (No Init System)
If you don't want to use an init system, you can manage anvilsrv manually:
# Start the server
anvilsrv start
# Check status
anvilsrv status
# Stop the server
anvilsrv stop
You can also add this to your shell startup file (.profile, .bashrc, etc.):
# Auto-start anvilsrv if not running
anvilsrv status 2>/dev/null || anvilsrv start
Choosing an Init System
- systemd: Use if your distribution uses systemd (most modern Linux distributions)
- runit: Use if you're on Void Linux or specifically use runit
- manual: Use if you want full control or are testing/developing
Troubleshooting
Check if anvilsrv is Running
anvilsrv status
Check 9P Socket
# Should show the socket file
ls -la /tmp/ns.$USER/agent
# Test connection
echo "list" | 9p read agent/list
View Logs
systemd:
journalctl --user -u anvilsrv-user -f
runit:
sudo svlogd /var/log/anvilsrv
manual: Check stderr output (anvilsrv logs to stderr/stdout by default).