Skip to content

Agent Tools

The agent has access to MCP toolsets (Sourcegraph, Grafana) and custom function tools registered via ADK’s functiontool.New. Tools are defined in internal/agent/ with typed args/results.

ToolsetSourcePurpose
SourcegraphMCP serverCode search across all repos
GrafanaMCP serverDashboards, metrics, logs, alerts

MCP auth: A custom http.RoundTripper injects auth headers for Sourcegraph (token transport). Grafana MCP requires no auth headers.

Creates a Jira ticket in the configured project. Registers a jira:<issueKey> session index entry so future events on the ticket resolve to the same session.

Used for: Implementation work that needs backlog tracking.

Searches Jira for existing tickets using JQL.

Creates a GitHub issue in a specified repository.

  • jira_key (optional): When provided, the issue title includes the Jira key prefix and the body contains a Jira Context section with a link back to the ticket
  • Registers a github:<owner/repo>#<number> session index entry

Dispatches an async Claude session via repository_dispatch with type bucky-session. Mode is optional — when empty, Claude decides what to do; when set to plan, restricts to planning only.

  • Records a PendingSession mapping so the callback can resume the correct ADK session
  • The dispatch payload includes agent_base_url for file uploads
  • Returns immediately with a session UUID

Dispatches a cross-repo Claude session via repository_dispatch with type bucky-multi-repo-session to buck-bronson.

  • Payload includes a repos array (list of owner/repo strings)
  • GitHub issues for multi-repo sessions always live in buck-bronson
  • Same PendingSession callback pattern as run_claude_session

Posts messages to the Slack thread associated with the current session. Supports two modes:

  • Plain text: Simple text message
  • Block Kit: Interactive messages with buttons, selects, date pickers when blocks are provided

The tool resolves its target via the session index (LookupBySession) rather than parsing the session ID.

A runAgentWithSlackFallback helper ensures respond_in_slack is called — if the agent finishes without posting to Slack (or errors out), a fallback message is posted automatically.

Posts plain text comments on the Jira ticket associated with the current session. A runAgentWithJiraFallback helper provides the same guarantee for Jira-originated sessions.

Posts comments on GitHub issues/PRs. A runAgentWithGitHubFallback helper provides the same guarantee for GitHub-originated sessions.

Posts updates to a #bucky-feed Slack channel. When a jira_key is provided:

  1. Fetches Jira watchers for the ticket
  2. Resolves their Slack user IDs via email lookup
  3. Appends @mentions to the feed post

Enabled by SLACK_FEED_CHANNEL_ID.

Large LLM prompts (system instruction, tool descriptions) live in internal/agent/prompts/*.md and are embedded at compile time via //go:embed. This keeps prompts easy to edit without touching Go code.

The agent’s system prompt includes a “Claude Code Runner Capabilities” section that teaches it what dispatched Claude sessions can do (MCP tools, shell access, browser automation, test execution) so it knows when to offload tasks to Claude Code runners.