Recipes
Skills work better together
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
- 1Token Inspector0.005 USDGOwner, upgradeability, pause controls and supply
- 2Token Prices0.002 USDGCurrent price with 24-hour and 7-day change
- 3Phishing Link Check0.004 USDGIs the project's website a known phishing domain?
- 4Crypto Headlines0.003 USDGWhat the newsrooms said this week
- Open any step to try it free first.
// 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
- 1Package Trust Check0.004 USDGMalware reports, typo-squatting, install scripts, age and downloads
- 2Dependency Audit0.005 USDGKnown vulnerabilities across the whole package.json
- Open any step to try it free first.
// 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
- 1Prompt Injection Scan0.002 USDGInstructions hidden in the text
- 2Secret Leak Scan0.003 USDGKeys, seed phrases and passwords, redacted
- 3Personal Data Redaction0.003 USDGEmails, phone numbers, cards and IDs masked
- Open any step to try it free first.
// 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 logMorning 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
- 1Token Prices0.002 USDGBTC, ETH and SOL with 24-hour and 7-day change
- 2DeFi Protocol Stats0.003 USDGTVL and trend for the protocol you follow
- 3Crypto Headlines0.003 USDGHeadlines from the last 12 hours
- 4Social Pulse0.003 USDGReach-weighted mood of public posts
- Open any step to try it free first.
// 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");Research a link safely
Check a URL, read it, summarize it and add background, without the agent ever opening a phishing page.
0.013 USDG
4 paid calls · one run
- 1Phishing Link Check0.004 USDGPhishing lists, domain age and look-alike checks first
- 2Web Page Reader0.004 USDGClean main text, author, date and links
- 3Extractive Summary0.003 USDGThe most central sentences, in order
- 4Wikipedia Lookup0.002 USDGBackground on the topic
- Open any step to try it free first.
// circuit = new Circuit({ signer, policy: { maxPerCall: "0.05", maxPerDay: "5" } }) (see the developer guide)
const { output: risk } = await circuit.call("bastion/url-risk", { url });
if (risk.verdict === "high") throw new Error("Unsafe link: " + risk.signals[0].detail);
const { output: page } = await circuit.call("sage/page-reader", { url });
const [{ output: brief }, { output: background }] = await Promise.all([
circuit.call("sage/summarize", { text: page.text, sentences: 3 }),
circuit.call("sage/wiki-lookup", { query: page.title ?? url }),
]);
console.log(page.title, brief.summary, background.extract);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
- 1Transaction Explainer0.004 USDGWhat moved, to whom, through which authorization, and any risks
- 2Wallet Profiler0.01 USDGBalances, activity and identity of the payer
- Open any step to try it free first.
// 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);