{"slug": "show-hn-earshot-a-homebrew-claude-tag", "title": "Show HN: Earshot, a homebrew Claude Tag", "summary": "A developer released Earshot, an open-source Slack bot that uses Anthropic's Claude to autonomously scope, delegate, and track tasks from Slack threads, with state-machine durability and safety guards enforced by the harness. The tool runs on Bun with SQLite, uses Codex CLI for model access, and is designed for trusted workspaces where silence is a feature and the model never holds keys.", "body_md": "A homebrew [Claude Tag](https://www.anthropic.com/news/introducing-claude-tag).\n\nBro is literally rebuilding OpenClaw for no reason\n\nIt sits in your Slack channels and mostly stays quiet. Mention it and it takes real work: scoping, filing, delegating, tailing. Between mentions it listens, and when the prod alert fires at 2am it has already read the thread, checked the tracker, and decided whether to wake you.\n\n```\nyou   @earshot that parentNode crash is back, scope it and hand it off\nbot   on it, scoping first so the handoff has a real brief\n      ⚙ reading thread · checking linear ×3\n      scoped and delegated: ENG-165 now carries the prior root cause,\n      starting files, and acceptance criteria. i'll tail it and only ping\n      you on PR, escalation, done, or stuck.\n      ⋮\n      ENG-165 hit staging with PR #840 attached.\n```\n\n**Every task reports back.** A thread is not a task: work lives in a durable ledger with a state\nmachine, timers, and restart recovery. Kill the process mid-task and it still tells the channel\nhow it ended.\n\n**Silence is a feature.** It learns what each channel *is* and calibrates; standing rules are one\nline of YAML. Posts are hard-capped per day, and an emoji is the preferred acknowledgment.\n\n**The model doesn't hold the keys.** Grants, confirmation gates, spend budgets, append-only\naudit, all enforced by the harness. Prompts shape behavior; they don't guard it.\n\nOne process, one `bun:sqlite`\n\nfile, near-zero dependencies. Readable in an afternoon.\n\nWarning\n\nSingle-operator build for trusted workspaces. Venue membership is the ACL.\n\n[Bun](https://bun.sh) + a Slack app in Socket Mode + the Codex CLI logged in via\n[exe.dev](https://exe.dev) (bills to a ChatGPT plan, not API tokens).\n\n```\ngit clone https://github.com/Octember/earshot && cd earshot\nbun install\ncp deploy/policy.example.yaml policy.yaml\n# .env: SLACK_BOT_TOKEN, SLACK_APP_TOKEN, SLACK_BOT_USER_ID\n\nbun run src/main.ts doctor\nbun run src/main.ts start\n```\n\nRunbook: [DEPLOY.md](/Octember/earshot/blob/main/DEPLOY.md). Or build your own from the spec: the behavior is fully defined\nin [SPEC.md](/Octember/earshot/blob/main/SPEC.md) (RFC-2119, runtime- and platform-agnostic); `bun test`\n\nis its conformance\nmatrix.", "url": "https://wpnews.pro/news/show-hn-earshot-a-homebrew-claude-tag", "canonical_source": "https://github.com/Octember/earshot", "published_at": "2026-07-04 03:36:34+00:00", "updated_at": "2026-07-04 03:50:05.675458+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "large-language-models", "ai-tools"], "entities": ["Anthropic", "Claude", "Slack", "Bun", "Codex CLI", "exe.dev", "GitHub", "Octember"], "alternates": {"html": "https://wpnews.pro/news/show-hn-earshot-a-homebrew-claude-tag", "markdown": "https://wpnews.pro/news/show-hn-earshot-a-homebrew-claude-tag.md", "text": "https://wpnews.pro/news/show-hn-earshot-a-homebrew-claude-tag.txt", "jsonld": "https://wpnews.pro/news/show-hn-earshot-a-homebrew-claude-tag.jsonld"}}