Skip to content

fix(addie): keep github issue tools reachable across Slack routing#2979

Merged
bokelley merged 2 commits into
mainfrom
bokelley/addie-gh-tool-hint
Apr 24, 2026
Merged

fix(addie): keep github issue tools reachable across Slack routing#2979
bokelley merged 2 commits into
mainfrom
bokelley/addie-gh-tool-hint

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

In Slack, Addie was telling users "I don't have GitHub issue tools available in this conversation" — even though draft_github_issue has always been in ALWAYS_AVAILABLE_TOOLS. Root cause: the "unavailable tool sets" hint described the content set as "draft GitHub issues, propose news sources, …". Claude read that and hallucinated unavailability.

Changes:

  • create_github_issue joins draft_github_issue in ALWAYS_AVAILABLE_TOOLS (they're a pair).
  • content set description no longer claims ownership of GitHub issuing.
  • buildUnavailableSetsHint now appends an explicit "Capabilities That ARE Always Available" section so the model can't conflate set-scoped descriptions with per-tool availability.
  • draft_github_issue enforces a repo allowlist (adcp, adcp-client, adcp-client-python, adcp-go) — Addie was inventing repo names like creative-agent from conversation context.
  • create_github_issue unavailable/connect responses now point at the canonical /member-hub (Addie was hallucinating /account).

Test plan

  • 72 unit tests pass (55 tests/addie/member-tools.test.ts + 17 server/tests/unit/addie/tool-sets.test.ts). Added coverage for always-available github tools, content description, buildUnavailableSetsHint, repo allowlist accept/reject.
  • Typecheck clean.
  • Live battery of 8 prompts against a local docker build confirmed:
    • Casual bug reports → draft_github_issue (safe default even when user says "create").
    • Explicit create_github_issue ask → unavailable-fallback now names /member-hub correctly.
    • User-supplied creative-agent repo → rejected, Addie falls back to adcp and notes the subproject in the body.
    • Vague "file this in github" → asks for clarification.
  • Post-deploy: confirm the Slack wg-builders scenario in the screenshot no longer produces "I don't have GitHub issue tools" — easiest check is a new Slack message.

🤖 Generated with Claude Code

bokelley and others added 2 commits April 23, 2026 22:05
- Add create_github_issue to ALWAYS_AVAILABLE_TOOLS alongside draft_github_issue.
- Drop "draft GitHub issues" from the content set description so the
  unavailable-sets hint can't claim the capability is off (root cause of Addie
  responding "I don't have GitHub issue tools" in Slack threads routed to
  knowledge).
- Extend buildUnavailableSetsHint with an explicit "always available" section
  listing github + escalation + account-linking so the model can't conflate
  set-scoped descriptions with per-tool availability.
- Tighten draft_github_issue with an explicit repo allowlist (adcp,
  adcp-client, adcp-client-python, adcp-go) — Addie was inventing non-existent
  repo names like `creative-agent` from conversation context.
- Point create_github_issue connect/unavailable responses at the canonical
  /member-hub page (Addie was hallucinating /account).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Derive buildUnavailableSetsHint's "always available" list from a
  blurb map filtered through ALWAYS_AVAILABLE_TOOLS membership, plus a
  drift-guard test that asserts every advertised tool actually is
  always-available. Rename is now observable; removal is a test fail.
- Drop get_account_link from the reminder — it's excluded in public
  channels via ENROLLMENT_TOOLS, and the hint couldn't tell.
- Remove draft_github_issue / create_github_issue from the content set's
  tools array. They live in ALWAYS_AVAILABLE_TOOLS; the duplication was
  the last place someone could regress this.
- Flip language: "callable in every conversation / call it instead of
  saying you can't" — affirmative directive is easier for Claude to
  follow than a negative prohibition.
- draft_github_issue now auto-routes unknown repos to adcp with a
  "Subproject:" note prepended to the body, instead of returning a
  rejection string that Addie might paste verbatim.
- create_github_issue not-connected copy leads with the Connect offer,
  not the failure reason. Reauth branch split out so the happy new-user
  case stays a one-line pitch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant