Skip to main content

Migrate From Turnkey to 1Claw

Why Whole-Agent Governance Matters​

Turnkey governs signing. 1Claw governs the whole agent.

If your agents access secrets, call LLMs, run automations, communicate through channels, and sign transactions — governing only the signing step leaves every other surface ungoverned. An attacker who compromises an agent's LLM context, exfiltrates credentials through tool calls, or manipulates automations bypasses signing controls entirely.

1Claw places secrets, LLM traffic (Shroud), runtimes, memory, channels, automations, and signing under one policy engine and one hash-chained audit log. Migrating from Turnkey gives you:

  • Unified policy evaluation across all agent actions, not just signing
  • LLM security (prompt injection detection, secret redaction, semantic policies)
  • Control-plane governance (policy changes, key exports, member mutations require approval)
  • Agent memory and automations under the same audit trail
  • Deep transaction inspection (deep_inspect for multicall, Safe, ERC-4337)
  • Cedar/OPA formal policy backends for enterprise compliance

Custody: read the label before you compare​

Turnkey users ask this first, so here it is first. Turnkey generates keys inside an enclave and has no server-side path that can produce a signature without the enclave's policy engine. 1Claw has three custody models, and every key carries a custody field that says which one it is:

custodyWho can sign aloneChainsTurnkey analogue
server (the default today)1Claw, after policy, guardrails, approvals and the OFAC screen. The key is envelope-encrypted under a KMS KEK and unwrapped in the vault (or Shroud's TEE) to sign.All sixNone — this is closer to a hosted wallet with a policy engine in front
client_tssNobody. 2-of-2 FROST: 1Claw holds one share, the user's passkey (WebAuthn PRF) wraps the other. The server signing path refuses the key outright. An agent can co-sign unattended only through a runtime share holder the user provisioned.SolanaTurnkey's enclave guarantee, with the second share in the user's hands rather than in a second enclave
passkey_ownerNobody. A Safe whose only owner is the user's passkey (Safe's WebAuthn signer + P-256 verifier / RIP-7212). 1Claw relays gas; no key exists.Base, Optimism, Arbitrum, Polygon, EthereumClosest to a Turnkey passkey wallet

Details, guard tests and the counsel-facing statement are on the Custody page. The honest migration answer: if your product promised users a non-custodial wallet on Turnkey, provision passkey_owner Safes (EVM) or client_tss wallets (Solana) on 1Claw; if it was a server-side signer behind Turnkey policies, server custody plus 1Claw's policy engine is the like-for-like move and the rest of this guide is about that.

Migration Checklist​

1. Map Your Turnkey Wallets to 1Claw Signing Keys​

Turnkey Concept1Claw Equivalent
WalletAgent signing key (POST /v1/agents/{id}/signing-keys)
Private key (HD)Per-chain signing key stored in __agent-keys vault
Sub-organizationSub-org (POST /v1/org/sub-orgs) or platform app
UserHuman user or platform-provisioned connected user
API keyocv_ agent API key or plt_ platform key

2. Translate Turnkey Policies to 1Claw​

Activity Types → action_in / action_kind_in​

Turnkey Activity Type1Claw action_in1Claw action_kind
ACTIVITY_TYPE_SIGN_TRANSACTION(data-plane: tx_conditions)—
ACTIVITY_TYPE_CREATE_POLICYpolicy.createpolicy
ACTIVITY_TYPE_UPDATE_POLICYpolicy.updatepolicy
ACTIVITY_TYPE_DELETE_POLICYpolicy.deletepolicy
ACTIVITY_TYPE_CREATE_WALLETsigning_key.createsigning_key
ACTIVITY_TYPE_EXPORT_WALLETsigning_key.exportsigning_key
ACTIVITY_TYPE_CREATE_USERmember.invitemember
ACTIVITY_TYPE_DELETE_USERmember.removemember
ACTIVITY_TYPE_CREATE_API_KEYcredential.createcredential
ACTIVITY_TYPE_DELETE_API_KEYcredential.deletecredential
ACTIVITY_TYPE_UPDATE_USERmember.role_changemember

Use action_kind_in to match all actions in a category:

{
"consensus_trigger": {
"action_in": [],
"conditions": [{ "action_kind_in": { "kinds": ["signing_key", "member"] } }],
"min_approvals": 2
}
}

Transaction Policies → tx_conditions​

Turnkey DSL:

policy.filter(Activity.type == "ACTIVITY_TYPE_SIGN_TRANSACTION")
.filter(Transaction.chain == "ethereum")
.filter(Transaction.to in ["0xabc...", "0xdef..."])
.filter(Transaction.value <= 1000000000000000000)
.all()

1Claw tx_conditions (v1 — all tiers):

{
"chain_in": ["ethereum"],
"to_address_in": ["0xabc...", "0xdef..."],
"value_above": "1000000000000000000"
}

1Claw expression engine (v2 — all tiers):

chain == "ethereum" && to in ["0xabc...", "0xdef..."] && value_wei <= "1000000000000000000"

1Claw Cedar (Team+ tier):

permit(
principal == Agent::"agent-uuid",
action == Action::"sign",
resource
)
when {
resource.chain == "ethereum" &&
resource.to in ["0xabc...", "0xdef..."] &&
resource.value_gwei <= 1000000000
};

Consensus Policies​

Turnkey: n-of-m quorum transaction signing via QuorumOS (MPC threshold signatures).

1Claw: consensus_trigger gates who may authorize signing, exports, and policy changes — human approvals before the single HSM-protected signing key is used. This is governance consensus, not Turnkey-style MPC co-signing.

