A personal assistant that runs on exe.dev and keeps its complete execution history.
iPhone -> exe.dev HTTPS -> Go service -> LLM integration
|
+-> SQLite event log
The first slice supports native chat, server-side runs that continue when the app disconnects, streamed run events, and a full trace view.
cmd/conseil: Go API, worker, LLM client, and SQLite event storeios/Conseil: native SwiftUI appios/ConseilCoreTests: decoding and event-stream testsdeploy: systemd unit for exe.dev
Each run records append-only events. The current event types are:
user.messagerun.queued,run.started,run.completed,run.failed,run.interruptedmodel.request,model.response.started,model.eventassistant.delta,assistant.message
model.request contains the exact JSON sent to the model. model.event contains every raw provider stream event. Each run records its agent name and optional parent run, so later subagents can share one trace tree. Run rows are query projections; the event log is the audit record.
Requirements: Go 1.25 or newer.
go test -race ./...
go vet ./...
golangci-lint runConfiguration:
| Variable | Default |
|---|---|
CONSEIL_ADDR |
127.0.0.1:8000 |
CONSEIL_DB_PATH |
conseil.db |
CONSEIL_LLM_BASE_URL |
https://llm.int.exe.xyz/v1 |
CONSEIL_AGENT_NAME |
conseil |
CONSEIL_MODEL |
gpt-5.6-sol |
CONSEIL_REASONING_EFFORT |
high |
CONSEIL_INSTRUCTIONS |
Built-in Conseil instructions |
CONSEIL_OWNER_EMAIL |
Required |
CONSEIL_RUN_TIMEOUT |
10m |
The service listens on loopback because exe.dev proxies localhost:8000. This prevents Tailscale or another direct network path from spoofing exe.dev identity headers. For local development only, set CONSEIL_ALLOW_UNAUTHENTICATED=true.
CONSEIL_ALLOW_UNAUTHENTICATED=true go run ./cmd/conseilOpen ios/Conseil.xcodeproj in Xcode 16 or newer. The deployment target is iOS 17.
The app asks for:
- The private exe.dev URL, such as
https://yolk-adze.exe.xyz. - A VM-scoped HTTPS token. Generate one locally:
ssh exe.dev ssh-key generate-api-key --vm=yolk-adze --label=conseil-iosThe app stores the token in Keychain and sends it in X-Exedev-Authorization. The server also checks the signed X-ExeDev-Email identity added by exe.dev.
The shared Swift code can be compiled without the app target:
cd ios
swift build --target ConseilCoreRunning the iOS app and its tests requires a full Xcode installation.
Build a static Linux binary:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -o conseil ./cmd/conseilInstall the binary and deploy/conseil.service on the VM. Create /etc/conseil.env with mode 0600:
CONSEIL_DB_PATH=/var/lib/conseil/conseil.db
[email protected]
CONSEIL_MODEL=gpt-5.6-sol
CONSEIL_REASONING_EFFORT=highThen enable the service:
sudo systemctl daemon-reload
sudo systemctl enable --now conseilKeep the exe.dev proxy private and point it at port 8000:
ssh exe.dev share port yolk-adze 8000
ssh exe.dev share set-private yolk-adzeSQLite survives service and VM restarts. An encrypted off-VM backup is still required before treating the trace as irreplaceable data.