AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
터미널 우선 협업 에이전트, Bun과 OpenTUI 기반
Terminal-first coworker agent (Bun + OpenTUI)
개발 도구TypeScript · RustGitHub @mweinbach직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Cowork is a local-first AI work app for people who want an agent that can sit next to a real project, understand the files on disk, run the right tools, remember the thread, and hand work back in a form you can inspect.
It is built for everyday computer work, not just chat. Open a workspace, pick your model, connect the tools you trust, and ask Cowork to help you make progress: change code, inspect files, research a question, create a plan, spin up helper agents, or resume a previous thread when you come back later.README 전문 보기 ↗Cowork is a local-first AI work app for people who want an agent that can sit next to a real project, understand the files on disk, run the right tools, remember the thread, and hand work back in a form you can inspect.
It is built for everyday computer work, not just chat. Open a workspace, pick your model, connect the tools you trust, and ask Cowork to help you make progress: change code, inspect files, research a question, create a plan, spin up helper agents, or resume a previous thread when you come back later.
--yolo or the workspace toggle), which skips every prompt and runs commands unsandboxed.The Electron desktop app is the easiest way to use Cowork day to day.
It includes:
Run the desktop app:
bun run start
Run the one-time demo tour for a walkthrough without clearing your real state:
bun run desktop:demo
desktop:demo launches the normal desktop app with COWORK_DEMO_MODE=1, which opens the existing onboarding tour for that launch.
The CLI is a lighter interface for terminal-first work. It connects to the same server runtime and supports provider setup, model switching, session management, and workspace control.
bun run cli
bun run cli -- --dir /path/to/project
Useful commands inside the REPL:
/connect <provider> to sign in or save a key/provider <name> to switch providers/model <id> to switch models/new to start a new session/resume <sessionId> to continue previous work/sessions to list saved sessions/tools to see available tools/cwd <path> to change workspaceThe optional Expo mobile app can pair with the desktop app over a direct local HTTP/3 path. The desktop app shows a QR code; the phone verifies the desktop certificate pins, exchanges a one-time pairing nonce, and then sends Cowork JSON-RPC messages directly to the desktop sidecar.
There is no hosted relay in the data path for the v1 pairing flow. Trusted phones are managed from Settings -> Remote Access, where permissions can be granted or revoked per device.
See docs/mobile-remote-access.md for the full pairing model.
Cowork keeps the product boundary on your machine:
~/.cowork/sessions.dbExternal services are contacted only through the providers, tools, MCP servers, and connectors you configure.
Prerequisite: Bun
git clone https://github.com/mweinbach/agent-coworker
cd agent-coworker
bun install
You need at least one AI provider for live turns. Tests, docs checks, and basic app startup do not require provider credentials.
You can save provider auth from the desktop UI, use the CLI /connect flow, or set environment variables.
export OPENAI_API_KEY=...
bun run cli
Then, inside the REPL:
/connect codex-cli
Supported provider auth:
| Provider | Auth |
|---|---|
GOOGLE_GENERATIVE_AI_API_KEY or GOOGLE_API_KEY | |
| OpenAI | OPENAI_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
| Bedrock | AWS default credentials, profile, or explicit AWS env vars |
| Together | TOGETHER_API_KEY |
| Fireworks | FIREWORKS_API_KEY |
| Fire Pass | FIREPASS_API_KEY |
| NVIDIA | NVIDIA_API_KEY |
| Baseten | BASETEN_API_KEY |
| LM Studio | local server, optional LM_STUDIO_API_KEY, optional LM_STUDIO_BASE_URL |
| OpenCode Go | OPENCODE_API_KEY |
| OpenCode Zen | OPENCODE_ZEN_API_KEY |
| Codex CLI | built-in OAuth or API key flow through Cowork |
Saved provider credentials live under ~/.cowork/auth/connections.json.
Desktop:
bun run start
CLI:
bun run cli -- --dir /path/to/project
Server only:
bun run serve
bun run serve -- --dir /path/to/project
bun run serve -- --json
Loopback JSON-RPC for native clients (POST /rpc):
bun run dev:rpc
bun run dev:rpc -- --dir /path/to/project
Then point the native app at the printed COWORK_RPC_URL (default http://127.0.0.1:7337/rpc).
Cowork works with project folders, not isolated prompts. The server can expose file reads, edits, search, shell commands, web research, and contextual skills to each turn.
Research is part of the normal harness: ask in chat, promote larger investigations into Task mode, spawn helper agents, or run the bundled provider-agnostic workflows/deep-research.ts workflow. There is no separate Google Deep Research service, analyst UI, research database, or research-only protocol stack.
Built-in tool IDs include:
bashread, write, editglob, grepwebSearch, webFetchtodoWritespawnAgentskill, memoryWhen persistent agent control is enabled, sessions can also expose tools for listing, messaging, waiting on, inspecting, resuming, and closing helper agents.
Skills are instruction bundles rooted in SKILL.md. Cowork discovers them from:
.cowork/skills in the current workspace~/.cowork/skillsskills/MCP servers are configured in layers:
.cowork/mcp-servers.json~/.cowork/config/mcp-servers.jsonconfig/mcp-servers.jsonMCP credentials are stored separately from config. See docs/mcp-guide.md for setup details.
Cowork stores session state locally so threads can survive restarts. Desktop transcript JSONL files are renderer cache; the canonical session store is ~/.cowork/sessions.db.
Backup APIs are opt-in. Git workspaces should still use normal git checkpoints such as git diff, git stash, and worktrees.
See docs/session-storage-architecture.md for the storage model.
Cowork is also an agent runtime you can build on.
The main design rule is simple: the server owns behavior; clients are thin.
Desktop / CLI / Mobile / Custom Client
|
v
JSON-RPC over WebSocket
|
v
Cowork server runtime
sessions | auth | MCP | persistence
tools | streaming | approvals
|
v
model runtimes and tool execution
The JSON-RPC WebSocket protocol is documented in docs/websocket-protocol.md. It covers provider auth, MCP management, session and thread control, file uploads, backup flows, subagents, streaming events, and observability.
Build a standalone Bun server binary:
bun run build:server-binary
./dist/cowork-server --host 0.0.0.0 --port 7337
When listening on non-loopback hosts, the server requires an access token for /ws and /cowork/*. Use --json to read browserAccessToken, or set COWORK_BROWSER_ACCESS_TOKEN.
Common commands:
bun run test # run all tests through the cross-platform project runner
bun run typecheck # typecheck root, harness, and desktop
bun run docs:check # verify docs/protocol consistency
bun run desktop:dev # run Electron desktop app in dev mode
bun run desktop:demo # run desktop app with onboarding demo mode
bun run dev # watch the CLI entry point
bun run harness:run # run harness scenarios in report-only mode
Mobile commands:
bun run app:mobile:dev
bun run app:mobile:ios
bun run app:mobile:android
bun run app:mobile:typecheck
Repository map:
| Path | Purpose |
|---|---|
src/server/ | WebSocket server, JSON-RPC routes, session orchestration, persistence |
src/cli/ | CLI REPL and command parsing |
src/providers/ | Provider catalog, auth, and model adapters |
src/tools/ | Built-in server-side tools |
src/runtime/ | Runtime adapters |
src/mcp/ | MCP config, auth, and client lifecycle |
src/skills/ | Skill discovery and trigger extraction |
apps/desktop/ | Electron desktop app |
apps/mobile/ | Optional Expo mobile app |
packages/harness/ | Developer harness scripts and validation |
config/ | Built-in defaults and provider model configs |
skills/ | Bundled skills |
prompts/ | System and subagent prompts |
docs/ | Protocol, architecture, storage, MCP, mobile, and harness docs |
More docs:
Cowork is actively developed. The core local-first runtime and WebSocket architecture are stable enough to build on, while desktop polish, mobile remote access, provider behavior, and plugin workflows continue to move quickly.
README claims should match the code. If a feature changes, update this document with the implementation.
This project uses a custom source-available license in LICENSE.
Forks and modifications are allowed, but you must clearly credit the original project and identify your changes. Selling the project, a fork, or a derivative product/service requires prior permission from Max Weinbach.