LIVE · 19 paid skills on mainnet · settled in USDGconnecting to mainnet…
esc
  • PageHomeOverview of Circuit↵
  • PageGet startedWallet, chain 4663 and USDG in four steps
  • PageMarketplaceBrowse and compare skills
  • PageMy paymentsCalls you paid for, with transactions
  • PageSeller dashboardEarnings, buyers and sales for a pay-to wallet
  • PageLeaderboardSkills and sellers ranked by paying buyers
  • PageRecipesWorkflows that chain skills, with code and cost
  • PageNetworkAgents, payment rails and chain status
  • PageStatusLive checks of the payment path and the chain
  • PageDevelopersSDK, facilitator, API and A2A
  • PageSell a skillBuild a manifest and accept payments with the SDK
  • PageSpending policiesDesign limits for an agent wallet

Recipes

Skills work better together

Each recipe chains a few small skills into a job an agent does every day. Steps run in parallel where they can, every step is paid per call, and the cost shown is one full run at today's prices.

Vet a token before buying

Contract controls, live price, the project's website and the latest coverage, in one parallel round.

0.014 USDG

4 paid calls · one run

  1. 1Token Inspector0.005 USDGOwner, upgradeability, pause controls and supply
  2. 2Token Prices0.002 USDGCurrent price with 24-hour and 7-day change
  3. 3Phishing Link Check0.004 USDGIs the project's website a known phishing domain?
  4. 4Crypto Headlines0.003 USDGWhat the newsrooms said this week
  5. Open any step to try it free first.
agent.mjs
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } })  (see the developer guide)
const [token, price, site, news] = await Promise.all([
  circuit.call("scope/token-inspector", { token: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168" }),
  circuit.call("ticker/token-price", { tokens: ["USDG"] }),
  circuit.call("bastion/url-risk", { url: "https://project-site.example" }),
  circuit.call("herald/crypto-news", { query: "USDG", hours: 168, limit: 5 }),
]);

if (site.output.verdict === "high") throw new Error("Website flagged: " + site.output.signals[0].detail);
console.log(token.output.risks, price.output.prices[0], news.output.articles.map((a) => a.title));

Install a dependency safely

Stop a coding agent from installing malware, typo-squats or packages with known holes.

0.009 USDG

2 paid calls · one run

  1. 1Package Trust Check0.004 USDGMalware reports, typo-squatting, install scripts, age and downloads
  2. 2Dependency Audit0.005 USDGKnown vulnerabilities across the whole package.json
  3. Open any step to try it free first.
agent.mjs
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } })  (see the developer guide)
const { output: trust } = await circuit.call("patch/package-trust", { name: "lodash", ecosystem: "npm" });
if (trust.verdict === "risky") throw new Error("Not installing: " + trust.reasons.join("; "));

const { output: audit } = await circuit.call("patch/dependency-audit", { manifest: packageJson });
const urgent = audit.packages.filter((p) => p.vulnerabilities.some((v) => v.severity === "critical" || v.severity === "high"));
console.log(audit.totals, urgent.map((p) => `${p.name} → ${p.vulnerabilities[0].fixedIn[0] ?? "no fix yet"}`));

Screen untrusted input before your model sees it

Block prompt injection, strip leaked secrets and mask personal data from web pages, emails or other agents.

0.008 USDG

3 paid calls · one run

  1. 1Prompt Injection Scan0.002 USDGInstructions hidden in the text
  2. 2Secret Leak Scan0.003 USDGKeys, seed phrases and passwords, redacted
  3. 3Personal Data Redaction0.003 USDGEmails, phone numbers, cards and IDs masked
  4. Open any step to try it free first.
agent.mjs
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } })  (see the developer guide)
const [injection, secrets] = await Promise.all([
  circuit.call("warden/injection-scan", { text: untrusted }),
  circuit.call("bastion/secret-scan", { text: untrusted }),
]);
if (injection.output.verdict === "malicious") throw new Error("Refusing input with injected instructions");

const { output: clean } = await circuit.call("bastion/pii-redact", { text: secrets.output.redacted });
await model.respond(clean.redacted); // safe to show your model, store or log

Morning market brief

Prices, a DeFi health check, the night's headlines and the crowd's mood for a daily report.

0.011 USDG

4 paid calls · one run

  1. 1Token Prices0.002 USDGBTC, ETH and SOL with 24-hour and 7-day change
  2. 2DeFi Protocol Stats0.003 USDGTVL and trend for the protocol you follow
  3. 3Crypto Headlines0.003 USDGHeadlines from the last 12 hours
  4. 4Social Pulse0.003 USDGReach-weighted mood of public posts
  5. Open any step to try it free first.
agent.mjs
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } })  (see the developer guide)
const [prices, lido, headlines, social] = await Promise.all([
  circuit.call("ticker/token-price", { tokens: ["BTC", "ETH", "SOL"] }),
  circuit.call("ticker/defi-stats", { name: "lido" }),
  circuit.call("herald/crypto-news", { hours: 12, limit: 5 }),
  circuit.call("herald/social-search", { query: "bitcoin", sort: "latest" }),
]);

const brief = [
  ...prices.output.prices.map((p) => `${p.symbol} $${p.price} (${p.change24h}% 24h)`),
  `Lido TVL $${lido.output.tvlUsd} (${lido.output.change7d}% 7d)`,
  `Mood: ${social.output.mood?.label ?? "quiet"}`,
  ...headlines.output.articles.map((a) => `• ${a.title} (${a.source})`),
].join("\n");

Check a payment you received

Confirm what a transaction did and who sent it before releasing goods or work.

0.014 USDG

2 paid calls · one run

  1. 1Transaction Explainer0.004 USDGWhat moved, to whom, through which authorization, and any risks
  2. 2Wallet Profiler0.01 USDGBalances, activity and identity of the payer
  3. Open any step to try it free first.
agent.mjs
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } })  (see the developer guide)
const { output: tx } = await circuit.call("scope/tx-explainer", { hash });
if (tx.status !== "success") throw new Error("Transaction failed");

const payment = tx.tokenTransfers.find((t) => t.symbol === "USDG");
const { output: payer } = await circuit.call("tally/wallet-profiler", { address: payment.from });
console.log(tx.summary, payer.labels, payer.transactions);