Buck Agent Tools
The Buck agent has access to MCP toolsets (Sourcegraph, Grafana) and custom function tools registered via ADK’s functiontool.New. Tools are defined in internal/buck/agent/ with typed args/results.
MCP toolsets
Section titled “MCP toolsets”| Toolset | Source | Purpose |
|---|---|---|
| Sourcegraph | MCP server | Code search across all repos |
| Grafana | MCP server | Dashboards, metrics, logs, alerts |
MCP auth: A custom http.RoundTripper injects auth headers for Sourcegraph (token transport). Grafana MCP requires no auth headers.
Custom function tools
Section titled “Custom function tools”create_jira_ticket
Section titled “create_jira_ticket”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.
search_jira
Section titled “search_jira”Searches Jira for existing tickets using JQL.
create_session
Section titled “create_session”Creates a dashboard session for tracking work. Optionally links a jira_key and registers session index entries so future events resolve to the same session.
set_team_jira_project
Section titled “set_team_jira_project”Sets the default Jira project for the user’s team. Resolves the user’s team via their email and cached Pack mapping, then updates the team settings.
run_claude_session
Section titled “run_claude_session”Dispatches an async Claude session via an ephemeral EKS pod through the PodOrchestrator. Natively multi-repo — accepts repos []string where a single entry is a single-repo session and multiple entries span repos. Mode is optional: when empty, Claude decides what to do; when set to plan, restricts to planning only.
- Records a
PendingSessionmapping so the pod callback can resume the correct ADK session - Pod authenticates back to the agent’s runner API using a pod-bound JWT (HMAC-signed)
- Returns immediately with a session UUID and pod name
- Optionally accepts extra
instructionsfor Claude
resume_claude_session
Section titled “resume_claude_session”Resumes a paused Claude session by dispatching a new EKS pod that restores workspace and conversation state from S3. The session picks up exactly where it left off with full conversation history. Optionally accepts follow-up instructions so the resumed session knows what to do next.
respond_in_slack
Section titled “respond_in_slack”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
blocksare 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.
respond_in_jira
Section titled “respond_in_jira”Posts plain text comments on the Jira ticket associated with the current session. A runAgentWithJiraFallback helper provides the same guarantee for Jira-originated sessions.
post_to_feed
Section titled “post_to_feed”Posts updates to a #bucky-feed Slack channel. When a jira_key is provided:
- Fetches Jira watchers for the ticket
- Resolves their Slack user IDs via email lookup
- Appends @mentions to the feed post
Enabled by SLACK_FEED_CHANNEL_ID.
Prompt management
Section titled “Prompt management”Large LLM prompts (system instruction, tool descriptions) live in internal/buck/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 session pods.