Installation
Catentio ships two flavors of tooling for talking to the control plane:
- CLI —
catentio-saason your terminal. Best for one-off operations, scripting, and exploration. Uses Huudis device flow for sign-in. - SDKs — libraries in Node.js, Python, and Go. Best for embedding Catentio in another product or wiring up integrations.
The portal itself doesn't need anything installed locally — just a browser.
Note: this page covers the SaaS CLI and SDKs (
@forjio/catentio-saas-cli,@forjio/catentio-saas-node,catentio-saas, and the Go module undersdk/go/). The agent runtime CLI — the one that ships to a customer VPS — is a separate package in thecatentiorepo.
CLI
The CLI is published on npm as @forjio/catentio-saas-cli. Install it globally:
npm install -g @forjio/catentio-saas-cli
Verify the install:
catentio-saas --version
You should see something like catentio-saas/0.x.y. If you get command not found, your global npm bin directory isn't on your PATH.
The next step is signing in. The CLI uses Huudis OIDC device flow — no client secret, no copy-pasting tokens:
catentio-saas auth login
The CLI opens a browser tab on huudis.com/device, you confirm the code shown in the terminal, and the CLI stores the session at ~/.catentio-saas/credentials. From then on every command auto-refreshes the access token before it expires.
Prefer not to install globally? You can run it as
npx @forjio/catentio-saas-cli <command>for one-off uses, or add it as a dev dependency on a project.
Node.js SDK
The Node SDK is @forjio/catentio-saas-node:
npm install @forjio/catentio-saas-node
It's compatible with Node 20 and later. It ships with TypeScript types out of the box.
There are two ways to authenticate — pick the one that fits your context:
Static API key (server-to-server)
import { CatentioSaasClient } from '@forjio/catentio-saas-node';
const catentio = new CatentioSaasClient({
apiKey: process.env.CATENTIO_API_KEY,
});
const agents = await catentio.agents.list();
console.log(agents);
API keys are minted in Dashboard → API keys and look like cat_ak_xxxxxxxxxxxxxxxx. They never expire on their own — rotate them when team members leave or you suspect compromise.
Bearer session (device-flow)
If your code is running interactively (a CLI, a script you'll run yourself), use the same device-flow Session the CLI uses:
import { CatentioSaasClient, Session, startDeviceFlow, pollDeviceToken } from '@forjio/catentio-saas-node';
const flow = await startDeviceFlow({ issuer: 'https://huudis.com', clientId: 'catentio-cli' });
console.log('Visit', flow.verificationUriComplete);
const tokens = await pollDeviceToken(flow);
const session = new Session({ ...tokens, issuer: 'https://huudis.com', clientId: 'catentio-cli' });
const catentio = new CatentioSaasClient({ session });
Session handles proactive refresh so long-running processes don't 401 mid-run.
Python SDK
The Python SDK is published on PyPI as catentio-saas:
pip install catentio-saas
It supports Python 3.9+. The import name is catentio_saas (PEP 8 underscore-naming):
from catentio_saas import CatentioClient
import os
with CatentioClient(api_key=os.environ["CATENTIO_API_KEY"]) as catentio:
agents = catentio.agents.list()
print(agents)
For device-flow Bearer auth:
from catentio_saas import CatentioClient, Session
session = Session(
access_token="...",
refresh_token="...",
expires_at=1_800_000_000,
issuer="https://huudis.com",
client_id="catentio-cli",
)
with CatentioClient(session=session) as catentio:
runs = catentio.runs.list()
Go SDK
The Go SDK lives in the same repo as Catentio itself:
go get github.com/hachimi-cat/saas-catentio/sdk/go
Import it as catentio:
import catentio "github.com/hachimi-cat/saas-catentio/sdk/go"
Minimal usage:
package main
import (
"context"
"fmt"
"os"
catentio "github.com/hachimi-cat/saas-catentio/sdk/go"
)
func main() {
client, err := catentio.NewClient(catentio.ClientOptions{
APIKey: os.Getenv("CATENTIO_API_KEY"),
})
if err != nil {
panic(err)
}
agents, err := client.Agents.List(context.Background())
if err != nil {
panic(err)
}
fmt.Println(agents)
}
It uses only the Go standard library — no external dependencies. Requires Go 1.22+.
Get an API key
For server-to-server use you'll want a static API key:
- Sign in to the Catentio portal.
- Navigate to Dashboard → API keys.
- Click Create API key. Give it a name and a scope.
- Copy the secret immediately — we show it once.
The convention across SDKs is to read credentials from environment variables:
| Variable | Purpose |
|---|---|
CATENTIO_API_KEY |
The full key string — secret, never commit |
CATENTIO_BASE_URL |
Optional — only set if you're pointing at a non-default instance |
Don't bake the key into source. Use your environment's secret manager. For local dev, a gitignored
.envfile is fine. For production, use Vault or your platform's equivalent.
Next
- Quickstart — invoke your first agent.
- Concepts — the data model the SDKs expose.
- API authentication — Bearer + API-key details.