Skip to content

Commit 4f383e7

Browse files
EightRiceclaude
andcommitted
Add user-friendly daemon with GUI and build system
- Add chevin_daemon.pyw: GUI launcher with status display - Add daemon login/logout API for web app integration - Add user-scoped data directories (~/.chevin/{wallet}/) - Add PyInstaller build configuration - Add GitHub Actions workflow for releases - Update README for public release 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 90f1fd3 commit 4f383e7

22 files changed

+1842
-255
lines changed

.github/workflows/release.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: Build and Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*' # Trigger on version tags like v1.0.0
7+
workflow_dispatch: # Allow manual trigger
8+
9+
jobs:
10+
build-windows:
11+
runs-on: windows-latest
12+
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
- name: Set up Python
18+
uses: actions/setup-python@v5
19+
with:
20+
python-version: '3.12'
21+
22+
- name: Install dependencies
23+
run: |
24+
python -m pip install --upgrade pip
25+
pip install pyinstaller
26+
pip install fastapi uvicorn[standard] httpx pydantic pyyaml rich psutil anthropic claude-agent-sdk
27+
pip install -e .
28+
29+
- name: Build executable
30+
run: |
31+
pyinstaller chevin.spec --clean --noconfirm
32+
33+
- name: Upload artifact
34+
uses: actions/upload-artifact@v4
35+
with:
36+
name: Chevin-Windows
37+
path: dist/Chevin.exe
38+
39+
- name: Create Release
40+
if: startsWith(github.ref, 'refs/tags/')
41+
uses: softprops/action-gh-release@v1
42+
with:
43+
files: dist/Chevin.exe
44+
generate_release_notes: true
45+
env:
46+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ __pycache__/
66
.Python
77
build/
88
develop-eggs/
9-
dist/
109
downloads/
1110
eggs/
1211
.eggs/
@@ -20,6 +19,9 @@ wheels/
2019
.installed.cfg
2120
*.egg
2221

22+
# Build artifacts (keep dist/ for releases)
23+
.build_venv/
24+
2325
# Virtual environments
2426
.venv/
2527
venv/
@@ -53,7 +55,20 @@ oauth_google.json
5355
# OS
5456
.DS_Store
5557
Thumbs.db
58+
nul
5659

5760
# Audio files from voice interface
5861
*.wav
5962
output.wav
63+
64+
# Personal/private folders (not for public repo)
65+
hunt/
66+
legacy/
67+
tools/
68+
standards/
69+
projects/
70+
share.md
71+
share.txt
72+
ai_lines.json
73+
chevin_conversation.log
74+
ANDREI.md

README.md

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,84 @@
1-
# Chevin
1+
# Chevin Daemon
22

3-
Multi-project agent orchestrator built on the Claude Agent SDK.
3+
Multi-Project Agent Orchestrator powered by Claude.
44

