ArmorIQ SDK
Build secure AI agents with cryptographic intent verification
ArmorIQ SDK
One API key. Email per request. Done.
The ArmorIQ SDK lets you build AI agents whose every action is cryptographically verified against an explicit plan - before it ever reaches an MCP tool.
Why ArmorIQ
- Simple - one API key, no cloud credentials, no user/agent IDs to manage
- Secure - every tool call is cryptographically verified against a signed plan
- Auditable - every decision (allow / hold / block) is attributed to an end-user email
- Framework-native - Google ADK, LangChain and Strands adapters in both Python and TypeScript; CrewAI in Python
How it works
- You initialize the client once with your API key.
- The agent produces a plan. The SDK canonicalizes it and mints an intent token (via CSRG-IAP).
- Every
invoke()call is checked against that plan at the proxy, and attributed to the end user you name.
Two ways to name the end user. Pass user_email per call, as below, or open a
per-user scope with client.for_user(email) and run a session from it. Sessions
add policy enforcement, holds, and approval waiting; see
Client Initialization.
Traditional approach:
# Direct calls - no verification
api.call("service1", "action1")
api.call("service2", "action2")
api.call("service3", "action3") # Could be malicious!// Direct calls - no verification
api.call('service1', 'action1');
api.call('service2', 'action2');
api.call('service3', 'action3'); // Could be malicious!ArmorIQ approach:
from armoriq_sdk import ArmorIQClient
client = ArmorIQClient() # reads ARMORIQ_API_KEY
user = "alice@example.com"
plan = {
"goal": "Fetch sales data and analyze Q4 performance",
"steps": [
{"action": "fetch_sales", "mcp": "data-mcp", "params": {"quarter": "Q4"}},
{"action": "analyze", "mcp": "analytics-mcp", "params": {"metrics": ["revenue"]}},
],
}
captured = client.capture_plan(llm="gpt-4", prompt="...Q4 performance", plan=plan)
token = client.get_intent_token(captured)
client.invoke("data-mcp", "fetch_sales", token, {"quarter": "Q4"}, user_email=user) # OK
client.invoke("analytics-mcp", "analyze", token, {"metrics": ["revenue"]}, user_email=user) # OK
client.invoke("data-mcp", "delete_all", token, {}, user_email=user) # blockedimport { ArmorIQClient } from '@armoriq/sdk';
const client = new ArmorIQClient(); // reads ARMORIQ_API_KEY
const user = 'alice@example.com';
const plan = {
goal: 'Fetch sales data and analyze Q4 performance',
steps: [
{ action: 'fetch_sales', mcp: 'data-mcp', params: { quarter: 'Q4' } },
{ action: 'analyze', mcp: 'analytics-mcp', params: { metrics: ['revenue'] } },
],
};
const captured = client.capturePlan('gpt-4', '...Q4 performance', plan);
const token = await client.getIntentToken(captured);
// The 5th argument is merkleProof (optional); the 6th is the end-user email.
await client.invoke('data-mcp', 'fetch_sales', token, { quarter: 'Q4' }, undefined, user); // OK
await client.invoke('analytics-mcp', 'analyze', token, { metrics: ['revenue'] }, undefined, user); // OK
await client.invoke('data-mcp', 'delete_all', token, {}, undefined, user); // blockedThe SDK validates your plan, CSRG-IAP creates the cryptographic proof
(plan_hash, merkle_root, step_proofs), and each invoke() is verified
against it at the Proxy. This prevents:
- Prompt-injection attacks that try to execute unplanned actions
- Unauthorized tool calls
- Plan tampering or modification
Getting started
Installation
Install the SDK (Python or TypeScript) and the CLI
Client Initialization
One-key + email-per-request setup
CLI
armoriq login, init, register, keys, and friends
Google ADK Integration
Drop ArmorIQ into an ADK agent
Observability
Trace SDK plans, policy decisions, tools, model usage, and errors
Documentation
- Installation - install the SDK and the
armoriqCLI - Client Initialization - one-key setup,
for_user(email)scopes - CLI - the
armoriqcommand (login,init,validate,register,orgs,keys,status,logs) - Integrations - see the status matrix for current framework support
- Configuration - the
armoriq.yamlschema - Core Methods -
capture_plan,get_intent_token,invoke,delegate - Data Models - plan, token, result schemas
- MCP Directory - MCP registration format
- Error Handling - exception types and recovery
- Advanced Usage - caching, batching, pooling
- Observability - trace setup for the TypeScript and Python SDKs
- Troubleshooting - common issues
- Best Practices - testing, monitoring, lifecycle