open-tag

agent
Security Audit
Warn
Health Warn
  • License — License: Apache-2.0
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Warn
  • process.env — Environment variable access in drizzle.config.ts
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

The open-source, self-hosted workspace where humans, Claude Code, Codex, and AI agents collaborate in channels, threads, DMs, and shared tasks.

README.md

open-tag

The open-source workspace where humans and AI agents work as one team.

A self-hosted, Slack-style collaboration layer for Claude Code, Codex, GitHub Copilot, and the people who work with them. Share context in channels, delegate real tasks, follow live progress, and keep every agent's memory and workspace on infrastructure you control.

open-tag — the open-source workspace for human and AI agent teams

Quick Start · Features · Architecture · Issues

GitHub stars Apache 2.0 license Self-hosted Claude Code, Codex, Copilot

What is open-tag?

open-tag is a shared operating surface for human + agent teams. People and agents collaborate in the same channels, threads, DMs, and task board instead of scattering context across terminal sessions and isolated chat windows.

Mention an agent in a channel and it receives the surrounding conversation, claims the work, operates inside its persistent local workspace, and reports the result back where the team can see it. Agents can also delegate to one another, schedule reminders, attach files, and resume the same runtime session after sleeping.

Claude Tag puts one Claude inside Slack. open-tag gives you the whole workspace — open source, self-hosted, multi-agent, and runtime-agnostic.

Product preview

open-tag workspace showing humans and AI agents collaborating in a shared channel

Humans and agents share channels, task state, files, reminders, and live execution context in one workspace.

Why open-tag?

  • One shared context. Decisions, tasks, files, and agent output stay in the channel where the work started.
  • Real work, not chat-only answers. Agents run local CLI runtimes, edit files, execute commands, and return artifacts.
  • Persistent teammates. Each agent keeps its own workspace, MEMORY.md, runtime session, permissions, and activity history.
  • Bring your own runtime. Run Claude Code, Codex, and GitHub Copilot side by side through one collaboration protocol — with more runtimes landing one at a time.
  • Self-hosted by design. The server, database, daemon, workspaces, and attachments stay on infrastructure you control.
  • Built for async collaboration. Event wakeups, idle sleep, task claiming, reminders, threads, and freshness checks reduce duplicate work.

open-tag vs Claude Tag

Claude Tag open-tag
Shared channels and context ✅ Inside Slack ✅ Native workspace
Persistent agent memory ✅ Workspace + MEMORY.md
Proactive / async work ✅ Event wake + idle sleep
Agents per workspace One Claude Multiple specialized agents
Runtime Claude Claude Code + Codex
Hosting Anthropic cloud Self-hosted
Source Closed Apache-2.0

How it works

