* Push agents to act when they end a turn announcing work A local model often ends a turn with "let me set that up now" and no tool call. Nothing runs after a turn ends, so the user waits on work that never happens. A text-only turn that announces unfinished work now gets up to two follow-ups that ask the agent to do it or report what is open. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VfFvSskgrByEU75QLyreE * Summarize project conversations and retry contended handoffs Group threads, which hold every project's main conversation, were never compacted. Runs there saw only the last 200 raw messages, so the original brief and earlier decisions fell out of context. The lead bot now summarizes them like a bot thread; the summary stays local. A group handoff now retries when its transaction hits a deadlock, so a specialist that finished its work no longer fails at the hand-back. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011VfFvSskgrByEU75QLyreE * Compact chat history automatically before it outgrows the model Long chats lost their brief and open work. The Pi runtime passed only the last 25 history entries, and the compacted summary and recalled memory sat in front of them, so both were cut whenever a chat had more than 24 uncompacted messages. Context pruning then dropped the summary first, because it was the oldest history entry. Compaction itself only started after 100 uncompacted messages and ignored tokens. - History entries can be pinned. The executor pins the summary and recalled memory, the runtime always keeps them ahead of the recent window, and context pruning never drops them. - Compaction is driven by messages and tokens: it keeps the newest ten messages verbatim and folds the rest into the summary once 20 messages are uncompacted or the history exceeds 40% of the model's input budget. - Before a run whose history would not reach the model in full, the executor compacts inline for up to 90 seconds, then runs with what it has. - The summarizer writes a structured summary: goal and brief, decisions, done, open, preferences. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QAiXRe1FLMAJT9jkvwFZFq * Record runtime failures again instead of leaving the run running A runtime error closes the stream through withRuntimeCleanup, which aborts the run's own controller. The catch treated that as an outside stop and returned without finalizing, so a failed run stayed running and the web never showed its error. Same fix as on the main-green branch. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QAiXRe1FLMAJT9jkvwFZFq --------- Co-authored-by: Claude <noreply@anthropic.com>
evOo
DE · Lokale Multi-Oo Programmier-Maschine — persistente KI-Teamkollegen mit Voice First, Projekt-Timeline und lokalen Tools.
EN · Local multi-Oo programming machine — persistent AI teammates with Voice First, project timeline, and local tooling.
Clean local checkout for Ingo Wagner. Brand: evOo only. Sourced from
cynarAI/evoo@f00577b(antigravity-handoff/project-timeline), with a fresh git history.
What this is / Was das ist
| DE | EN |
|---|---|
| Persönliche Multi-Agenten-App auf dem eigenen Rechner | Personal multi-agent app on your own machine |
| Oos (Agents) mit Memory, Tools, Voice und Computer | Oos (agents) with memory, tools, voice, and computer |
| Antigravity-Zukunftswerkzeuge: self-update, local-stack, pi-local-provider, seed-ollama, Voice First / Oo-Stage | Same Antigravity future tools kept on this branch |
Quick start
# clone (Mac recommended path)
git clone git@github.com:cynarAI/evOo-local.git ~/Projects/evOo-local
cd ~/Projects/evOo-local
cp .env.example .env
# set POSTGRES_PASSWORD, DATABASE_URL, BETTER_AUTH_SECRET, ENCRYPTION_KEY, SCREEN_PROXY_SECRET, SANDBOX_SUPERVISOR_TOKEN
# Postgres (Compose overlay publishes 127.0.0.1:5433)
docker compose --env-file .env \
-f infra/compose/docker-compose.yml \
-f infra/compose/docker-compose.postgres-host.yml \
up postgres -d
pnpm install
pnpm db:generate
pnpm db:migrate
pnpm sandbox:build # optional, for Docker computers
pnpm dev
| Service | URL |
|---|---|
| Web app | http://127.0.0.1:5173 |
| API | http://127.0.0.1:3100 |
Full local notes: docs/LOCAL-SETUP.md
Stack
- TypeScript monorepo (pnpm + Turborepo)
- React 19 / Vite / Tailwind (web), Electron (desktop), Expo (mobile)
- Hono + oRPC, PostgreSQL + Prisma, Better Auth, Graphile Worker
- Pi model routing, Docker sandboxes, Voice (Kokoro, local)
Antigravity tools kept on this branch
packages/core/src/self-update.tsapps/desktop/src/local-stack.tspackages/adapters/src/pi-local-provider.tsscripts/seed-ollama.ts- Voice First / Oo stage (
apps/webCallView + stage components)
Voice (Kokoro)
Large voice model blobs are not in this repo. Recreate Kokoro separately:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest
export KOKORO_BASE_URL=http://127.0.0.1:8880
German voices come from a local Piper server (PIPER_BASE_URL). Details: docs/kokoro-voice.md
Tech debt (brand / packages)
Internal workspace packages still use @rakazo/* names (and some RAKAZO_* env vars). Renaming them would break the build; treat as temporary tech debt. User-facing titles and docs say evOo.
License
Apache License 2.0 — see LICENSE.