Dependency-free Go client for the hawk daemon HTTP API. Exposes idiomatic Go types for chat, streaming, sessions, messages, and stats with automatic retry and typed errors.
hawk-sdk-go/
βββ api/openapi.yaml π SDK method surface reference
βββ client.go π Client, New(), With* options, HTTP transport
βββ types.go π API types (ChatRequest, ChatResponse, Session, Message, Stats)
βββ errors.go β APIError base + typed subclasses
βββ retry.go π RetryConfig, doWithRetry(), sleepWithContext()
βββ stream.go π‘ StreamReader, SSE parsing
βββ stream_helpers.go π οΈ collect_text(), collect_tool_calls()
βββ agent.go π€ Agent (conversation history, mutex-safe session ID)
βββ tools.go π οΈ Tool definitions
βββ workflow.go π§ Workflow engine
βββ version.go π·οΈ Version constant
βββ *_test.go π§ͺ Test files (httptest-based)
import hawksdk "github.com/GrayCodeAI/hawk-sdk-go"
c := hawksdk.New(
hawksdk.WithBaseURL("http://localhost:4590"),
hawksdk.WithAPIKey("sk-..."),
hawksdk.WithRetry(hawksdk.DefaultRetryConfig()),
)
// π©Ί Health check
health, err := c.Health(ctx)
// π¬ Non-streaming chat
resp, err := c.Chat(ctx, hawksdk.ChatRequest{Message: "list files"})
// π‘ Streaming chat
stream, err := c.ChatStream(ctx, hawksdk.ChatRequest{Message: "explain this code"})
defer stream.Close()
for { ev, err := stream.Next(); if err != nil { break }; fmt.Print(ev.Data) }
// π Sessions
sessions, _ := c.Sessions(ctx, hawksdk.ListOptions{Limit: 10})
msgs, _ := c.Messages(ctx, sessionID, hawksdk.ListOptions{})
_ = c.DeleteSession(ctx, sessionID)
// π Stats
stats, _ := c.Stats(ctx)agent := hawksdk.NewAgent(c, hawksdk.AgentConfig{SystemPrompt: "You are a Go expert"})
resp, _ := agent.Chat(ctx, "refactor this function")
// Subsequent calls automatically continue the same sessionvar notFound *hawksdk.NotFoundError
var rateLimit *hawksdk.RateLimitError
if errors.As(err, ¬Found) { /* handle 404 */ }
if errors.As(err, &rateLimit) { time.Sleep(rateLimit.RetryAfter) }| Error Type | HTTP Status |
|---|---|
NotFoundError |
404 |
RateLimitError |
429 |
InternalServerError |
500 |
The daemon must be running: hawk daemon start
| Default URL | http://127.0.0.1:4590 |
| Override | WithBaseURL() or HAWK_BASE_URL env |