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

  1. You initialize the client once with your API key.
  2. The agent produces a plan. The SDK canonicalizes it and mints an intent token (via CSRG-IAP).
  3. 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)                         # blocked
import { 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);                        // blocked

The 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

Documentation

On this page