Skip to main content
chief-go is the official Go client for the Chief API. Use it to build Chief into a Go service or automation: start chats over your project, upload and label assets, schedule actions, and page through results with typed methods instead of hand-rolled HTTP. It’s also the foundation the chief CLI and MCP server are built on — so anything they do, you can do directly in Go. It depends only on the standard library, so you can vendor it into external tools without pulling in third-party packages.

Install

Requirements

Go 1.26 or newer. The client depends only on the standard library, so it adds no third-party transitive dependencies to your module.

Credentials

A Personal Access Token is required and sent as the X-API-Key header. Most routes are project-scoped and also need a project id (X-Project-Id). The Projects.List call is the exception — it works with only an API key and returns the projects the key can reach. Create a token in the Chief app under Settings → API tokens — see Introduction for details on tokens and project ids. Pass credentials as options or let the client read them from the environment:

Resources

Each resource is its own service on the client: client.Chats, client.Assets, client.Labels, client.Actions, client.Sessions, client.Skills, client.Memories, and client.Projects.

Chats

Chat turns run asynchronously: Create and SendMessage return as soon as the workflow is accepted. WaitForResponse polls GetMessage until the turn finishes — or call GetMessage directly to poll on your own schedule.

Assets

UploadFile runs the full three-step flow — create the asset row, PUT the bytes to the signed URL, then complete the upload to start ingest. The returned bool is true when the content was a dedup hit and no bytes were uploaded.

Actions

Actions run a prompt on a schedule or in response to events, optionally emailing the result.

Pagination

List calls are cursor-paginated. Size a page with WithLimit, then feed the page’s LastID to WithAfterID to fetch the next one until HasMore is false:
WithBeforeID pages backward instead. The two cursors are mutually exclusive.

Errors

Every non-2xx response is returned as an *APIError carrying the HTTP status, a stable machine-readable Code, and a user-facing Humane message. Helpers cover the common cases:

Debugging

Pass WithDebug(true) when building the client to dump every HTTP request and response to the standard logger:

Versioning

The package follows semantic versioning. Pin a version in your go.mod and review the release notes before upgrading across a major version:

Reference