Skip to main content
controller-cli Guidance for installing and operating the Cartridge Controller CLI (`controller`) to create human-approved sessions and execute Starknet transactions with JSON output, explicit network selection, scoped policies, paymaster control, and error recovery.
跳到安装 Skills Marketplace 发现并探索由社区构建的 Agent Skills
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/keep-starknet-strange/starknet-agentic --skill controller-cli命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
下载 Zip 下载中... 同仓库更多 Skills Routes Starknet agent, wallet, DeFi, identity, SDK, and Cairo contract work to the smallest focused skill module.
SNIP-36 virtual block proving on Starknet. Trigger on "virtual block", "SNIP-36", "off-chain proof", "anonymous vote", "heavy computation off-chain", "prove a transaction". Covers Cairo virtual contract, proof server, starknet.js integration, and on-chain verification.
Security audit of Cairo/Starknet code. Trigger on "audit", "check this contract", "review for security". Modes - default (full repo), deep (+ adversarial reasoning), or specific filenames.
keep-starknet-strange
keep-starknet-strange/starknet-agentic
打开 GitHub 仓库 name controller-cli description Guidance for installing and operating the Cartridge Controller CLI (`controller`) to create human-approved sessions and execute Starknet transactions with JSON output, explicit network selection, scoped policies, paymaster control, and error recovery. license Apache-2.0 metadata {"author":"keep-starknet-strange","version":"1.0.0","org":"keep-starknet-strange"} compatibility controller-cli >=0.1.x, Python 3.8+ keywords ["starknet","cartridge","controller","controller-cli","session","paymaster","voyager"] allowed-tools ["Bash","Read","Write","Grep"] user-invocable true
Cartridge Controller CLI
Use this skill when you need to run the Cartridge Controller CLI (controller-cli) to create a scoped session (human-approved) and then execute Starknet transactions via that session.
When to Use
Operating Cartridge Controller sessions with explicit network and least-privilege policies.
Running controller or controller_safe.py for human-approved Starknet transactions.
When NOT to Use
General Starknet scripting that does not rely on Cartridge Controller.
Contract authoring, testing, deployment, or security audit workflows.
Related modules: skills catalog .
Non-Negotiable Rules
Always pass --json and treat outputs as JSON.
Always be explicit about network. Never rely on defaults:
--chain-id SN_MAIN|SN_SEPOLIA, or
--rpc-url <explicit url>.
controller register requires human browser authorization. Do not automate/bypass it.
Use least-privilege policies only. Do not add token transfer permissions unless explicitly requested.
Transaction links: use Voyager only:
Mainnet: https://voyager.online/tx/0x...
Sepolia: https://sepolia.voyager.online/tx/0x...
Quick Start
curl -fsSL https://raw.githubusercontent.com/cartridge-gg/controller-cli/main/install.sh | bash
export PATH="$PATH :$HOME /.local/bin"
controller --version
Safer Wrapper (Recommended)
This skill includes a small wrapper that enforces the rules above and normalizes output:
python3 scripts/controller_safe.py status
python3 scripts/controller_safe.py register --preset loot-survivor --chain-id SN_MAIN
python3 scripts/controller_safe.py execute 0xCONTRACT entrypoint 0xCALLDATA --rpc-url https://api.cartridge.gg/x/starknet/sepolia
Behavior:
Adds --json if missing.
Refuses to run call|execute|register|transaction without --chain-id or --rpc-url.
Parses stdout as JSON.
If .status == "error", prints error_code, message, recovery_hint and exits non-zero.
Deterministic Workflow
1) Generate Keypair controller generate --json
The private key is stored locally (typically ~/.config/controller-cli/).
2) Check Session Status
no_session (no keypair)
keypair_only (needs registration)
active (registered and not expired)
3) Register Session (Human Approval Required) Requirement: a human must approve in a browser.
Option A (preferred): preset policies:
controller register --preset loot-survivor --chain-id SN_MAIN --json
Option B: least-privilege policy file:
controller register --file policy.json --rpc-url https://api.cartridge.gg/x/starknet/sepolia --json
Authorization output includes short_url and/or authorization_url:
Display short_url if present; otherwise display authorization_url.
Ask the user to open it and approve.
The CLI blocks until approved or timeout (typically ~6 minutes).
4) Execute Transaction Single call (positional args: contract, entrypoint, calldata):
controller execute 0xCONTRACT transfer 0xRECIPIENT,0xAMOUNT_LOW,0xAMOUNT_HIGH \
--rpc-url https://api.cartridge.gg/x/starknet/sepolia \
--json
Multiple calls from file:
controller execute --file calls.json --rpc-url https://api.cartridge.gg/x/starknet/sepolia --json
Optional confirmation wait:
controller execute --file calls.json --rpc-url https://api.cartridge.gg/x/starknet/sepolia --wait --timeout 300 --json
5) Read-Only Call (No Session Needed) controller call 0xCONTRACT balance_of 0xADDRESS --chain-id SN_SEPOLIA --json
6) Transaction Status controller transaction 0xTX_HASH --chain-id SN_SEPOLIA --wait --timeout 300 --json
7) Lookup Usernames / Addresses controller lookup --usernames alice,bob --json
controller lookup --addresses 0x123...,0x456... --json
Network Selection Always be explicit about network.
Chain ID RPC URL SN_MAINhttps://api.cartridge.gg/x/starknet/mainnetSN_SEPOLIAhttps://api.cartridge.gg/x/starknet/sepolia
--rpc-url flag
Stored session RPC URL (from registration)
Config default (lowest)
Run controller status --json
Match the session chain_id, or ask the user
Paymaster Control Default behavior uses the paymaster (free execution). If the paymaster is unavailable, the transaction fails (no silent fallback).
To self-pay with user funds:
controller execute ... --no-paymaster --json
Amount Encoding (u256) Many ERC20-style amounts are u256 split into (low, high) u128 limbs.
For values that fit in u128 (most cases): set high = 0x0.
Example calldata:
0xRECIPIENT,0x64,0x0
Error Handling {
"status" : "error" ,
"error_code" : "ErrorType" ,
"message" : "..." ,
"recovery_hint" : "..."
}
Always branch on error_code and follow recovery_hint.
NoSession: run controller generate --json
SessionExpired: re-run controller register ... --json
ManualExecutionRequired: policy does not authorize the call; tighten/adjust policy and re-register
CallbackTimeout: user did not approve quickly enough; re-run register and retry
Input Validation Addresses must be 0x-prefixed hex.
python3 scripts/validate_hex_address.py 0xabc...