Files
sherlock/internal/agent/claude.go
T
amacocian f5109abfad
CI / build (push) Successful in 19s
Gitea mcp pre-release
2026-05-25 15:22:30 +02:00

41 lines
1.2 KiB
Go

package agent
import (
"gitea.alexandru.macocian.me/Charlie/sherlock/internal/mcp"
)
func init() { Register(&claude{}) }
// claude integrates Anthropic's Claude Code CLI (npm package
// `@anthropic-ai/claude-code` → `claude` on PATH). MCP config is
// passed via --mcp-config <path> in the canonical `.mcp.json` shape
// (`{"mcpServers": ...}`) — same shape Copilot uses.
//
// We also forbid ANTHROPIC_API_KEY in the child env so an
// inadvertently-set personal key can't override the broker-managed
// session. (Phase 2 will surface a proper Anthropic auth grant.)
type claude struct{}
func (claude) Name() string { return "claude" }
func (claude) Description() string { return "Anthropic Claude Code CLI" }
func (c claude) Spawn(ctx Context, args []string) error {
bin, err := LookPath("claude")
if err != nil {
return err
}
mcpPath, err := mcp.Render(c.Name(), ctx.Servers)
if err != nil {
return err
}
argv := c.buildArgv(bin, mcpPath, args)
env := BuildEnv([]string{"ANTHROPIC_API_KEY"}, nil)
return DefaultExecer.Exec(bin, argv, env)
}
func (claude) buildArgv(bin, mcpPath string, userArgs []string) []string {
argv := []string{bin, "--mcp-config", mcpPath}
argv = append(argv, userArgs...)
return argv
}