Skip to main content
A manifest is the deterministic fingerprint of your agent at a point in time — its tools, prompts, models, sub-agents, and output schema. DecimalAI auto-detects manifests for OpenAI Agents and LangChain. Use register_manifest() only when you need full control or use a custom framework. See the Manifests guide for the conceptual model.

decimalai.register_manifest()

Explicitly register an agent’s configuration for version tracking.
result = decimalai.register_manifest(
    agent_name="travel-planner",
    tools=[
        {"name": "search_flights", "schema": {"type": "object", "properties": {...}}},
        {"name": "book_hotel"},
    ],
    prompts={"system": "You are a travel planning assistant."},
    models={"default": {"provider": "openai", "model": "gpt-4o"}},
    subagents=[
        {"name": "flight_agent"},
        {"name": "hotel_agent"},
    ],
    version_label="v2.1",
)

print(f"Manifest: {result['manifest_id']}")
print(f"New version: {result['is_new']}")  # True if a fresh manifest row was created
agent_name
str
required
Name of the agent.
tools
list[dict]
Tool descriptors: [{"name": "...", "schema": {...}}].
prompts
dict
Prompt templates: {"system": "..."}.
models
dict
Model configs: {"default": {"provider": "openai", "model": "gpt-4o"}}.
subagents
list[dict]
Sub-agent references: [{"name": "flight_agent"}].
output_schema
dict
Output contract JSON schema.
version_label
str
Human-readable version label (e.g., "v2.1").
For OpenAI Agents and LangChain, manifests are auto-detected from your agent configuration. Use register_manifest() only when you need full control or use a custom framework.
Returns the backend registration response (a dict):
status
str
Always "ok" on a successful registration.
manifest_id
str
ID of the manifest row this config resolved to.
manifest_hash
str
Deterministic content hash of the manifest — identical configs hash identically.
version_label
str
The human-readable version label, echoed back.
is_new
bool
true only when a fresh manifest row was created. A re-register of an unchanged config dedups and returns false.
components
int
Number of manifest components captured across all surfaces.
compatibility_report_id
str | null
ID of the generated compatibility report, or null if none was produced.

decimalai.flush_manifest_for_ci()

Register the manifest as a regression-check candidate and write its ID for the next CI step to read. This is the helper your CI init script (typically init_for_decimal.py) calls under DECIMALAI_MODE=manifest_only, after building the agent. It requires a positional agent_name.
import decimalai

decimalai.init(api_key="dai_sk_...", openai_agents=True)
# ... your code that builds the agent ...

# agent_name is REQUIRED (positional). Calling with no args raises TypeError.
decimalai.flush_manifest_for_ci("travel-planner")
The manifest ID is written to (in order): $GITHUB_OUTPUT if set (as decimal_manifest_id=<id>, the standard GitHub Actions mechanism), else the output_path= you pass, else ./decimal_manifest_id.txt in the current directory. You can also let flush_manifest_for_ci introspect a LangChain/LangGraph agent instead of passing component dicts:
decimalai.flush_manifest_for_ci("travel-planner", chain=agent)
See the Regression Check guide for the full CI setup.

What’s next

Evaluations

Push scores onto traces and read back the verdict.

Manifests guide

Conceptual deep-dive on what a manifest is and how diffs work.