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.
anvillm/services
Levi Neely b7a823f120 feat: split monolith into anvilsrv daemon and Assist client
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>
2026-02-14 11:30:57 +01:00
..
runit feat: split monolith into anvilsrv daemon and Assist client 2026-02-14 11:30:57 +01:00
systemd feat: split monolith into anvilsrv daemon and Assist client 2026-02-14 11:30:57 +01:00
README.md feat: split monolith into anvilsrv daemon and Assist client 2026-02-14 11:30:57 +01:00

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).