内容
<p align="center">
<img src="docs/banner-dark.svg#gh-dark-mode-only" width="100%" alt="OctoOffice — local-first AI agent office. Your AI agents, one office, you're the CEO." />
<img src="docs/banner-light.svg#gh-light-mode-only" width="100%" alt="OctoOffice — local-first AI agent office. Your AI agents, one office, you're the CEO." />
</p>
<p align="center">
A local-first orchestrator that turns CLI coding agents into a fully simulated<br>
virtual software company — with departments, meetings, workflows, and a<br>
pixel-art office you can watch them work in.
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-2.6.0-blue" alt="Version" />
<a href="https://github.com/Chepko932/OctoOffice/actions/workflows/ci.yml"><img src="https://github.com/Chepko932/OctoOffice/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI" /></a>
<img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen" alt="Node.js 22+" />
<img src="https://img.shields.io/badge/license-Apache%202.0-orange" alt="License" />
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey" alt="Platform" />
</p>
<p align="center">
<a href="#quick-start">Quick Start</a> ·
<a href="#how-it-works">How It Works</a> ·
<a href="#features">Features</a> ·
<a href="#workflow-packs">Workflow Packs</a> ·
<a href="#screenshots">Screenshots</a> ·
<a href="#provider-setup">Providers</a> ·
<a href="#messenger-integration">Messenger</a> ·
<a href="#tech-stack">Tech Stack</a> ·
<a href="#security">Security</a> ·
<a href="docs/releases/v2.6.0.md">Release Notes</a>
</p>
---
<p align="center">
<img src="docs/screenshots/screenshot-office.png" alt="OctoOffice MissionControl — pixel-art office with agent sidebar, kanban board, and live chat" width="100%" />
</p>
---
<div align="center">
## What is OctoOffice?
OctoOffice connects your AI coding assistants — **Claude Code, Codex CLI, Gemini CLI,
OpenCode, OpenClaw, GitHub Copilot, Antigravity**, or any LLM API — and organizes them
into a virtual software company. You give orders as the CEO. They collaborate across
departments, execute multi-phase workflows, and deliver results — all from a single dashboard.
> **Local-first & private** — Everything runs on your machine. SQLite database, no cloud dependency, no data leaves your network.
</div>
<div align="center">
### Why OctoOffice?
**One dashboard, many agents** — Stop juggling terminals. Manage all your AI providers from MissionControl.
**Real autonomous collaboration** — Agents work in isolated git worktrees, attend planning meetings, and hand off work across departments.
**Declarative workflows** — Define multi-phase pipelines in YAML. The graph runner handles sequencing, connector dispatch, and phase advancement.
**Visual & transparent** — A pixel-art retro office shows what every agent is doing. Live terminal output. Real-time WebSocket updates.
**Talk from anywhere** — Send directives via Telegram, Discord, Slack, or WhatsApp. Approve decisions without opening the browser.
</div>
---
<a id="how-it-works"></a>
<div align="center">
## How It Works
<img src="docs/how-it-works.svg" alt="OctoOffice flow — six steps from directive to review" width="80%" />
<br><br>
**1.** You give a directive — type `$ Build a REST API` in the chat or send it via Telegram
**2.** CEO analyzes & delegates — the orchestrator parses your request and creates a task
**3.** Team leader assigns — the department's team leader picks the best-fit agent
**4.** Agent executes in isolation — each agent works in its own git worktree
**5.** Phases advance automatically — the graph runner moves through the workflow pack's DAG
**6.** You review & decide — approve, request changes, or let the CEO route follow-ups
</div>
---
<div align="center">
### CEO Orchestrator (Autonomous Mode)
When enabled, the CEO Orchestrator runs on a periodic tick and autonomously
reviews your inbox, creates tasks from messages, approves completed reviews,
rebalances workloads, and reprioritizes queues.
Conservative by design — max 3 decisions per tick, only acts on clear signals.
</div>
<div align="center">
### CEO Follow-Up Routing
When you submit follow-up feedback, the CEO makes an intelligent routing decision:
| Decision | When | Effect |
| :----------------: | :------------------------: | :-----------------------------------------------------: |
| **Supplement** | Small fix or clarification | Routes to the best-fit agent (may differ from original) |
| **Pipeline Reset** | Significant rework | Resets workflow phases from a specified point |
| **New Task** | Out of scope | Creates a separate linked task with its own pipeline |
</div>
<div align="center">
### Direct Agent Chat
Send a message **without** `$` to talk directly to a specific agent.
Requires a session mapping (messenger channel → agent). The agent responds in the same channel.
</div>
---
<a id="quick-start"></a>
<div align="center">
## Quick Start
### Prerequisites
| Tool | Version | Install |
| :---------: | :-----: | :------------------------------------: |
| **Node.js** | >= 22 | [nodejs.org](https://nodejs.org/) |
| **pnpm** | latest | `corepack enable` (built into Node.js) |
| **Git** | any | [git-scm.com](https://git-scm.com/) |
</div>
<p align="center">
<em>Typical setup time: 3–8 minutes on Linux/macOS with Node 22+ and pnpm already installed; 5–15 minutes via Docker.</em>
</p>
<div align="center">
### One-Command Install
**macOS / Linux**
</div>
```bash
git clone https://github.com/Chepko932/OctoOffice.git && cd OctoOffice && bash install.sh
```
<div align="center">
**Windows (PowerShell)**
</div>
```powershell
git clone https://github.com/Chepko932/OctoOffice.git; cd OctoOffice; powershell -ExecutionPolicy Bypass -File .\install.ps1
```
<div align="center">
### Start
</div>
```bash
pnpm dev # Web UI on :8800, API on :8790 (binds 0.0.0.0, network-accessible)
# or
pnpm dev:local # Same, but loopback only (127.0.0.1)
```
<p align="center">
Open <strong>http://127.0.0.1:8800</strong> — done.
</p>
<details>
<summary><p align="center"><b>Manual setup</b></p></summary>
```bash
corepack enable
pnpm install
cp .env.example .env
# Generate OAUTH_ENCRYPTION_SECRET and INBOX_WEBHOOK_SECRET (32-byte hex each)
node -e "const fs=require('fs'),c=require('crypto'),g=()=>c.randomBytes(32).toString('hex');let e=fs.readFileSync('.env','utf8').replace(/^OAUTH_ENCRYPTION_SECRET=.*$/m,\`OAUTH_ENCRYPTION_SECRET=\${g()}\`).replace(/^INBOX_WEBHOOK_SECRET=.*$/m,\`INBOX_WEBHOOK_SECRET=\${g()}\`);fs.writeFileSync('.env',e)"
pnpm run setup -- --port 8790
pnpm dev
```
</details>
<details>
<summary><p align="center"><b>Install with AI</b></p></summary>
<p align="center">Paste this to your coding agent:</p>
```
Install OctoOffice following the guide at:
https://github.com/Chepko932/OctoOffice
```
</details>
<div align="center">
### Docker
No local Node.js required — just Docker:
</div>
```bash
git clone https://github.com/Chepko932/OctoOffice.git && cd OctoOffice
cp .env.example .env
# Generate OAUTH_ENCRYPTION_SECRET and INBOX_WEBHOOK_SECRET in one shot
node -e "const fs=require('fs'),c=require('crypto'),g=()=>c.randomBytes(32).toString('hex');let e=fs.readFileSync('.env.example','utf8').replace(/^OAUTH_ENCRYPTION_SECRET=.*$/m,\`OAUTH_ENCRYPTION_SECRET=\${g()}\`).replace(/^INBOX_WEBHOOK_SECRET=.*$/m,\`INBOX_WEBHOOK_SECRET=\${g()}\`);fs.writeFileSync('.env',e)"
docker compose --profile prod up --build # Production (all on :8790)
docker compose --profile dev up --build # Development (Vite :8800, API :8790)
```
<p align="center">
All CLI providers are pre-installed in the image. SQLite persisted to a Docker volume.
</p>
<div align="center">
**Remote access (Tailscale / LAN)** — set `BIND_HOST` in `.env` to bind ports to a non-loopback IP:
</div>
```bash
# .env
BIND_HOST="100.x.x.x" # your Tailscale IP, or 0.0.0.0 for every interface
```
<p align="center">
Default is <code>127.0.0.1</code> (localhost only). Combined with the login password in
<strong>Settings → General → Remote Access</strong>, this gives you encrypted remote access over Tailscale.
</p>
---
<a id="features"></a>
<div align="center">
## Features
</div>
<div align="center">
### MissionControl Dashboard
The home view — a 3-column layout with an agent sidebar (sprite avatars, token usage),
an embedded pixel-art office canvas with MiniKanban and metrics, and a real-time chat
panel supporting task conversations, announcements, reports, and CEO directives.
</div>
<div align="center">
### Pixel-Art Office
A Tiled-map-based 2D office rendered with Pixi.js 8. Agents walk between desks,
attend meetings, and work across 7 department rooms. Supports light and dark themes
with `Press Start 2P` pixel font and `JetBrains Mono` for data. Expandable to fullscreen.
</div>
<div align="center">
### Kanban Task Board
Full task lifecycle — Inbox → Planned → In Progress → Review → Done — with
drag-and-drop, pack-aware phase views, filters, and batch operations.
</div>
<div align="center">
### Visual Node Editor
Four modes in one:
| Mode | Purpose |
| :------------: | :-------------------------------------------------------------------: |
| **Visualizer** | Read-only graph of any pack's phase DAG |
| **Monitor** | Live execution overlay — watch phases turn green in real time |
| **Editor** | Drag-to-connect ports, property panel, YAML preview + save |
| **Builder** | Create new packs from scratch with a node palette and guidance editor |
Built with React Flow. Node types from the registry appear in the palette, grouped by category.
</div>
<div align="center">
### AI Provider Support
**CLI Providers** — Claude Code · Codex CLI · Gemini CLI · OpenCode · OpenClaw · GitHub Copilot · Antigravity
**API Providers** — OpenAI · Anthropic · Google · Ollama · OpenRouter · Together · Groq · Cerebras
**OAuth** — GitHub & Google with AES-256-GCM encrypted token storage
</div>
<div align="center">
### Messenger Integration
Full bidirectional messaging with **Telegram** and **Discord** (built-in receivers).
Outbound support for **Slack**, **WhatsApp**, **Google Chat**, **Signal**, and **iMessage**.
Send `$` directives, approve decisions, and receive live updates — all from your phone.
</div>
<div align="center">
### Decision Inbox
When agents need approval, they send numbered option lists to your messenger:
```
📋 Decision Required: Code Review for auth-refactor
1. Approve and merge
2. Request changes
3. Reject
→ Reply with the option number.
```
Works in the Web UI and all connected messenger channels. Multi-language responses supported.
</div>
<div align="center">
### CEO Directives & Routing
| Prefix | Effect |
| :----------------------------: | :----------------------------------------------: |
| `$ Build a REST API` | Broadcast to all agents, delegated via Planning |
| `$ @design @qa Redesign login` | Targeted — specific departments receive the task |
| `Fix the null check` | Direct chat with the session-mapped agent |
| `1` or `approve` | Decision reply — approves the pending action |
</div>
<div align="center">
### Git Worktree Isolation
Every agent works in its own isolated git worktree and branch.
No conflicts between parallel agents. Merges happen only on CEO approval.
### Obsidian Knowledge Base
Bidirectional sync with local Obsidian vaults. Before task execution, vault files
are copied into the agent's worktree. After execution, changes sync back.
### Skills Library
Categorized skills library with custom skill upload and classroom-style training.
Assign skills to agents to specialize their capabilities.
### Server Management
Register external servers with health checks, resource allocation, and queue processing.
### In-App Updates
Auto-detect new GitHub releases with guided update instructions — never miss a version.
### Mobile Responsive
Dedicated mobile components for phones and tablets: collapsible office canvas
with pinch-to-zoom, vertical Kanban, bottom-sheet modals, and 44px touch targets.
### Multi-Language UI
English · Korean · Japanese · Chinese · German
### MCP Integration
OctoOffice acts as an MCP client — connect to external MCP servers and their tools
are automatically available to all agents. Supports `stdio` and `sse` transports.
### Node Type System
Reusable workflow building blocks that run server-side TypeScript — no agent spawn needed.
Built-in types: `echo`, `comfyui_generate`, `planning_meeting`, `cross_dept`.
### Remote Access
Password-protected remote access for Tailscale or similar setups.
Scrypt-hashed passwords, 7-day session tokens. Localhost remains password-free.
</div>
---
<a id="workflow-packs"></a>
<div align="center">
## Workflow Packs
Packs are declarative YAML files that define a phase DAG — the complete workflow
for a type of project. Each phase specifies its department, agent guidance,
dependencies, and execution mode.
**Execution modes:** `agent` (LLM executes) · `hybrid` (agent + connector guidance) · `server` (connector executes directly)
| Pack | Key | Focus | Departments |
| :----------------------: | :---: | :------------------------: | :----------------------------------------------------------: |
| **Development** | `DEV` | Engineering baseline | Research, Planning, Development, Testing, Review, Design, QA |
| **Design Studio** | `DSN` | UI design & design systems | Design Planning, UI Design, Design QA, Handoff Engineering |
| **Web Research** | `WEB` | Citation-first research | Research Strategy, Crawler Team, Fact Check |
| **Video Pre-Production** | `VID` | ComfyUI video pipeline | Creative Direction, Visual Production, Visual QA |
Select packs in **Settings > General > Office Workflow Pack**.
**Create your own pack:** Copy the starter template and edit the YAML — zero code changes required.
```bash
cp -r server/packs/community/_template server/packs/community/my_pack
# Edit pack.yaml + guidance files, restart the server — done.
```
See the full [Community Pack Creation Guide](docs/creating-community-packs.md) for schema reference, guidance writing tips, and common patterns.
</div>
---
<a id="screenshots"></a>
<div align="center">
## Screenshots
</div>
<table>
<tr>
<td width="50%">
<p align="center"><strong>MissionControl (Dark)</strong><br><em>Agent sidebar, embedded pixel office, MiniKanban, and live chat</em></p>
<img src="docs/screenshots/screenshot-office.png" alt="MissionControl Dark" width="100%" />
</td>
<td width="50%">
<p align="center"><strong>MissionControl (Light)</strong><br><em>Same layout with emerald accent on light background</em></p>
<img src="docs/screenshots/screenshot-office-light.png" alt="MissionControl Light" width="100%" />
</td>
</tr>
<tr>
<td width="50%">
<p align="center"><strong>Visual Node Editor</strong><br><em>Phase DAG with live execution monitor and drag-to-connect editing</em></p>
<img src="docs/screenshots/screenshot-workflows.png" alt="Visual Node Editor" width="100%" />
</td>
<td width="50%">
<p align="center"><strong>Kanban Board</strong><br><em>Drag-and-drop task management with filters and pack-aware phases</em></p>
<img src="docs/screenshots/screenshot-tasks.png" alt="Kanban Board" width="100%" />
</td>
</tr>
<tr>
<td width="50%">
<p align="center"><strong>Agent Roster</strong><br><em>All agents with department filter, provider badge, and status indicators</em></p>
<img src="docs/screenshots/screenshot-roster.png" alt="Agent Roster" width="100%" />
</td>
<td width="50%">
<p align="center"><strong>Settings</strong><br><em>CLI providers, API keys, messenger channels, workflow packs</em></p>
<img src="docs/screenshots/screenshot-config.png" alt="Settings" width="100%" />
</td>
</tr>
</table>
### Onboarding
First launch walks you through a 5-step wizard — company/CEO identity, default CLI provider, optional extras, Obsidian knowledge base, and final sanity check.
<table>
<tr>
<td width="33%"><img src="docs/screenshots/onboarding-01-welcome.png" alt="Onboarding — Welcome" width="100%" /></td>
<td width="33%"><img src="docs/screenshots/onboarding-02-provider.png" alt="Onboarding — Choose AI provider" width="100%" /></td>
<td width="33%"><img src="docs/screenshots/onboarding-03-extras.png" alt="Onboarding — Extras" width="100%" /></td>
</tr>
<tr>
<td width="50%"><img src="docs/screenshots/onboarding-04-knowledge.png" alt="Onboarding — Obsidian knowledge base" width="100%" /></td>
<td width="50%"><img src="docs/screenshots/onboarding-05-ready.png" alt="Onboarding — Ready to launch" width="100%" /></td>
</tr>
</table>
### Mobile
Full responsive layout for phones — 5-tab bottom navigation (Office, Tasks, Chat, Ops, More), slide-up bottom sheets, pinch-to-zoom office canvas, and 44px minimum touch targets throughout.
<table>
<tr>
<td width="20%"><img src="docs/screenshots/mobile/mobile-01-office.png" alt="Mobile — Office / MissionControl" width="100%" /></td>
<td width="20%"><img src="docs/screenshots/mobile/mobile-02-tasks.png" alt="Mobile — Tasks" width="100%" /></td>
<td width="20%"><img src="docs/screenshots/mobile/mobile-03-ops.png" alt="Mobile — Ops" width="100%" /></td>
<td width="20%"><img src="docs/screenshots/mobile/mobile-04-more-sheet.png" alt="Mobile — More sheet with pack selector" width="100%" /></td>
<td width="20%"><img src="docs/screenshots/mobile/mobile-05-chat.png" alt="Mobile — Chat with agent picker" width="100%" /></td>
</tr>
</table>
---
<a id="provider-setup"></a>
<div align="center">
## Provider Setup
OctoOffice supports three provider paths:
**CLI tools** — Local coding CLIs spawned as subprocesses
**OAuth accounts** — GitHub/Google-backed flows via secure token exchange
**API keys** — External LLM APIs configured in **Settings > API**
### CLI Providers
| Provider | Install | Auth |
| :----------------------------------------------------------------: | :---------------------------------------: | :-------------------------: |
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | `npm i -g @anthropic-ai/claude-code` | `claude` (follow prompts) |
| [Codex CLI](https://github.com/openai/codex) | `npm i -g @openai/codex` | `OPENAI_API_KEY` in `.env` |
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `npm i -g @google/gemini-cli` | OAuth via Settings |
| [OpenCode](https://github.com/opencode-ai/opencode) | `npm i -g opencode` | Provider-specific |
| [OpenClaw](https://docs.openclaw.ai/cli) | `npm i -g openclaw` | Profile-based (`--profile`) |
| [GitHub Copilot](https://github.com/github/copilot-cli) | `npm i -g @githubnext/github-copilot-cli` | `gh auth login` |
| [Antigravity](https://github.com/antigravity-official/antigravity) | `npm i -g antigravity` | Provider-specific |
Configure providers and models in **Settings > CLI Tools**.
</div>
<details>
<summary><p align="center"><b>OpenClaw profile-based local LLM setup</b></p></summary>
<p align="center">
OpenClaw supports per-agent profile isolation via <code>--profile <name></code>.
Each profile maintains its own config under <code>~/.openclaw-<name>/</code>.
</p>
```bash
openclaw --profile qwen config set agents.defaults.model.primary "vllm/qwen3.5-35b-moe"
openclaw --profile qwen config set tools.elevated.enabled true
```
<p align="center">
Set an agent's provider to <strong>OpenClaw</strong> and enter the profile name in the dashboard.
</p>
</details>
---
<a id="messenger-integration"></a>
<div align="center">
## Messenger Integration
Configure channels in **Settings > Channel Messages**.
### Bidirectional (built-in receivers)
| Channel | Protocol | Requirements |
| :----------: | :----------: | :-----------------------------------------------------------: |
| **Telegram** | Long-polling | Bot token from [@BotFather](https://t.me/BotFather) + chat ID |
| **Discord** | Polling | Bot token + channel ID |
### Outbound-only
| Channel | Transport | Requirements |
| :-------------: | :----------: | :----------------------------: |
| **Slack** | Bot API | Bot token + channel ID |
| **WhatsApp** | Cloud API | Access token + phone number ID |
| **Google Chat** | Webhook | Webhook URL |
| **Signal** | RPC | Signal RPC base URL |
| **iMessage** | macOS native | macOS only |
All tokens encrypted at rest (AES-256-GCM).
### Message Routing
| You send | What happens |
| :-----------------------------: | :----------------------------------------------------: |
| `$ Build a REST API for users` | CEO directive — broadcast, delegated to best-fit agent |
| `$ @design @qa Redesign login` | Targeted directive — specific departments involved |
| `Fix the null check in auth.ts` | Direct agent chat via session mapping |
| `1` or `approve` | Decision reply — approves pending action |
| `/new` | Resets conversation history with mapped agent |
</div>
<details>
<summary><p align="center"><b>Telegram setup example</b></p></summary>
<div align="center">
1. Create a bot via [@BotFather](https://t.me/BotFather) and copy the token
2. Go to **Settings > Channel Messages > Telegram**
3. Paste the bot token
4. Add a session: enter chat ID + select which agent receives messages
5. Enable **Receive** — polling starts automatically
6. Test: send `$ Hello from Telegram`
</div>
</details>
---
<a id="tech-stack"></a>
<div align="center">
## Tech Stack
| Layer | Technology |
| :------------------: | :---------------------------------------------: |
| **Frontend** | React 19, Vite 7, TailwindCSS 4, TypeScript 5.9 |
| **Pixel Art Engine** | Pixi.js 8 |
| **Backend** | Express 5, SQLite (embedded, zero-config) |
| **Real-time** | WebSocket (ws) |
| **Validation** | Zod 4 |
| **Workflow Editor** | React Flow (@xyflow/react) |
| **Icons** | Lucide React |
| **Routing** | React Router 7 |
| **Testing** | Vitest 3, Playwright E2E, MSW |
</div>
---
<div align="center">
## Project Structure
</div>
```
OctoOffice/
├── server/ # Express backend
│ ├── packs/ # Declarative workflow packs (built-in + community)
│ ├── connectors/ # Service connectors (ComfyUI, MCP, web-search)
│ ├── adapters/ # CLI/HTTP provider adapters
│ ├── node-types/ # Reusable workflow node types
│ ├── modules/ # Routes, workflow engine, bootstrap
│ ├── security/ # Auth, CORS, origin validation
│ └── messenger/ # Chat infrastructure
├── src/ # React frontend
│ ├── components/ # 25+ feature-based components
│ ├── hooks/ # WebSocket, polling, mobile hooks
│ └── styles/ # Tailwind, theme variables
├── tools/ # Playwright MCP and design workflow tooling
├── tests/ # Playwright E2E tests
├── docs/ # Architecture, release notes, specs
├── scripts/ # Setup & automation
└── public/ # Sprites, maps, fonts, logos
```
---
<div align="center">
## Environment Variables
Copy `.env.example` to `.env`. Key variables:
| Variable | Required | Description |
| :-----------------------: | :----------: | :-------------------------------------------: |
| `OAUTH_ENCRYPTION_SECRET` | **Yes** | Encrypts OAuth/messenger tokens (AES-256-GCM) |
| `INBOX_WEBHOOK_SECRET` | For webhooks | Shared secret for `/api/inbox` |
| `PORT` | No | Server port (default: `8790`) |
| `API_AUTH_TOKEN` | Recommended | Bearer token for non-loopback API access |
| `DB_PATH` | No | SQLite path (default: `./octooffice.sqlite`) |
See [`.env.example`](.env.example) for all available variables.
</div>
---
<div align="center">
## Run Modes
</div>
```bash
pnpm dev # Development, network-accessible (0.0.0.0)
pnpm dev:local # Development, localhost only (127.0.0.1)
pnpm build # Production build
pnpm start # Production server
```
<div align="center">
### CI Pipeline
Runs on every PR: Unicode guard → install → format → lint → OpenAPI validation → type check → build → unit tests (with coverage) → Playwright E2E.
</div>
```bash
# Local pre-PR check
pnpm format:check && pnpm lint && pnpm build && pnpm test:ci
```
---
<a id="security"></a>
<div align="center">
## Security
**Local-first** — All data in SQLite, no external cloud services
**Encrypted tokens** — OAuth and messenger tokens encrypted at rest (AES-256-GCM)
**Localhost by default** — Dev server binds to `127.0.0.1`
**No secrets in repo** — `.gitignore` blocks `.env`, `*.pem`, `*.key`
**Preflight checks** — `pnpm run preflight:public` scans for leaked secrets
**Remote access** — Optional password protection with scrypt hashing for Tailscale setups
**Rate limits** — Login and API endpoints protected; loopback skipped by default (see [`SECURITY.md`](SECURITY.md#deployment-hardening-notes) before putting a reverse proxy in front)
**Report a vulnerability** — [GitHub Private Vulnerability Reporting](https://github.com/Chepko932/OctoOffice/security/advisories/new) (preferred, see [`SECURITY.md`](SECURITY.md) for details)
Security policy: [`SECURITY.md`](SECURITY.md) · API docs: [`docs/api.md`](docs/api.md) · OpenAPI spec: [`docs/openapi.json`](docs/openapi.json)
</div>
---
<div align="center">
## Troubleshooting
</div>
- **`EADDRINUSE` / port in use** — Free the port with `lsof -iTCP:8800 -sTCP:LISTEN` (then `kill <pid>`), or override via env: `PORT=8801 pnpm dev`. Web and API ports can also be set in `.env`.
- **Node version error** — Requires Node **>= 22**. Install via [nvm](https://github.com/nvm-sh/nvm): `nvm install 22 && nvm use 22`.
- **`OAUTH_ENCRYPTION_SECRET must be set` at startup** — Run the secret-generation snippet from the [Manual setup](#manual-setup) section, or the interactive wizard (`bash install.sh`).
- **`pnpm run setup` did not create `.env`** — `pnpm run setup` only injects AGENTS.md orchestration rules. Note: use `pnpm run setup`, not `pnpm setup` (the latter is a built-in pnpm command that does something else). Use `bash install.sh` (macOS/Linux) or `install.ps1` (Windows) for interactive first-time setup, or run the manual snippet above.
- **Local verification** — you can reproduce the CI pipeline locally with `pnpm format:check && pnpm lint && pnpm build && pnpm test`.
More: [`docs/`](docs/) · [`SECURITY.md`](SECURITY.md) · [`CONTRIBUTING.md`](CONTRIBUTING.md)
---
<div align="center">
## Contributing
1. Fork the repository
2. Create a feature branch from `dev` (`git checkout -b feature/amazing-feature`)
3. Run checks: `pnpm format:check && pnpm lint && pnpm build && pnpm test:ci`
4. Open a Pull Request to `dev`
Full guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)
</div>
---
<div align="center">
## License
[Apache 2.0](LICENSE) — Free for personal and commercial use.
</div>
---
<div align="center">
<img src="public/assets/octooffice-logo-white.svg#gh-dark-mode-only" width="48" alt="OctoOffice" />
<img src="public/assets/octooffice-logo-black.svg#gh-light-mode-only" width="48" alt="OctoOffice" />
<br><br>
<strong>OctoOffice — Where AI agents come to work.</strong>
</div>
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器