From “make this work”
to “I know how it works.”
Build with your coding assistant or take direct control of the API. One release assistant shows how a useful result becomes a workflow with your expertise, relevant context, and explicit boundaries.
A reviewable plan, a connected diagram, and a prompt for your coding assistant.
A server-side call, explicit capabilities, and an inspectable response.
01one assistant, built in layers
Choose your starting point. Keep the same goal.
Turn release notes into a draft. Add the team’s expertise, continue with supported memory, then inspect the result. Switching paths keeps your place.
Describe the idea. See how the pieces connect.
Turn release notes into a useful draft.
Start with one small feature, not a collection of model integrations.
- Fictional release notesNotesRetry test pending · review open
- theo · auto routetheoEligible capability + configured context
- A draft for reviewDraftNo release approval or deployment
How the pieces connect
Your coding assistant can help propose the connections. This drawing does not create an orchestrator or apply account configuration.
Draft: the retry test is pending and rollback review remains open.
Get the task prompt
Help me build a release assistant. It should turn approved notes into a draft, leave missing checks visible, and never approve or deploy a release. Show me the proposed route before changing any configuration.
Connect the documented MCP server in your own editor. Configuration-changing tools need the appropriate scope and your approval; nothing is connected here.
Build with AI. First useful result. Basic route.
Fictional example. No live requests or configuration changes. Switching paths keeps your place.
Read both paths without the interactive controls
Fictional inputs and authored outputs. No live inference, configuration changes, key collection, or persistent memory.
Build with AI · for vibe coders
Connect the MCP server using the documented setup, then ask your coding assistant to propose a workflow. Execution tools and configuration tools have different permissions. Review configuration changes before applying them.
First useful result: Help me build a release assistant. It should turn approved notes into a draft, leave missing checks visible, and never approve or deploy a release. Show me the proposed route before changing any configuration.
Illustrated result: Draft: the retry test is pending and rollback review remains open.
Add your expertise: Help me design a release-brief skill: concise summaries, approved release notes, and a read-only checklist lookup. Show the required tool handler and permissions. Do not install or change anything without my approval.
Illustrated result: Team brief: keep the known notes separate from open checks. Reviewer sign-off is still required.
Keep the context: Resume the release draft from last week. Use only the relevant context available to this owner, keep the open checks visible, and ask if a source is missing. Help me verify which memory features are enabled.
Illustrated result: Continued draft: the earlier review requirement still applies. Nothing records that the checks are complete.
Take control: Walk me through this release assistant’s routing, skill permissions, and bound policies. Show how to inspect the request ID and handle missing context or failed tools. Propose changes for review, but do not apply them.
Illustrated result: Before approval: confirm the retry test, rollback review, and reviewer sign-off.
Engineer the system · for advanced developers
Call the SDK or REST API from your server. Add a created, authorized skill through skills[]. Check supported memory paths; do not invent a memory flag. Inspect request_id, resolved_mode, and tool activity, then test failures before deployment.
import { Theo } from "@hitheo/sdk";
// Server-side only. Supply the value through your secret store.
const apiKey = process.env.THEO_API_KEY;
if (!apiKey) {
throw new Error("Set THEO_API_KEY in the server environment.");
}
const theo = new Theo({
apiKey,
timeoutMs: 30_000,
maxRetries: 2,
});
const response = await theo.complete({
prompt: "Prepare a release brief from these fictional notes: the retry test is pending and rollback review is still open.",
mode: "auto",
});
console.log(response.content);The same request over REST
curl https://www.hitheo.ai/api/v1/completions \
-H "Authorization: Bearer $THEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Prepare a release brief from these fictional notes: the retry test is pending and rollback review is still open.",
"mode": "auto"
}'MCP setup documentation (opens in a new tab) · Completion API documentation (opens in a new tab)
02different tools, clear jobs
The toolkit should fit how you build.
Plan with your AI editor
MCP connects a coding assistant to documented execution and configuration tools. Propose the workflow first; verify scope and approve any account changes.
connect with MCP (opens in a new tab)Package the expertise
E.V.I. Canvas builds a skill from instructions, knowledge, and permitted tools. A skill graph is not the orchestrator that coordinates the larger workflow.
build a skill visually (opens in a new tab)Own the application
SDK and REST expose the request contract. Choose routes, attach authorized skills, inspect results, and keep identity and release approval in your system.
use the server SDK (opens in a new tab)03go deeper when you need to
Production control, one boundary at a time.
The useful details belong next to the decision they support. Open the contract you need; every example remains readable without JavaScript.
Server setup & first completion
In a Node.js application, install the documented SDK. Provide THEO_API_KEY through your server’s environment or secret store, save the example as first-completion.mjs, and run it with Node. Do not place the key in a browser bundle.
npm install @hitheo/sdkimport { Theo } from "@hitheo/sdk";
// Server-side only. Supply the value through your secret store.
const apiKey = process.env.THEO_API_KEY;
if (!apiKey) {
throw new Error("Set THEO_API_KEY in the server environment.");
}
const theo = new Theo({
apiKey,
timeoutMs: 30_000,
maxRetries: 2,
});
const response = await theo.complete({
prompt: "Prepare a release brief from these fictional notes: the retry test is pending and rollback review is still open.",
mode: "auto",
});
console.log(response.content);Start without a custom route.
mode: "auto" asks theo to resolve the execution mode. The requested mode and resolved mode are separate fields, so inspect the response rather than assuming which capability ran.
The SDK supplies its documented canonical API base by default. Avoid casually overriding the host: authentication headers can be lost across redirects.
The request uses prompt, not a chat-message array. Keep the endpoint’s request and response format together when moving between integrations.
Response fields, routing & diagnostics
{
"request_id": "req_release_demo",
"mode": "auto",
"resolved_mode": "fast",
"model": {
"id": "theo-1-flash",
"label": "Theo Flash",
"engine": "theo-core"
},
"tools_used": [],
"artifacts": [],
"conversation_id": null,
"content": "The release is still a draft. Confirm the retry test, rollback review, and reviewer sign-off."
}content- The generated text. Validate it for your application’s task instead of treating fluent wording as verification.
mode/resolved_mode- What the caller requested and what the request resolved to. The example shows
autobecomingfast; that result is illustrative. model- The Theo-branded capability and engine that handled the response. This specimen uses
theo-1-flashandtheo-core. tools_used/artifacts- Reported tool activity and generated artifacts. Empty arrays mean this example has neither; tool definitions alone are not evidence of a successful call.
conversation_id- The documented top-level conversation identifier can be null. Associate a returned ID with the authorized caller before using it to continue a thread. This links one thread; it is not the cross-thread MCIR memory mechanism.
request_id- A correlation identifier for support and diagnostics. Keep it without casually logging full prompts, sensitive output, or API keys.
Memory, identity & thread continuity
- Memory, without a second integration
- No separate memory API is required for supported integrations. Ordinary recall is distinct from the full MCIR intent-and-context pipeline, which has activation and caller-eligibility requirements.
- Applications and agents
- Supported API paths and authenticated MCP adapters can use owner-scoped context. An adapter connects to theo; it does not create a separate memory backend or enable every gated memory feature.
- Your orchestration
- Choose models for each role and package behavior in skills. A model-independent context handoff can supply relevant history, not a guarantee of identical answers. Memory is built into supported theo request paths. The full MCIR intent pipeline and Memory Chain have separate activation requirements; confirm availability for your account.
Skills & tool contracts
A tool definition is not its implementation. Add capabilities deliberately and keep the runtime permissions explicit.
{
"name": "lookup_release_checklist",
"description": "Read the approved checklist for a release. This operation does not approve or deploy a release.",
"input_schema": {
"type": "object",
"properties": {
"release_id": {
"type": "string",
"description": "The release identifier visible to the authenticated caller."
}
},
"required": [
"release_id"
],
"additionalProperties": false
}
}The custom-tool guide documents the callable schema. The model uses the description to decide whether to request the tool. It does not create a secure backend handler from that description.
- Validate arguments against the schema and the authenticated caller’s permissions.
- Scope lookups to records the caller can access, even when an identifier looks valid.
- Handle unavailable services, empty results, and malformed tool output.
- Require application-level human review for consequential writes or external actions.
Skills can supply domain instructions and tools. Pass documented skill slugs in skills[]; review how per-request skills combine with installed skills instead of assuming a request starts with no other capabilities.
Errors, retries, streaming & policy boundaries
- 400
- validation_errorCorrect the request body, mode, or missing prompt. Repeating an invalid request does not repair it.
- 401 / 403
- Authentication or scopeCheck the configured key, its current status, the canonical host, and required scopes. Do not expose the credential in diagnostics.
- 402
- insufficient_creditsSurface an account funding issue separately from a model or application failure.
- 404
- not_foundA referenced conversation may not be available. Do not substitute another user’s thread or silently bypass authorization.
- 422
- guardrail_violationA bound input policy denied the request. Treat this as an explicit outcome, not a reason to retry with enforcement removed.
- 429 / 5xx
- Rate limit or server failureThe SDK documents bounded retries for these responses and respects Retry-After on rate limits. Coordinate retry budgets with your own application.
Before production, test timeouts, aborted streams, empty results, policy denials, and tool failures. Keep request correlation separate from sensitive payload logging.
04a practical order of work
A first result is the beginning.
- 01
Establish server authentication
Make a synthetic completion with a scoped server-side key. Verify that no key or privileged request crosses into the browser. - 02
Inspect state and routing
Read resolved_mode and request_id. Verify the caller’s memory scope and enabled features. Associate a conversation_id with that caller to continue a specific thread; cross-thread memory is a separate mechanism. - 03
Add the smallest capability
Introduce one skill or a read-only tool, validate its input and failure behavior, and test the combined configuration. - 04
Bind and verify policies
If Gateway Guardrails are required, create and test the policy, bind the key, then verify input and output behavior. Keep a separate application review step.
No live requests run on this page. The code is a documented integration starting point; the sample response and tool operation are illustrative, not evidence of a deployed customer integration.
Your idea. Your level of control.
Start with a coding assistant or the server SDK. Verify one bounded workflow with synthetic data before expanding its access or responsibility.