5-
## Installation
5+
Chevin is a local daemon that coordinates AI agents across your projects. It connects to the [Sidekick Web App](https://sidekick.autonet.dev) to provide a seamless AI-assisted development experience.
6+
7+
## Quick Start
8+
9+
### Option 1: Download (Recommended)
10+
11+
1. Download `Chevin.exe` from the [latest release](https://github.com/autonet-code/chevin/releases/latest)
12+
2. Double-click to run
13+
3. Open [Sidekick](https://sidekick.autonet.dev) and connect your wallet
14+
15+
### Option 2: Run from Source
616

717
```bash
8-
pip install -e ".[dev]"
18+
# Clone the repo
19+
git clone https://github.com/autonet-code/chevin.git
20+
cd chevin
21+
22+
# Install dependencies
23+
pip install -e .
24+
25+
# Run the daemon
26+
python chevin_daemon.pyw
27+
```
28+
29+
## How It Works
30+
31+
1. **Start the daemon** - Double-click `Chevin.exe` or run `python chevin_daemon.pyw`
32+
2. **Connect via web app** - Open Sidekick and connect your wallet
33+
3. **Work with AI** - The daemon handles all AI interactions locally
34+
35+
The daemon shows a status window:
36+
- **Yellow** = Waiting for login
37+
- **Green** = User logged in, ready to work
38+
39+
## Architecture
40+
41+
```
42+
┌─────────────────────────────────────────┐
43+
│ Sidekick Web App │
44+
│ (sidekick.autonet.dev) │
45+
└──────────────────┬──────────────────────┘
46+
│ WebSocket / HTTP
47+
48+
┌─────────────────────────────────────────┐
49+
│ Chevin Daemon (local) │
50+
│ • REST API on localhost:8420 │
51+
│ • WebSocket for real-time events │
52+
│ • Claude Agent SDK integration │
53+
└─────────────────────────────────────────┘
954
```
1055

11-
## Usage
56+
## API
57+
58+
The daemon exposes a local API at `http://127.0.0.1:8420`:
59+
60+
- `GET /api/health` - Health check
61+
- `GET /api/daemon/status` - Daemon status and current user
62+
- `POST /api/daemon/login` - Claim daemon for a wallet
63+
- `POST /api/daemon/logout` - Release daemon
64+
- `WebSocket /ws` - Real-time events and chat
65+
66+
## Building from Source
67+
68+
To build your own executable:
1269

1370
```bash
14-
chevin
71+
python scripts/build_release.py
1572
```
1673

17-
## Documentation
74+
This creates `dist/Chevin.exe`.
75+
76+
## Requirements
77+
78+
- Windows 10/11 (macOS/Linux support coming)
79+
- Internet connection (for Claude API)
80+
- ANTHROPIC_API_KEY environment variable (or set in Sidekick)
81+
82+
## License
1883

19-
See [CLAUDE.md](CLAUDE.md) for architecture and [ROADMAP.md](ROADMAP.md) for development plan.
84+
MIT

Start Chevin.bat

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@echo off
2+
title Chevin Daemon
3+
cd /d "%~dp0"
4+
pythonw chevin_daemon.pyw

chevin.spec

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# -*- mode: python ; coding: utf-8 -*-
2+
"""
3+
PyInstaller spec file for Chevin Daemon.
4+
5+
Build with: python scripts/build_release.py
6+
(Uses a clean venv to avoid bundling unrelated packages)
7+
8+
This creates a single executable that includes:
9+
- Python runtime
10+
- Only required dependencies (FastAPI, uvicorn, anthropic, etc.)
11+
- The Chevin daemon GUI
12+
"""
13+
14+
import sys
15+
from pathlib import Path
16+
17+
block_cipher = None
18+
19+
# Get the project root
20+
project_root = Path(SPECPATH)
21+
22+
a = Analysis(
23+
['chevin_daemon.pyw'],
24+
pathex=[str(project_root / 'src')],
25+
binaries=[],
26+
datas=[],
27+
hiddenimports=[
28+
# FastAPI/Uvicorn (ASGI server)
29+
'uvicorn.logging',
30+
'uvicorn.loops.auto',
31+
'uvicorn.protocols.http.auto',
32+
'uvicorn.protocols.websockets.auto',
33+
'uvicorn.lifespan.on',
34+
'starlette.routing',
35+
'starlette.middleware.cors',
36+
'anyio._backends._asyncio',
37+
# Networking
38+
'httpcore',
39+
'h11',
40+
'wsproto',
41+
# Chevin core modules
42+
'chevin.core.data_dir',
43+
'chevin.core.registry',
44+
'chevin.agents.orchestrator',
45+
'chevin.agents.onboarding',
46+
'chevin.transports.http',
47+
'chevin.tools.delegate_tool',
48+
'chevin.tools.board_tools',
49+
],
50+
hookspath=[],
51+
hooksconfig={},
52+
runtime_hooks=[],
53+
excludes=[
54+
# Dev tools
55+
'pytest', 'black', 'ruff', 'mypy', 'coverage',
56+
# ML/Data science (definitely not needed)
57+
'torch', 'tensorflow', 'keras', 'sklearn', 'scipy',
58+
'numpy', 'pandas', 'matplotlib', 'seaborn', 'plotly',
59+
'PIL', 'cv2', 'opencv',
60+
# Other heavy packages
61+
'IPython', 'jupyter', 'notebook',
62+
'boto3', 'botocore', 'awscli',
63+
'pygame', 'pyglet',
64+
'numba', 'llvmlite',
65+
'transformers', 'tokenizers', 'huggingface_hub',
66+
# Test frameworks
67+
'nose', 'unittest2',
68+
],
69+
win_no_prefer_redirects=False,
70+
win_private_assemblies=False,
71+
cipher=block_cipher,
72+
noarchive=False,
73+
)
74+
75+
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
76+
77+
exe = EXE(
78+
pyz,
79+
a.scripts,
80+
a.binaries,
81+
a.zipfiles,
82+
a.datas,
83+
[],
84+
name='Chevin',
85+
debug=False,
86+
bootloader_ignore_signals=False,
87+
strip=False,
88+
upx=True, # Compress with UPX if available
89+
upx_exclude=[],
90+
runtime_tmpdir=None,
91+
console=False, # No console window (GUI app)
92+
disable_windowed_traceback=False,
93+
argv_emulation=False,
94+
target_arch=None,
95+
codesign_identity=None,
96+
entitlements_file=None,
97+
icon=None, # TODO: Add icon file: icon='assets/chevin.ico'
98+
)

0 commit comments

Comments
 (0)