Quick Start

Add human-in-the-loop to your AI agent in minutes. Three steps to your first decision request.

01 Create & Fund Your App

Create Your App

Sign up, create your app, and get your API token. Two minutes, no configuration needed.

02 Setup Backend SDK

Add Agent SDK

Install the Agent SDK in your backend — Node.js, Python, Go, or Rust. Your agent sends decision requests with full context and a configurable timeout.

03 Integrate Frontend SDK

Integrate Client SDK

Add the Client SDK to your app — web, iOS, Android, or Telegram. Your users receive decision requests and respond in one tap.

Get Your API Token

Get Your API Token First

Before integrating any SDK, you must create your app to receive your API token. This token is required for all agent SDKs to send decision requests.

Create App
Send
Agent SDKs For sending decision requests from your agent system
Receive
Client SDKs For subscribing and receiving decision requests in your app
How It Works
  • 1

    Agent Detects a Decision Point

    Your agent identifies an action that needs human input before proceeding.

  • 2

    Noxy Routes the E2EE Decision Request

    The request with full context is delivered across your chosen channels: push, Telegram, web.

  • 3

    User Decides

    User receives a clear, actionable request and responds in one tap — or timeout kicks in automatically.

  • 4

    Response Returns to Agent

    The outcome is sent back to your agent instantly, encrypted end-to-end.

  • 5

    Agent Continues

    Executes the action, skips it, or falls back — your agent keeps running either way.

Example Integration

Agent (Python) - Sends decision requests

        from noxy import (
          NoxyHumanDecisionOutcome,
          init_noxy_agent_client,
          NoxyConfig,
        )
        
        client = init_noxy_agent_client(
            NoxyConfig(
                endpoint="https://relay.noxy.network",
                auth_token="your-api-token",
                decision_ttl_seconds=3600,
            )
        )
        
        resolution = client.send_decision_and_wait_for_outcome(
            "user@example.com",  # wallet, email, phone, user_id
            {
                "kind": "propose_tool_call",
                "tool": "transfer_funds",
                "args": { "to": "__your-burn-address__", "amountWei": "1" },
                "title": "Transfer 1 wei to the burn address",
                "summary": "The agent is requesting approval to send 1 wei to the burn address.",
            },
        )
        
        if resolution.outcome == NoxyHumanDecisionOutcome.APPROVED:
            # your agent should run the proposed action
        else:
            # your agent should abort the proposed action
      
Client (IOS) - Receives decision requests

        import NoxySDK

        // Initialize the identity first
        // Identity: .email, .phone, .userId, or .eoa / .scw for wallet
        let identity = NoxyIdentity.email(email: "you@example.com")
        
        // Create client
        let client = createNoxyClient(
            identity: identity,
            network: NoxyNetworkOptions(
                appId: "your-app-id",
                relayUrl: "https://relay.noxy.network",
                appSigningSecret: "your-app-signing-secret",
            )
        )
        
        // Initialize the client
        try await client.initialize()

        // Subscribe to decision requests
        try await client.on { messageId, decision in
            print("messageId:", messageId as Any, "decision:", decision)
            // Show UI, use UNMutableNotificationContent
            // e.g. decision_id, title, body — use sendDecisionOutcome when the user approves/rejects
        }
        
        // catch user taps Approve/Reject in your UI handler, then
        try await client.sendDecisionOutcome(decisionId: "...", outcome: .approve / .reject)