ScuttleBot

scuttlebot / cmd / claude-agent / main.go
Blame History Raw 65 lines
1
// claude-agent is a thin wrapper around pkg/ircagent with Claude defaults.
2
package main
3
4
import (
5
"context"
6
"flag"
7
"fmt"
8
"log/slog"
9
"os"
10
"os/signal"
11
"syscall"
12
13
"github.com/conflicthq/scuttlebot/pkg/ircagent"
14
)
15
16
const systemPrompt = `You are an AI assistant connected to an IRC chat server called scuttlebot.
17
Be helpful, concise, and friendly. Keep responses short — IRC is a chat medium, not a document editor.
18
No markdown formatting (no **, ##, backtick blocks) — IRC renders plain text only.
19
You may use multiple lines but keep each thought brief.`
20
21
func main() {
22
ircAddr := flag.String("irc", "127.0.0.1:6667", "IRC server address")
23
nick := flag.String("nick", "claude", "IRC nick")
24
pass := flag.String("pass", "", "SASL password (required)")
25
channels := flag.String("channels", "#general", "Comma-separated channels to join")
26
apiKey := flag.String("api-key", os.Getenv("ANTHROPIC_API_KEY"), "Anthropic API key (direct mode)")
27
model := flag.String("model", "", "Model override (direct mode)")
28
apiURL := flag.String("api-url", "http://localhost:8080", "Scuttlebot API URL (gateway mode)")
29
token := flag.String("token", os.Getenv("SCUTTLEBOT_TOKEN"), "Scuttlebot bearer token (gateway mode)")
30
backend := flag.String("backend", "anthro", "Backend name in scuttlebot (gateway mode)")
31
flag.Parse()
32
33
if *pass == "" {
34
fmt.Fprintln(os.Stderr, "error: --pass is required")
35
os.Exit(1)
36
}
37
38
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
39
defer cancel()
40
41
err := ircagent.Run(ctx, ircagent.Config{
42
IRCAddr: *ircAddr,
43
Nick: *nick,
44
Pass: *pass,
45
Channels: ircagent.SplitCSV(*channels),
46
SystemPrompt: systemPrompt,
47
Logger: slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo})),
48
ErrorJoiner: " — ",
49
Direct: &ircagent.DirectConfig{
50
Backend: "anthropic",
51
APIKey: *apiKey,
52
Model: *model,
53
},
54
Gateway: &ircagent.GatewayConfig{
55
APIURL: *apiURL,
56
Token: *token,
57
Backend: *backend,
58
},
59
})
60
if err != nil {
61
fmt.Fprintln(os.Stderr, "error:", err)
62
os.Exit(1)
63
}
64
}
65

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button