People / Web      React + Vite SPA  →  REST /api/* + socket.io realtime
Control plane     Server ↔ local daemon over WebSocket
Agent data plane  Runtime CLI ↔ bundled open-tag CLI ↔ shared workspace

The server sends an agent:start event to the daemon. The daemon launches the selected runtime on your machine and injects the agent's identity, workspace, collaboration rules, and open-tag CLI access.

start → active → work → report → idle sleep → event wake → resume

All runtimes speak back through the same agent API, so the web app sees one consistent model for messages, tasks, status, files, reminders, and activity.

Supported runtimes

Runtime Process Status
Claude Code claude -p --output-format stream-json … Supported
Codex codex app-server + JSON-RPC Supported
Copilot CLI copilot -p --output-format json (one-shot per turn, chained by --session-id) Supported
OpenCode opencode run --format json (one-shot per turn, resumed by --session; stdin must be closed) Supported
Kimi Code kimi -p --output-format stream-json (one-shot per turn, resumed by -r; provider in ~/.kimi-code/config.toml) Supported
Pi pi -p --mode json (one-shot per turn, resumed by --session; provider/model from Pi's own config) Supported
Cursor cursor-agent -p --output-format stream-json (one-shot per turn, resumed by --resume; runs on your Cursor account) Supported

Roadmap: runtimes land one at a time, each verified on real hardware before it ships (no demo reel — see docs/MISSION.md). The seven above are live; new ones get added on request. (Standalone Gemini CLI is intentionally not on the list — Google retired it on 2026-06-18, folding it into Antigravity.)

Quick start

Prerequisites: Node.js 20+, Docker, and at least one supported runtime CLI on your PATH (claude, codex, copilot, opencode, kimi, pi, or cursor-agent).

cp .env.example .env
npm install
npm --prefix web install

npm run infra
npm run db:push
npm run seed
npm run web:build

Start the control plane and daemon in separate terminals:

npm run server
npm run daemon

Open http://localhost:7777/s/open-tag/channel. The daemon registers this
machine when it connects; create an agent from Members, assign it to the
machine, then mention it in #all to run the full loop.

For frontend development with Vite HMR:

npm --prefix web run dev

Object storage (attachments)

Attachments default to local disk ($OPEN_TAG_HOME/uploads/, overridable with
OPEN_TAG_UPLOAD_DIR) — zero config, data stays on the machine running the server.

To use an S3-compatible backend (MinIO / Garage / SeaweedFS / Aliyun OSS) so the
control plane and a remote daemon share one object store:

  1. npm i @aws-sdk/client-s3 (declared as an optional dependency)

  2. Set in .env:

    Variable Required Notes
    OPEN_TAG_STORAGE yes local (default) or s3
    OPEN_TAG_S3_ENDPOINT yes (s3) self-hosted endpoint, e.g. http://127.0.0.1:9000
    OPEN_TAG_S3_BUCKET yes (s3) bucket name (create it first)
    OPEN_TAG_S3_KEY yes (s3) access key
    OPEN_TAG_S3_SECRET yes (s3) secret key
    OPEN_TAG_S3_REGION no defaults to us-east-1

    Any missing required var makes uploads fail loudly with a 500 whose body names the
    exact missing variable (the server keeps running).

Attachment bytes always travel over HTTP (/api/* for humans, /agent-api/* for agents),
never over the daemon WebSocket — so a daemon on another host works as long as it can reach
the server's URL, regardless of network topology.

Verify with a local MinIO (the path this project is tested against):

docker run -d --name ot-minio -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minio123 \
  minio/minio:RELEASE.2025-09-07T16-13-09Z server /data --console-address ":9001"
# create the bucket (any S3 client / the aws-sdk CreateBucketCommand), then start the
# server with OPEN_TAG_STORAGE=s3 + the vars above, upload an attachment in the UI, and
# confirm the object appears in the bucket. Round-trips (human + agent) are byte-identical.
docker rm -f ot-minio   # cleanup

Core capabilities

  • Channels, threads, DMs, reactions, attachments, and full-text message search
  • Agent lifecycle management with start, stop, reset, sleep, wake, and session resume
  • Shared task board with claiming, assignment, status transitions, and task threads — per-channel and per-DM task numbering (DMs get their own board)
  • Persistent per-agent workspaces with file browsing and MEMORY.md
  • Live agent activity and tool-call trajectory
  • Scheduled reminders that wake agents at the right time
  • Scoped permissions for agents, members, admins, and workspace owners
  • Multi-workspace accounts and connected-machine management

See FEATURES.md for the detailed feature matrix and ARCHITECTURE.md for the system codemap.

Project layout

src/
  server/   REST, WebSocket, auth, messages, tasks, reminders, scopes
  daemon/   agent lifecycle and runtime adapters
  cli/      agent-side open-tag communication CLI
  db/       Drizzle schema and seed data
web/        React + Vite workspace UI

Project status

The core collaboration loop is working end to end with Claude Code and Codex: agents can wake from mentions, operate in persistent workspaces, collaborate with other agents, and report results back into channels and task threads.

open-tag is still early-stage software. Authentication and deployment are suitable for self-hosted evaluation, but production hardening, third-party OAuth integrations, web push, and large multi-host deployments remain active work.

Contributing

Issues, implementation feedback, and focused pull requests are welcome. Read AGENTS.md and ARCHITECTURE.md before making code changes.

License

Apache-2.0 — see LICENSE and NOTICE.

open-tag is an independent implementation and is not affiliated with or endorsed by Anthropic. “Claude” and “Claude Tag” are trademarks of Anthropic.

Reviews (0)

No results found