opentag.im Mention any coding agent. Get proof, not promises. OpenTag is the open, local-first gateway between your team's threads and coding agents.
$ npx -y skills add amplifthq/opentag --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: amplifthq/opentag
What's inside
Mention any coding agent. Get proof, not promises.
OpenTag is the open, local-first gateway between your team's threads and coding agents. Mention @opentag in Slack or GitHub, and it runs Claude Code, Codex, Cursor, or any Agent Client Protocol agent on your own machine โ then replies in the same thread with evidence, not just a summary.
Slack, GitHub, GitLab, Linear, and Lark / Feishu are fully supported today; Telegram, Discord, and Microsoft Teams ship as previews.
Mention OpenTag in Slack, approve the suggested action, and get a real GitHub pull request.
https://github.com/user-attachments/assets/86edc4e1-7de9-4d07-a0ba-847fa6438191

OpenTag treats the thread where a request starts as the approval surface for agent-proposed system-of-record mutations. When an agent suggests a change, OpenTag renders a compact receipt that shows what will change, whether it is ready to apply, and which decision is safe now.
Apply appears only when the dispatcher confirms a configured adapter can execute the action. Otherwise the receipt shows setup or attention needed, and the local audit trail stays available through commands such as opentag status --run <run_id>.
Each run also keeps a local agent work ledger: the source event, admission decision, context packet snapshot, executor capability snapshot, produced artifacts, callback delivery, and final outcome stay available through status and dispatcher audit APIs without flooding the human thread.
Requires Node.js 22.14 or newer.
npm install -g @opentag/cli@latest
opentag setup
No global install for one-off terminal-mode checks:
npx @opentag/cli setup
For background service mode, prefer the global install above so the service definition points at a stable CLI path instead of an npx temporary location.
opentag setup is the main entry point. It walks through the practical choices needed to run OpenTag locally:
After setup saves the config, choose how OpenTag should run:
For scripted setup, use --service to choose the recommended background mode without the final prompt:
opentag setup --service
--service installs and starts the local background service after setup. Background service mode uses LaunchAgent on macOS and systemd --user on Linux; on other platforms, use terminal mode with opentag start for now. If you skip startup or stop OpenTag later, run opentag start manually for terminal mode or opentag service start for background mode.
Once OpenTag is running, mention it from the connected platform:
@opentag investigate this
OpenTag runs the selected coding agent locally and replies back through that platform.
If you use Codex or Claude Code and do not want to set this up by hand, start a new agent session and paste:
Help me set up OpenTag from https://github.com/amplifthq/opentag.
Use the published OpenTag CLI. Please:
1. Check that Node.js 22.14 or newer is available.
2. Install or run the published OpenTag CLI.
3. Run opentag setup and help me choose Slack, GitHub, GitLab, Linear, Lark / Feishu, Telegram, Discord, or Microsoft Teams, a coding agent, and a local project.
4. When platform credentials are needed, open the matching setup guide in the repository and walk me through it.
5. When setup asks how OpenTag should run, choose the recommended background service option. Then verify with opentag service status and opentag doctor. If service mode is unsupported or I choose terminal mode, use opentag start and keep that terminal open.
Do not invent credentials or secrets. Ask me before entering any token, app ID, channel ID, repository, or project path.
Agents can also follow the full agent-readable setup checklist in Agent-readable install guide.
Use the guide for the platform you choose in opentag setup.
| Platform | Status | Best first path | Guide |
|---|---|---|---|
| Slack | โ Full | Use Socket Mode for local development | Slack setup |
| GitHub | โ Full | Use a repository webhook and GitHub token | GitHub setup |
| GitLab | โ Full | Use a project Note Hook and GitLab access token | GitLab setup |
| Linear | โ Full | Use a workspace webhook and OAuth App install | Linear setup |
| Lark / Feishu | โ Full | Scan the Personal Agent QR code from setup | Lark / Feishu setup |
| Telegram | ๐งช Preview | Use BotFather token with local getUpdates polling | Telegram setup |
| Discord | ๐งช Preview | Use a bot token with local Gateway delivery (slash command only) | Discord setup |
| Microsoft Teams | ๐งช Preview | Use an Azure Bot and public HTTPS tunnel to the local dispatcher (relay mode is not supported) | Microsoft Teams setup |
opentag setup can install and start the recommended background service, run OpenTag in the current terminal, or save config without starting. opentag setup --service skips the final prompt and installs plus starts the background service on macOS or Linux. Both service and terminal modes start:
Stop terminal mode with:
Ctrl-C
Stop background service mode with:
opentag service stop
OpenTag stores local config here:
~/.config/opentag/config.json
Runtime state and isolated worktrees default to:
~/.local/state/opentag
OpenTag's CLI path is local-first.
| Coding agent | Status | Notes |
|---|---|---|
| Codex | Ready when npx and login are available | Pinned Registry package @agentclientprotocol/codex-acp@1.1.2 |
| Claude Code | Ready when npx and login are available | Pinned Registry package @agentclientprotocol/claude-agent-acp@0.59.0 |
| Cursor | Ready when Cursor CLI is installed and logged in | Uses the installed cursor-agent acp command |
| OpenCode | Ready when npx and provider configuration are available | Pinned official package opencode-ai@1.18.1; ACP launches in pure mode so external plugins cannot write non-protocol data to stdout |
| Hermes | Ready when installed | Uses hermes -p <profile> acp with a configured local provider |
| OpenClaw | Ready when installed and its Gateway is configured | Uses the local openclaw acp bridge; cancellation is currently best effort and does not claim termination of Gateway-owned tool subprocesses |
| Echo | Dev/test only | Does not run a real coding agent |
| Command | What it does |
|---|---|
opentag setup | Create or update local OpenTag config, then offer to start it |
opentag setup --service | Create or update local OpenTag config, then install and start the background service |
opentag start | Start the local OpenTag stack in the current terminal |
opentag pair | Pair this local runner with a remote relay |
opentag service install | Install the OpenTag background service |
opentag service start | Start the installed background service |
opentag service stop | Stop the installed background service |
opentag service restart | Restart the installed background service |
opentag service status | Show background service status and runtime readiness |
opentag service logs | Show recent background service logs |
opentag service uninstall | Uninstall the OpenTag background service |
opentag service autostart enable | Enable background service login autostart |
opentag service autostart disable | Disable background service login autostart |
opentag status | Show local config and runtime status; add --run <run_id>, --channel provider:account/conversation, or --workstream <id> for scoped detail |
opentag factory ... | Create or inspect immutable recipes and WorkThread-only workstreams, then submit or retrieve restart-safe admission batches from JSON |
opentag cancel | Request cancellation for a run or the active run in a source container |
opentag completion escalations --run <run_id> | List structured human escalations, audiences, options, expiry, and attribution for a run |
opentag completion acknowledge --escalation <id> ... | Attribute acknowledgement without resolving the blocking escalation |
opentag completion resolve --escalation <id> ... | Record an attributed bounded resolution; resume work through a new source-thread task |
opentag doctor | Check dispatcher, bindings, checkouts, and executors |
opentag ingest | Ingest a fenced local external agent progress or completion event |
opentag ingest-template | Print a shell template or manifest for local external agent hook ingest |
opentag platforms | List platform setup support and runtime capabilities |
opentag executors | List available coding agents and runtime capabilities |
opentag maintenance prune-source-deliveries | Prune stale source delivery replay keys after their runs are terminal |
opentag config path | Print the local config path |
opentag config show | Print redacted local config |
Remove the global CLI package:
npm uninstall -g @opentag/cli
Remove local OpenTag config and state:
rm -rf ~/.config/opentag ~/.local/state/opentag
flowchart LR
A["Slack, GitHub, GitLab, Linear, Lark / Feishu, Telegram, Discord, or Microsoft Teams"] --> B["OpenTag listener"]
B --> C["Local dispatcher"]
C --> D["Local runner"]
D --> E["Built-in or custom ACP executor"]
E --> F["Reply back to the platform"]
The important boundary: platforms receive messages, OpenTag coordinates the run, and the coding agent executes on your machine.
The default loop is artifact-first rather than chat-first: a final reply should compress the outcome, link to artifacts such as reports, patches, pull request intents, or next actions, and point back to local audit/status for detail.
From source:
corepack pnpm install
corepack pnpm test
corepack pnpm typecheck
corepack pnpm build
Install the local development command:
corepack pnpm opentag-dev
opentag-dev setup
Package source version: v0.9.0. npm dist-tags are authoritative for the currently published channel versions. The coordinated package family contains 16 public packages under the @opentag scope.
| Package | Purpose |
|---|---|
@opentag/cli | Setup and local runtime command line interface |
@opentag/local-runtime | In-process local dispatcher, runner, and platform runtime |
@opentag/core | Protocol schemas, types, mention parsing, and JSON Schema exports |
@opentag/governance | Deterministic completion, routing, and workstream evaluation |
@opentag/client | Dispatcher HTTP client |
@opentag/slack | Slack Socket Mode, Events API handling, and thread replies |
@opentag/github | GitHub webhook handling, comments, PR helpers, and action application |
@opentag/gitlab | GitLab webhook handling, note replies, merge request helpers, and action application |
@opentag/linear | Linear webhook handling, read-only project backlog queries, issue comments, and issue action application |
@opentag/lark | Lark / Feishu ingress, Personal Agent registration, and replies |
@opentag/telegram | Telegram polling/webhook normalization, bot replies, and source-thread controls |
@opentag/discord | Discord Gateway/webhook slash-command interactions and channel replies |
@opentag/teams | Microsoft Teams Bot Framework ingest, channel replies, and action apply |
@opentag/runner | Executor contracts plus the generic ACP host and built-in launch profiles |
@opentag/store | SQLite persistence |
@opentag/dispatcher | Embeddable dispatcher and callback sinks |
OpenTag is licensed under the MIT License. See LICENSE.
.codegraph/
.gitignore
.env.example
.github/
CODEOWNERS
dependabot.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
pull_request_template.md
workflows/
ci.yml
.gitignore
.superpowers/
sdd/
progress.md
apps/
dispatcher/
package.json
src/
index.ts
tsconfig.json
tsup.config.ts
github-probot/
package.json
src/
app.ts
index.ts
test/
app.test.ts
tsconfig.json
tsup.config.ts
lark-events/
package.json
scripts/
register-personal-agent.cjs
src/
app.ts
index.ts
ingress.ts
test/
app.test.ts
ingress.test.ts
tsconfig.json
tsup.config.ts
opentagd/
package.json
src/
config.ts
daemon.ts
doctor.ts
index.ts
pr.ts
runtime.ts
test/
config.test.ts
daemon.test.ts
doctor.test.ts
integration.test.ts
pr.test.ts
runtime.test.ts
tsconfig.json
tsup.config.ts
slack-events/
package.json
src/
app.ts
config.ts
index.ts
test/
app.test.ts
config.test.ts
tsconfig.json
tsup.config.ts
telegram-events/
package.json
src/
app.ts
index.ts
test/
app.test.ts
tsconfig.json
tsup.config.ts
assets/
favicon.ico
favicon.png
github-social-preview.png
github-social-preview.svg
opentag-github-to-pr.gif
opentag-mark-transparent.png
opentag-mark.png
opentag-mark.svg
readme-hero.png
readme-hero.svg
readme-logo-dark.png
readme-logo-light.png
wechat-group-qr.jpg
CHANGELOG.md
CONTEXT.md
CONTRIBUTING.md
DESIGN.md
docs/
acp-agent-integration.md
acp-first-agent-runtime-design.md
adapter-authoring.md
adr/
0001-accepted-progress-attribution.md
0002-durable-reassessment-obligations.md
agent-install.md
agent-work-protocol.md
configuration.md
design.md
executor-protocol.md
governance-validation-matrix.md
hook-ingest.md
hyperframes/
opentag-cli-quickstart/
AGENTS.md
assets/
opentag-mark.svg
CLAUDE.md
DESIGN.md
hyperframes.json
index.html
meta.json
package.json
README.md
integration-taxonomy.md
lark-local-start.md
live-e2e-smoke-harness.md
npm-release.md
platforms/
discord.en.md
discord.zh-CN.md
github.en.md
github.zh-CN.md
gitlab.en.md
gitlab.zh-CN.md
lark.en.md
lark.zh-CN.md
linear.en.md
linear.zh-CN.md
README.md
slack.en.md
slack.zh-CN.md
teams.en.md
teams.zh-CN.md
telegram.en.md
telegram.zh-CN.md
real-integration-smoke-test.md
relay-security-hardening.md
replay-harness.md
software-factory-control-plane.md
source-thread-action-receipts.md
superpowers/
plans/
2026-06-24-opentag-v0.md
2026-07-12-acp-first-agent-runtime.md
thread-runtime-design.md
versioning.md
examples/
custom-runner/
package.json
README.md
src/
index.ts
tsconfig.json
embedded-dispatcher/
package.json
README.md
src/
index.ts
tsconfig.json
github-to-echo/
README.md
run.example.json
github-to-pr/
README.md
LICENSE
package.json
packages/
cli/
package.json
README.md
src/
cancel.ts
catalogs/
capabilities.ts
executors.ts
languages.ts
platforms.ts
commands/
executors.ts
platforms.ts
setup.ts
completion.ts
config.ts
doctor.ts
factory.ts
health.ts
index.ts
ingest.ts
lark-registration.ts
linear-backlog-config.ts
maintenance.ts
pair.ts
platforms/
discord/
display.ts
github/
display.ts
gitlab/
display.ts
lark/
display.ts
registration-ui.ts
saved-config.ts
linear/
display.ts
ports.ts
teams/
display.ts
telegram/
display.ts
project-target-summary.ts
qrcode-terminal.d.ts
relay-security.ts
secret-readiness.ts
service.ts
setup/
setup.ts
builders.ts
defaults.ts
flow.ts
guides.ts
summary.ts
types.ts
slack-linear-backlog.ts
start.ts
status.ts
ui/
clack.ts
messages.ts
prompts.ts
version.ts
test/
cancel.test.ts
capabilities.test.ts
clack.test.ts
completion.test.ts
config.test.ts
docs-contract.test.ts
doctor.test.ts
executors.test.ts
factory.test.ts
ingest.test.ts
lark-registration.test.ts
linear-backlog-config.test.ts
maintenance.test.ts
pair.test.ts
platform-contract.test.ts
platforms/
platforms.test.ts
gitlab/
display.test.ts
release-package-plan.test.ts
service.test.ts
setup-defaults.test.ts
setup-platforms.test.ts
setup-saved-lark-display.test.ts
setup.teams.test.ts
setup.test.ts
slack-linear-backlog.test.ts
start.test.ts
status.test.ts
version.test.ts
tsconfig.json
tsup.config.ts
client/
package.json
README.md
src/
index.ts
test/
client.test.ts
tsconfig.json
tsup.config.ts
core/
package.json
README.md
src/
action.ts
capability.ts
channel-protocol.ts
credential-safety.ts
factory.ts
index.ts
integration-protocol.ts
json-schema.ts
mention.ts
permission-scope.ts
presentation.ts
project-target.ts
protocol.ts
request-body.ts
routing.ts
schema.ts
test/
action.test.ts
capability.test.ts
channel-protocol.test.ts
credential-safety.test.ts
factory.test.ts
integration-protocol.test.ts
json-schema.test.ts
mention.test.ts
permission-scope.test.ts
presentation.test.ts
project-target.test.ts
protocol.test.ts
reassessment-obligation.test.ts
request-body.test.ts
routing.test.ts
schema.test.ts
zod-compatibility.test.ts
tsconfig.json
tsup.config.ts
discord/
package.json
README.md
src/
gateway.ts
index.ts
interactions-app.ts
normalize.ts
render.ts
signature.ts
test/
gateway.test.ts
interactions-app.test.ts
normalize.test.ts
render.test.ts
signature.test.ts
tsconfig.json
tsup.config.ts
dispatcher/
package.json
README.md
src/
admission.ts
callbacks.ts
completion-governance.ts
continuation-presentation.ts
digest.ts
index.ts
presentation.ts
reassessment-obligations.ts
server.ts
source-thread-control.ts
test/
admission.test.ts
callbacks.teams.test.ts
callbacks.test.ts
completion-governance-replay.test.ts
completion-governance.test.ts
digest.test.ts
fixtures/
replay/
github-completion-governance.json
github-governed-loop.json
gitlab-live-derived-loop.json
lark-live-derived-loop.json
slack-governed-loop.json
github-factory-acceptance.test.ts
github-registry-artifact.test.ts
lark-callback.test.ts
linear-live-smoke-script.test.ts
presentation.test.ts
reassessment-obligations.test.ts
replay-harness.test.ts
server.test.ts
slack-linear-live-acceptance.test.ts
workstream-batches.test.ts
tsconfig.json
tsup.config.ts
github/
package.json
README.md
src/
apply.ts
completion-evidence.ts
index.ts
ingress.ts
normalize.ts
pull-request.ts
render.ts
test/
apply.test.ts
completion-evidence.test.ts
... 271 moreFAQ
opentag is a Claude Code plugin with 1 hand-picked skill for automation work, indexed on Flowy. Install it with the command on its page. It includes opentag. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.