Quick Start
Add human-in-the-loop to your AI agent in minutes. Three steps to your first decision request.
Create Your App
Sign up, create your app, and get your API token. Two minutes, no configuration needed.
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.
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 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- 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
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
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)