cf20646290
- Fix FileLock: track 'held' state, only release if acquired, suppress ENOENT - Upgrade systemd service: Restart=always (was on-failure, caused 2-day outage), StartLimitBurst, WatchdogSec=120, MemoryMax=512M, KillMode=mixed - Add systemd watchdog: health server self-checks at :8787, notifies sd_notify - Kill orphaned nohup process, restart cleanly via systemd
🤖 Pi Worker
Autonomous agent that runs inside cr-server-new, picks up Asana tasks, and performs automated project improvements using the Pi improved agent.
What It Does
- Asana Task Execution: Polls Asana for tasks in "To Do" or "Pi Worker" sections, executes them using the Pi CLI agent, and reports results back as comments
- Autonomous Improvements: Periodically analyzes the project codebase and makes improvements (code quality, security, docs, testing, performance, type safety)
Architecture
Asana Board ←→ Pi Worker (cr-server-new) ←→ Pi CLI Agent ←→ Codebase
↕
Health Server (:8787)
Setup
- Copy
.env.sampleto.envand fill in credentials bun installbun run dev(local) orbash deploy.sh(production)
Configuration
| Variable | Description | Default |
|---|---|---|
ASANA_ACCESS_TOKEN |
Asana personal access token | Required |
ASANA_PROJECT_GID |
Project to poll (auto-discovered if empty) | Auto |
PI_MODEL |
AI model to use | claude-sonnet-4-6 |
POLL_INTERVAL_SEC |
Asana polling interval | 120 |
IMPROVEMENT_INTERVAL_SEC |
Auto-improvement interval | 3600 |
Asana Board Setup
Create these sections in your Asana project:
- To Do — Tasks for Pi Worker to pick up
- In Progress — Currently being executed
- Done — Completed tasks
- Pi Worker (optional) — Dedicated section for Pi Worker tasks
Health Check
curl http://localhost:8787/health
Logs
Logs are written to ./logs/pi-worker-YYYY-MM-DD.log and stdout.