1Claw Shamir/MPC (encryption, not signing): Optional vault-level 2of3_multi_hsm splits each secret's DEK across GCP/AWS/Azure HSMs. Org-level Shamir KEK (Team+) splits the KEK across HSMs (+ optional client share). These protect ciphertext at rest; they do not split secp256k1/Ed25519 signing keys for on-chain threshold signatures.

{
"consensus_trigger": {
"conditions": [
{ "value_above": { "threshold_wei": "5000000000000000000" } },
{ "chain_in": ["ethereum", "bitcoin"] }
],
"min_approvals": 2,
"required_roles": ["admin"],
"require_credential_types": ["passkey", "totp"],
"skip_when": [{ "value_above": "100000000000000000", "to_address_in": ["0xsafe..."] }],
"require_when": [{ "always": true }]
}
}

3. Per-Chain Struct Depth Comparison​

ChainTurnkey Fields1Claw TransactionContext Fields
Ethereumto, value, data, gasLimitto, from, value_wei, function_selector, function_name, decoded_args, erc20_, erc721_, eip712_*, tx_type, deep_inspect inner_calls
Bitcoininputs, outputs, feebtc_outputs, btc_inputs, btc_fee, btc_total_output_sat, btc_is_segwit, btc_version, btc_locktime
Solanainstructions, programIdprogram_ids, sol_account_keys, sol_instructions (with decoded_args), sol_transfers, spl_transfers, sol_num_signers
TroncontractType, to, amounttron_contract_type, tron_to_address, tron_amount, tron_owner_address, tron_contract_address, tron_function_selector, tron_resource_type, tron_permissions
XRP—xrp_tx_type, xrp_destination, xrp_amount, xrp_destination_tag (30+ XRPL tx types)
Cardano—ada_outputs, ada_native_assets

4. What You Gain by Migrating​

CapabilityOn TurnkeyOn 1Claw
Agent memory (encrypted, semantic search)Build yourselfBuilt-in (PUT /v1/agents/{id}/memory/{ns}/{key})
Cron/webhook automationsBuild yourselfBuilt-in (14 step types, approval gates)
LLM proxy with secret redactionNot availableShroud (AMD SEV-SNP TEE)
Messaging channels (Telegram, WhatsApp, Discord)Build yourselfBuilt-in with auto-respond
Agent-to-agent delegationBuild yourselfBuilt-in with human-controlled authorization
Cloud runtimes (managed containers)Build yourselfBuilt-in with idle auto-stop
OIDC federation (Anthropic WIF)—POST /v1/auth/federated-token
Execution intents (HTTP/GraphQL/DB bindings)—Built-in with SSRF protection
Hash-chained audit with verify API—GET /v1/audit/verify
Mobile companion (approval inbox, step-up)—Built-in (Expo, passkey + biometric)
MCP server for AI tools—@1claw/mcp with 162 tools

5. API Mapping​

Turnkey API1Claw Equivalent
POST /api/v1/signPOST /v1/agents/{id}/sign (unified intent-based)
POST /api/v1/submitPOST /v1/agents/{id}/transactions
Create walletPOST /v1/agents/{id}/signing-keys
Export walletPOST /v1/agents/{id}/signing-keys/{chain}/export
Create policyPOST /v1/vaults/{id}/policies
Create sub-orgPOST /v1/org/sub-orgs
Create userPOST /v1/platform/users/upsert

6. SDK Migration​

Turnkey SDK:

import { Turnkey } from "@turnkey/sdk-server";
const turnkey = new Turnkey({ apiBaseUrl, apiPublicKey, apiPrivateKey });
const result = await turnkey.apiClient().signTransaction({ ... });

1Claw SDK:

import { OneclawClient } from "@1claw/sdk";
const client = new OneclawClient({ baseUrl, apiKey });
// Sign + broadcast a transaction under the agent's guardrails
const result = await client.agents.submitTransaction(agentId, {
chain: "ethereum",
to: "0x...",
value: "1000000000000000000",
});
// Or sign a message / typed data / digest
const sig = await client.agents.sign(agentId, {
intent_type: "personal_sign",
chain: "ethereum",
message: "hello",
});

7. End-user UX mapping (wallet apps)​

For a consumer wallet that used Turnkey's dashboard-style flows, the same surfaces exist:

Turnkey UX1Claw
Add an agent by scanning / pasting its key and comparing a fingerprint1claw agent enroll --pair (or agents.pair() in the SDK): the agent generates an ed25519 identity, the approval page shows its SHA256: fingerprint next to what the agent printed, and the agent collects its API key itself on approval
Proposals tab — "Sign personal message", full payload, provider, expiry, status/proposals in the dashboard, and <OneclawProposalDetail /> from @1claw/wallet-react (client.listProposals / getProposal / decideProposal) with passkey step-up for tier-2 signatures
Home activity feedAgent activity feed on the dashboard home (approvals, sends, guardrail rejections, sanctions blocks, pairings)
Passkey sign-in and per-action touchPasskeys with step-up (X-Passkey-Token), risk tiers, and — for self-custody keys — the touch that unlocks the user's share
Export walletPOST …/export for server keys (step-up + control-plane consensus); not applicable to client_tss / passkey_owner, where there is nothing on the server to export

Migration Support​

Contact ops@1claw.co for assisted migration, including:

  • Policy translation review
  • Signing key import (POST /v1/agents/{id}/signing-keys/{chain}/import)
  • Parallel-run validation (sign on both platforms, compare outputs)
  • Custom Cedar/OPA policy authoring for complex Turnkey DSL translations