ZacharyZhang-NY af72f1b4d9 Make @mentions in a DM redirect the turn (group-chat semantics)
The operator's mental model: a chat is a room, @X means "X takes the
turn", unmentioned participants keep working. Two separate gaps were
letting 张工程师 answer when the user wrote "@CEO 更新一下进度" inside
their Board↔张工程师 chat:

* `resolveMessageWakeTargets` always woke the DM recipient, regardless
  of who the body @-mentioned. CEO woke too, but 张工程师 — the
  addressed party — replied first and CEO's busy-queued wake arrived
  after the operator had already taken the earlier reply as "the
  answer". Explicit mentions now shadow the implicit DM recipient:
  with mentions, only the named agents wake; the recipient still sees
  the message in their inbox, they just aren't obliged to answer.
  No mentions → fall back to the historical "DM wakes the recipient"
  contract so every existing flow is untouched.

* `channel-utils` keyed each chat by `sort(fromAgent, toAgent)`. CEO's
  reply with `toAgentId=__board__, parentMessageId=<original>` landed
  in a fresh Board↔CEO pane — the exact "new session" the operator
  complained about. Walk `parentMessageId` back to the root of the
  reply chain and use the root's participant pair: every reply in a
  thread now collapses into the chat the sender originally opened,
  cycle-guarded against malformed parent pointers.

Pinned by a new unit test: DM to CTO with "@CEO 更新一下进度。" wakes
only CEO while keeping the message visible to both CTO's and CEO's
inbox.
2026-04-20 08:59:14 -04:00
2026-04-16 14:48:51 -04:00
2026-04-17 14:03:56 -04:00
2026-04-20 08:02:40 -04:00
2026-04-16 14:48:51 -04:00
2026-04-18 22:45:41 -04:00
2026-04-17 14:03:56 -04:00
2026-04-17 14:03:56 -04:00
2026-04-04 12:03:50 -04:00
2026-03-15 22:15:01 -04:00

AgentCompany logo

AgentCompany

Run an AI company from your desktop.

Latest Release License Platform Electron

Download  |  Website


AgentCompany dashboard

What it does

Type a company name and a goal. A CEO agent boots, hires specialists, forms departments, and runs the business. You approve or steer from the desktop.

Local, SQLite-backed, no external services. Inspired by Paperclip.


26 providers, no CLI

The runtime links pi-mono directly.

OAuth (5): Claude Pro/Max · ChatGPT Plus/Pro (Codex) · GitHub Copilot · Gemini CLI · Antigravity

API key (18): Anthropic · OpenAI · Google · Mistral · Groq · Cerebras · xAI · OpenRouter · Vercel AI Gateway · ZAI · OpenCode · OpenCode Go · Hugging Face · Kimi · MiniMax · MiniMax CN · Fireworks · Fireworks Firepass

Cloud (3): Azure OpenAI · AWS Bedrock · Google Vertex AI

Credentials are SecretVault-encrypted in SQLite.


Two execution modes

  • AI CEO — autonomous. Hiring, tasks, deliverables run without you.
  • AI Co-Founder — pauses at hire_agent / document_review / plan_review / strategy_review for your decision.

Switch at Settings → Execution mode.


Features

Self-organizing teams

CEO builds the org chart from one goal.

Org chart

Agent messaging

Threads and DMs between agents. Direct / department / project / company / incident channels resolve to wake targets; each message lands in the recipient's transcript as a pi AgentMessage turn. If the recipient is already running, the message is delivered live via pi's steer queue; if not, it waits in the inbox until the next prepareRun.

Agent messaging

Tasks

Goals break into tasks. Agents pick them up, report progress, escalate blockers.

Task queue

Approvals

Hiring, deliverables, plan/scope/strategy reviews, budget overrides, production deploys pause for the board. The same approval policy gates the agent's destructive tools (bash / write / edit) via pi's beforeToolCall hook, so a pending approval stops file and shell mutations instead of just flagging them after the fact.

Approvals

Documents

Plans, strategies, and specs in a shared center, linked to the tasks that produced them.

Document center

Launch in a minute

Name, mission, goal, provider, mode.

Onboarding


Quick Start

Download the latest release — macOS (Apple Silicon & Intel), Windows, Linux.

Build from source

# Node.js 22+, pnpm 10+
pnpm install
pnpm dev

First run

  1. Onboarding probes your shell PATH for node (agents call the local HTTP API via node -e).
  2. Settings → Providers. Sign in or drop a key.
  3. Create a company: name, mission, goal, mode, workspace.

Verification

pnpm typecheck
pnpm lint
pnpm test:unit
pnpm test:integration
pnpm test:e2e
pnpm build:verify

Packaging

pnpm build         # Package for current platform → /build/release
pnpm build:dir     # Unpackaged directory
pnpm build:current # Current host platform
pnpm release:local # Signed release pipeline — see docs/release/local-r2.md

Targets: macOS .dmg, Windows .exe (NSIS), Linux .AppImage. Built with electron-builder. Local builds use ad-hoc signing (CSC_IDENTITY_AUTO_DISCOVERY=false). Defaults to --publish never.


Architecture

src/
  main/
    agent-runtime/       RuntimeBridge, SqliteSessionStore, CostWriter
    credentials/         CredentialStore, Resolver, OAuthLoginService
    api-server/          Agent HTTP API
    orchestration/       Scheduler, run dispatch
    prompt-builder/      System prompt assembly
    thread-integration/  Thread runtime event routing
    worker/              utilityProcess worker — direct new Agent(...)
    database/            SQLite schema + migrations
  preload/             Typed DesktopApi via contextBridge
  renderer/            React 19 UI
  shared/              Zod schemas shared across processes
  • SQLite local; no external services.
  • contextIsolation: true, nodeIntegration: false, Zod-validated IPC.
  • Worker constructs new Agent({...}) from @mariozechner/pi-agent-core with the full contract: sessionId, thinkingLevel, and the beforeToolCall / afterToolCall / transformContext hooks proxied back to RuntimeBridge on main.
  • Sessions persist as session_entries; long transcripts auto-compact at LLM-call time via a pure transformContext reducer, and rotate at the long-cycle boundary.
  • beforeToolCall enforces the approval gate plus thread wait-state guard at the tool-execution layer; mid-run messages reach live agents through pi's steering queue.
  • Workspace locks are single-writer-per-repo — every resolved workspace is held exclusively for the duration of the run; contenders queue on the wakeup table.
  • Thread runtime (conversation_threads / conversation_events / thread_wait_states) sits above pi's AgentMessage stream.
  • Startup only runs schema migrations plus interruptStaleRuns; all other data-repair lives at the transition point or in explicit maintenance paths.

Tech Stack

Layer Tech
Framework Electron 39.8.0
Language TypeScript 5.9
UI React 19, Tailwind CSS 4, Framer Motion, Zustand
Build electron-vite, Vite 7, electron-builder
Database SQLite via node:sqlite (WAL)
Validation Zod 4
Agent runtime @mariozechner/pi-ai, @mariozechner/pi-agent-core, @mariozechner/pi-coding-agent
Testing Vitest, Playwright

License

MIT

S
Description
No description provided
Readme MIT
135 MiB
0 Stars 1 Watchers 0 Forks
2026-10-10 01:31:40 +00:00
Languages
TypeScript 93.7%
Shell 3%
CSS 2.3%
Python 0.5%
JavaScript 0.4%