Dashboard|

Cencori Integration

How the Arcie framework connects to Cencori model access, sessions, billing and deployment.

Arcie is Cencori’s model-agnostic agent infrastructure, with an open-source framework and a managed API in development.

This page covers the framework’s existing Cencori integration. The runner calls the Cencori Sessions API for model turns and streams events back. Custom tool code runs in the process operating Arcie, not automatically inside Cencori.

The managed API is a separate entry point being built under the same brand. Using Sessions today does not mean your agent is already running on that managed service.

Authentication

The runtime authenticates with a Cencori project API key:

export CENCORI_API_KEY=csk_...      # required at run time
export CENCORI_PROJECT_ID=proj_...  # optional; sent as X-Project-ID
export CENCORI_API_URL=...          # optional; overrides the API endpoint

The key is read from CENCORI_API_KEY (or RunOptions.apiKey). The project id can come from the env or from cencori.project in agent.ts, and is sent as the X-Project-ID header. The default endpoint is https://cencori.com/v1.

The cencori config block

agent.ts carries per-agent Cencori settings:

import { defineAgent } from "arcie";
 
export default defineAgent({
  model: "claude-sonnet-4-5",
  cencori: {
    project: process.env.CENCORI_PROJECT_ID,
    billing: { budget: "50.00/month", endUserMarkup: 0.2 },
    security: { policy: "standard" }, // "strict" | "standard" | "permissive"
  },
});
  • billing.budget — a spend cap for the agent, e.g. "50.00/month".
  • billing.endUserMarkup — markup applied when billing your own end users through Cencori.
  • security.policy — the baseline safety posture; per-agent policies tighten it further.

Outbound auth helpers

When a tool or channel needs to call an external service, arcie/auth builds the authorization header for you:

import { bearer, basic } from "arcie/auth";
 
const gh = bearer(process.env.GITHUB_TOKEN!);           // static token
const rotating = bearer(async () => fetchFreshToken());  // lazy / rotating
const legacy = basic({ username: "svc", password: process.env.PW! });
 
const { headers } = await gh(); // { authorization: "Bearer …" }

A token can be a string or a () => string | Promise<string> function, so secrets can be resolved lazily per request.

Deploying

  1. arcie build produces .arcie/server.mjs, the headless runtime bundle, and .arcie/manifest.json, the agent manifest.
  2. Run the bundle in your deployment environment. It includes the framework runner and custom tool code; uploading a manifest alone does not host those tools.
  3. Set CENCORI_API_KEY / CENCORI_PROJECT_ID when using Cencori Sessions.
npm run build           # → .arcie/server.mjs + .arcie/manifest.json
node .arcie/server.mjs

What you get from Cencori at run time:

  • Sessions — conversation state, turn events and approval interfaces (Sessions). Persisted turns do not by themselves guarantee recovery of arbitrary tool execution.
  • Billing — budgets and Monetization enforced per project.
  • Security — input/output guards and policy enforcement (Policies).
  • Observability — every turn, tool call, and token logged.