Skip to Content
GuidesSDKs & CLI

SDKs & CLI

Exemplar Platform is not “SDK-only.” Most day-to-day configuration lives in the console UI; SDK and CLI embed or automate the same control plane from code and terminals.

This guide maps Marshal (agentic harness toolkit) and Relay (coding-agent governance) across three touchpoints—and where Python / TypeScript SDKs line up.

Three touchpoints

TouchpointBest forPackages / entry
Console UIOrg setup, policy authoring, Connect install snippets, Live wire / Pulse, HITL inbox, Behavior Guardsconsole.exemplar.dev 
Marshal SDKEmbed memory, skills, prompts, HITL, MCP tools, session ingest, and in-process Relay adapters in agent frameworksPython exemplar-harness-sdk · TypeScript @exemplar-dev/exemplar-harness-typescript-sdk
Marshal CLICI, operator runbooks, quick list/add/search of skills, prompts, memoryexemplar-cli

When to use which

JobPrefer
Author bash / path / MCP / prompt Control rulesUI — Relay → Rulebook
Tune Behavior Guards, Acknowledge incidentsUI — Relay → Guards / Pulse / Live
Install Cursor / Claude Code / Codex / OpenCode hooksUI Connect snippets or exemplar-skills (/exemplar-relay) — not SDK/CLI policy editors
Seat engineers, Enforcement modeUI — Relay seats & org settings
Call memory / skills / prompts / HITL from an agent runtimeSDK (Python or TypeScript)
Enforce org Relay policy inside LangChain, Claude Agent SDK, Mastra, …SDK harness.relay({ surface })
Script skills/prompts/memory in CICLI
Browse Tools & MCP catalog, copy MCP configsUI — Marshal → Tools & MCP

Marshal — feature × touchpoint

Marshal is Exemplar’s agentic harness toolkit. Registries and ops often start in the UI; runtimes consume them via SDK/CLI.

CapabilityConsole UISDK (Py / TS)CLI (exemplar-cli)
Memory — add / search / recallView / operate in consoleYesYes (exemplar memory …)
Skills — create / search / installSkill managementYesYes (exemplar skills …)
Prompts — templates / build / runPrompt managementYesYes (exemplar prompts …)
HITL — approval gatesHITL Approvals inboxYes (harness.hitl())
Evals / guardrailsConfigure & reviewVia platform APIs / gateway clients as documented
Tools & MCPCatalog, Connect snippetsharness.tools() + framework adapters
Context Lake / connectorsEnable connectors, browse contextContext used via memory / tools / gateway
GatewayKeys, routing, cache, failoverOpenAI-compatible clients + SDK helpers

Docs: Memory · Skills · Prompts · HITL · SDK client usage · CLI commands · Tools & MCP

Relay — feature × touchpoint

Relay policy is authored and observed in the UI. IDE coding agents attach via hooks you install from Connect (or exemplar-skills). The Marshal SDK can evaluate the same Control + Enforcement stack for framework agents running in your process—not as a replacement for Cursor/Claude rule editors.

CapabilityConsole UISDK Relay adaptersCLI
Control rules (bash, path, MCP, prompt)Rulebook — primary authoringEvaluates rules at runtime (decide / observe / evaluate)
Enforcement (observe / soft / enforce)Org settingHonored on evaluate
Behavior GuardsGuards · Sample · Configure · AcknowledgePattern detectors when hooks fire
Connect IDE surfaces (Cursor, Claude Code, Codex, OpenCode)Relay → Connect + verify— (use Connect / skills)
Framework Relay (LangChain, Claude Agent SDK, Mastra, …)Same org rules applyYesharness.relay({ surface })
Live wire / Pulse / Session TracePrimary ops surfaceEvents appear when SDK/IDE hooks call Relay
Audit / retentionConsole + plan limitsWrites to same audit trail
SeatsSeats & policyAuth via API key + seat entitlements

IDE hooks ≠ SDK. Cursor, Claude Code, Codex, and OpenCode install hooks from Relay → Connect (or /exemplar-relay). You do not configure those IDE rulesets through exemplar-cli or by pasting SDK code into the editor. Rulebook + Guards stay in the UI; hooks only forward tool events to Relay.

Docs: Relay · Connect surfaces · Control rules · Behavior Guards · SDK Relay in Client usage · live adapters on Live SDK examples

SDK language parity (Python ↔ TypeScript)

Both SDKs target the same Marshal / Relay APIs. Naming differs (snake_case vs camelCase).

AreaPythonTypeScriptNotes
ClientHarness.from_env()Harness.fromEnv()Product name Marshal; class still Harness
Memoryharness.memory(...)harness.memory(...)Parity on add / search / recall
Skillsharness.skills()harness.skills()Parity
Promptsharness.prompts()harness.prompts()Parity
HITLharness.hitl()harness.hitl()Console decides; SDK waits
MCP toolsharness.tools()harness.tools()See Frameworks
Session ingestYesYesFramework helpers differ by runtime; set auto_judge_run / auto_session_eval for Insights + Session Evals — Evals
Relay adaptersBroad Python matrix (ADK, Agno, CrewAI, Pydantic AI, Semantic Kernel, …)Claude hooks, OpenAI Agents, LangChain/LangGraph, MastraSee adapter table on Client usage

CLI covers skills / prompts / memory scripting—not full SDK feature parity (no HITL wait loop, no framework Relay adapters).

Auth quick reference

SurfaceKey typeTypical env
Marshal SDK / CLI / Tools & MCP clientsOrg API key (eis_*)EXEMPLAR_API_KEY
Relay IDE hooks (Connect)Personal key with Relay scopeEXEMPLAR_API_KEY in hook / bridge env
Optional Relay API originEXEMPLAR_RELAY_BASE

Create keys under Account Settings → Tokens.

Live examples (not simulated)

Curated demos that POST to the live Exemplar API: Live SDK examples · exemplar-platform-samples.

AreaStart here
Memory / skills / prompts / HITLPython examples/live/*_demo.py
Framework + MCPlangchain_demo, agno_demo, google_adk_demo, …
In-process RelayPython examples/relay/ · TypeScript examples/relay/
Session ingest (TS)examples/ingest/
Last updated on