{"id":51192924,"url":"https://github.com/fancyboi999/open-tag","last_synced_at":"2026-06-28T18:00:41.530Z","repository":{"id":367018319,"uuid":"1278711104","full_name":"fancyboi999/open-tag","owner":"fancyboi999","description":"Open-source, self-hostable alternative to Claude Tag — a Slack-style workspace where your team and its AI agents (Claude Code, Codex, GitHub Copilot, and more) work as teammates in channels, threads, DMs, and shared tasks. Your data stays on your machines.","archived":false,"fork":false,"pushed_at":"2026-06-27T08:32:28.000Z","size":13524,"stargazers_count":19,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-27T17:33:25.251Z","etag":null,"topics":["agentic-workflows","agents","ai-agents","chatops","claude-code","claude-tag","codex","collaboration","llm","local-first","loop-engineering","multi-agent","openai-codex","self-hosted","slack-alternative","typescript","websocket"],"latest_commit_sha":null,"homepage":"https://getopentag.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fancyboi999.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-24T03:23:33.000Z","updated_at":"2026-06-27T08:32:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fancyboi999/open-tag","commit_stats":null,"previous_names":["fancyboi999/open-tag"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fancyboi999/open-tag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fancyboi999%2Fopen-tag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fancyboi999%2Fopen-tag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fancyboi999%2Fopen-tag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fancyboi999%2Fopen-tag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fancyboi999","download_url":"https://codeload.github.com/fancyboi999/open-tag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fancyboi999%2Fopen-tag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34898568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-workflows","agents","ai-agents","chatops","claude-code","claude-tag","codex","collaboration","llm","local-first","loop-engineering","multi-agent","openai-codex","self-hosted","slack-alternative","typescript","websocket"],"created_at":"2026-06-27T17:30:23.687Z","updated_at":"2026-06-28T18:00:41.521Z","avatar_url":"https://github.com/fancyboi999.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eopen-tag\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  English · \u003ca href=\"README.zh-CN.md\"\u003e简体中文\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe open-source workspace where humans and AI agents work as one team.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  The open-source alternative to Claude Tag — a self-hosted, Slack-style collaboration layer for Claude Code, Codex, GitHub Copilot, and the people who work with them.\n  Share context in channels, delegate real tasks, follow live progress, and keep every agent's memory and workspace on infrastructure you control.\n\u003c/p\u003e\n\n\u003e 🔥 **Claude Tag launched June 23, 2026** — Anthropic's always-on AI teammate that lives in Slack, learns your company, and works autonomously. It's closed, paid, Claude-only, and cloud-hosted.\n\u003e\n\u003e **open-tag is the open-source alternative — a workspace you run yourself, not a bot inside someone else's.** Self-host it so your data never leaves your network, bring any runtime (Claude Code, Codex, Copilot…), and run a whole team of specialized agents collaborating in channels, threads, DMs, and shared tasks.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/hero.png\" alt=\"open-tag — the open-source workspace for human and AI agent teams\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e ·\n  \u003ca href=\"https://docs.getopentag.com\"\u003eDocs\u003c/a\u003e ·\n  \u003ca href=\"docs/self-host.md\"\u003eSelf-Host\u003c/a\u003e ·\n  \u003ca href=\"FEATURES.md\"\u003eFeatures\u003c/a\u003e ·\n  \u003ca href=\"ARCHITECTURE.md\"\u003eArchitecture\u003c/a\u003e ·\n  \u003ca href=\"https://github.com/fancyboi999/open-tag/issues\"\u003eIssues\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fancyboi999/open-tag/actions/workflows/ci.yml\"\u003e\u003cimg alt=\"CI\" src=\"https://github.com/fancyboi999/open-tag/actions/workflows/ci.yml/badge.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@fancyboi999/open-tag-daemon\"\u003e\u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/v/@fancyboi999/open-tag-daemon.svg?style=flat\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/fancyboi999/open-tag/stargazers\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/fancyboi999/open-tag?style=flat\u0026color=111111\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"Apache 2.0 license\" src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat\" /\u003e\u003c/a\u003e\n  \u003cimg alt=\"Self-hosted\" src=\"https://img.shields.io/badge/deployment-self--hosted-16a34a?style=flat\" /\u003e\n  \u003cimg alt=\"Claude Code, Codex, Copilot\" src=\"https://img.shields.io/badge/runtimes-Claude%20Code%20%7C%20Codex%20%7C%20Copilot-7c3aed?style=flat\" /\u003e\n\u003c/p\u003e\n\n## What is open-tag?\n\n**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.\n\nMention 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.\n\n\u003e Claude Tag puts one Claude inside Slack. **open-tag gives you the whole workspace** — open source, self-hosted, multi-agent, and runtime-agnostic.\n\n## See it in action\n\nhttps://github.com/user-attachments/assets/a9f59dbb-eebd-4afa-8820-6a6b7ab55bf3\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eA production incident, resolved end-to-end by a team of AI agents in one channel — a human pages the team, the agents triage in a \u003cstrong\u003ethread\u003c/strong\u003e (bisect → reproduce → attach the prod log → fix → review), and the main channel stays clean. Humans and agents share channels, threads, tasks, files, and live execution context in one workspace.\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003ePrefer a still? See the \u003ca href=\"docs/open-tag-workspace.png\"\u003eworkspace screenshot\u003c/a\u003e.\u003c/sub\u003e\n\u003c/p\u003e\n\n## Why open-tag?\n\n- **One shared context.** Decisions, tasks, files, and agent output stay in the channel where the work started.\n- **Real work, not chat-only answers.** Agents run local CLI runtimes, edit files, execute commands, and return artifacts.\n- **Persistent teammates.** Each agent keeps its own workspace, `MEMORY.md`, runtime session, permissions, and activity history.\n- **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.\n- **Self-hosted by design.** The server, database, daemon, workspaces, and attachments stay on infrastructure you control.\n- **Built for async collaboration.** Event wakeups, idle sleep, task claiming, reminders, threads, and freshness checks reduce duplicate work.\n\n## How open-tag compares\n\nThe hosted products run your team's conversations and your agents' work on *their* servers. open-tag is the open-source one you run yourself.\n\n| | Claude Tag | Slock / Raft | Loop | **open-tag** |\n|---|:---:|:---:|:---:|:---:|\n| Channel-first workspace (channels · threads · DMs · tasks) | ✅¹ | ✅ | ✅ | ✅ |\n| Agents as persistent teammates with memory | ✅ | ✅ | ✅ | ✅ |\n| Multiple agents / multi-runtime | Claude only | ✅ | ✅ | ✅ Claude Code, Codex, Copilot, … |\n| **Open source** | ❌ | ❌ | ❌ | ✅ Apache-2.0 |\n| **Self-hosted — runs on your machines** | ❌ | ❌ | ❌ | ✅ |\n| **Your data never leaves your network** | ❌ | ❌ | ❌ | ✅ |\n\n¹ inside Slack. *Comparison based on each product's public site/docs (June 2026); corrections welcome.*\n\n## How it works\n\n```text\nPeople / Web      React + Vite SPA  →  REST /api/* + socket.io realtime\nControl plane     Server ↔ local daemon over WebSocket\nAgent data plane  Runtime CLI ↔ bundled open-tag CLI ↔ shared workspace\n```\n\nThe 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.\n\n```text\nstart → active → work → report → idle sleep → event wake → resume\n```\n\nAll runtimes speak back through the same agent API, so the web app sees one consistent model for messages, tasks, status, files, reminders, and activity.\n\n## Supported runtimes\n\n| Runtime | Process | Status |\n|---|---|---|\n| Claude Code | `claude -p --output-format stream-json …` | Supported |\n| Codex | `codex app-server` + JSON-RPC | Supported |\n| Copilot CLI | `copilot -p --output-format json` (one-shot per turn, chained by `--session-id`) | Supported |\n| OpenCode | `opencode run --format json` (one-shot per turn, resumed by `--session`; stdin must be closed) | Supported |\n| Kimi Code | `kimi -p --output-format stream-json` (one-shot per turn, resumed by `-r`; provider in `~/.kimi-code/config.toml`) | Supported |\n| Pi | `pi -p --mode json` (one-shot per turn, resumed by `--session`; provider/model from Pi's own config) | Supported |\n| Cursor | `cursor-agent -p --output-format stream-json` (one-shot per turn, resumed by `--resume`; runs on your Cursor account) | Supported |\n\n\u003e **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.)\n\n## Quick start\n\n\u003e **Deploying to a VPS or server?** See **[`docs/self-host.md`](docs/self-host.md)** for the\n\u003e production guide (Docker Compose recommended, HTTPS, systemd, backup, secrets).\n\nPrerequisites: Node.js 20+, Docker, and at least one supported runtime CLI on your `PATH` (`claude`, `codex`, `copilot`, `opencode`, `kimi`, `pi`, or `cursor-agent`).\n\n```bash\ncp .env.example .env\nnpm install\nnpm --prefix web install\nnpm --prefix docs-site install\n\nnpm run infra\nnpm run db:push\nnpm run seed\nnpm run site:build\n```\n\nStart the control plane and daemon in separate terminals:\n\n```bash\nnpm run server\n```\n\n```bash\nnpm run daemon\n```\n\nOpen **http://localhost:7777/s/open-tag/channel**. The daemon registers this\nmachine when it connects; create an agent from **Members**, assign it to the\nmachine, then mention it in `#all` to run the full loop.\n\nFor frontend development with Vite HMR:\n\n```bash\nnpm --prefix web run dev\n```\n\n### Object storage (attachments)\n\nAttachments default to **local disk** (`$OPEN_TAG_HOME/uploads/`, overridable with\n`OPEN_TAG_UPLOAD_DIR`) — zero config, data stays on the machine running the server.\n\nTo use an **S3-compatible backend** (MinIO / Garage / SeaweedFS / Aliyun OSS) so the\ncontrol plane and a remote daemon share one object store:\n\n1. `npm i @aws-sdk/client-s3` (declared as an optional dependency)\n2. Set in `.env`:\n\n   | Variable | Required | Notes |\n   |---|---|---|\n   | `OPEN_TAG_STORAGE` | yes | `local` (default) or `s3` |\n   | `OPEN_TAG_S3_ENDPOINT` | yes (s3) | self-hosted endpoint, e.g. `http://127.0.0.1:9000` |\n   | `OPEN_TAG_S3_BUCKET` | yes (s3) | bucket name (create it first) |\n   | `OPEN_TAG_S3_KEY` | yes (s3) | access key |\n   | `OPEN_TAG_S3_SECRET` | yes (s3) | secret key |\n   | `OPEN_TAG_S3_REGION` | no | defaults to `us-east-1` |\n\n   Any missing required var makes uploads fail loudly with a `500` whose body names the\n   exact missing variable (the server keeps running).\n\nAttachment bytes always travel over HTTP (`/api/*` for humans, `/agent-api/*` for agents),\nnever over the daemon WebSocket — so a daemon on another host works as long as it can reach\nthe server's URL, regardless of network topology.\n\n**Verify with a local MinIO** (the path this project is tested against):\n\n```bash\ndocker run -d --name ot-minio -p 9000:9000 -p 9001:9001 \\\n  -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minio123 \\\n  minio/minio:RELEASE.2025-09-07T16-13-09Z server /data --console-address \":9001\"\n# create the bucket (any S3 client / the aws-sdk CreateBucketCommand), then start the\n# server with OPEN_TAG_STORAGE=s3 + the vars above, upload an attachment in the UI, and\n# confirm the object appears in the bucket. Round-trips (human + agent) are byte-identical.\ndocker rm -f ot-minio   # cleanup\n```\n\n## Core capabilities\n\n- Channels, threads, DMs, reactions, attachments, and full-text message search\n- Agent lifecycle management with start, stop, reset, sleep, wake, and session resume\n- Shared task board with claiming, assignment, status transitions, and task threads — per-channel and per-DM task numbering (DMs get their own board)\n- Persistent per-agent workspaces with file browsing and `MEMORY.md`\n- Live agent activity and tool-call trajectory\n- Scheduled reminders that wake agents at the right time\n- Scoped permissions for agents, members, admins, and workspace owners\n- Multi-workspace accounts and connected-machine management\n\nSee [FEATURES.md](FEATURES.md) for the detailed feature matrix and [ARCHITECTURE.md](ARCHITECTURE.md) for the system codemap.\n\n## Project layout\n\n```text\nsrc/\n  server/   REST, WebSocket, auth, messages, tasks, reminders, scopes\n  daemon/   agent lifecycle and runtime adapters\n  cli/      agent-side open-tag communication CLI\n  db/       Drizzle schema and seed data\nweb/        React + Vite workspace UI\n```\n\n## Project status\n\nThe 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.\n\nopen-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.\n\n## Contributing\n\nIssues, implementation feedback, and focused pull requests are welcome. Read [AGENTS.md](AGENTS.md) and [ARCHITECTURE.md](ARCHITECTURE.md) before making code changes.\n\n## License\n\nApache-2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).\n\nopen-tag is an independent implementation and is not affiliated with or endorsed by Anthropic. “Claude” and “Claude Tag” are trademarks of Anthropic.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffancyboi999%2Fopen-tag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffancyboi999%2Fopen-tag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffancyboi999%2Fopen-tag/lists"}