PageSourceSearch

https://bopen.ai/agents/product-skills/legal

html bopen.ai collected 2026-10-05 12:22:54 UTC 176,725 bytes, 315 lines download raw bytes

1<!DOCTYPE html><html data-dpl-id="dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/8d05cfa5faa8406c-s.p.1s123piy9_v1m.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/c825fd02acae0153-s.p.1q3-y3vmyf3p6.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/dc0d9adbac686440-s.p.3cik_s2si-ft-.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" imageSrcSet="/images/agents/optimized/anthony-48.webp 48w, /images/agents/optimized/anthony-96.webp 96w, /images/agents/optimized/anthony-144.webp 144w, /images/agents/optimized/anthony-192.webp 192w, /images/agents/optimized/anthony-256.webp 256w, /images/agents/optimized/anthony-384.webp 320w, /images/agents/optimized/anthony-384.webp 384w, /images/agents/optimized/anthony-512.webp 512w, /images/agents/optimized/anthony-640.webp 640w, /images/agents/optimized/anthony-640.webp 828w, /images/agents/optimized/anthony-640.webp 1080w, /images/agents/optimized/anthony-640.webp 1920w" imageSizes="160px"/><link rel="stylesheet" href="/_next/static/chunks/3e7p7_cewh3w8.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/14f2nd_kuit2j.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/2d_rj09wsb5q5.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/1ie6cijmm75g3.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed"/>
1<script src="/_next/static/chunks/3j9vihxw5gmky.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/0t1cupau1mtgy.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/3u6xch29lute6.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/turbopack-2jxc9u501hqte.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<script src="/_next/static/chunks/2d4kbcb_xr14_.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" async=""></script>
1<link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-N0HC9H708Z" as="script"/><meta http-equiv="origin-trial" content="AmcXM47jsJzN45BHbf3c1UagBhIkZjRjV8jdXUQIaTMvOh7iaqIhpXBTruqyYMX30ixQS/3klY/YcnbkqWAidwMAAABIeyJvcmlnaW4iOiJodHRwczovL2JvcGVuLmFpOjQ0MyIsImZlYXR1cmUiOiJXZWJNQ1AiLCJleHBpcnkiOjE3OTQ4NzM2MDB9"/><meta name="next-size-adjust" content=""/><title>Anthony — Legal &amp; Compliance — bOpen.ai</title><meta name="description" content="Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.
2
3&lt;example&gt;
4Context: User needs SOC 2 readiness help
5user: &quot;Can you run a SOC 2 gap analysis and tell me what controls we&#x27;re missing?&quot;
6assistant: &quot;I&#x27;ll use the legal agent to scope the review, map the control gaps, and frame the remediation work.&quot;
7&lt;commentary&gt;
8SOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.
9&lt;/commentary&gt;
10&lt;/example&gt;
11
12&lt;example&gt;
13Context: User needs auditor-facing documentation
14user: &quot;Draft our access control policy and help organize the evidence for the auditor.&quot;
15assistant: &quot;I&#x27;ll use the legal agent to draft the policy and structure the evidence request.&quot;
16&lt;commentary&gt;
17Policy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.
18&lt;/commentary&gt;
19&lt;/example&gt;
20
21&lt;example&gt;
22Context: User is evaluating a stablecoin or digital-asset product
23user: &quot;What licenses or registrations might apply if we help design or operate a payment stablecoin?&quot;
24assistant: &quot;I&#x27;ll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.&quot;
25&lt;commentary&gt;
26Stablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.
27&lt;/commentary&gt;
28&lt;/example&gt;
29
30&lt;example&gt;
31Context: User needs token classification or tokenized-securities analysis
32user: &quot;Is this token a security, a commodity, or just software infrastructure?&quot;
33assistant: &quot;I&#x27;ll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.&quot;
34&lt;commentary&gt;
35Token classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.
36&lt;/commentary&gt;
37&lt;/example&gt;"/><link rel="canonical" href="https://bopen.ai/agents/product-skills/legal/"/><meta property="og:title" content="Anthony — Legal &amp; Compliance — bOpen.ai"/><meta property="og:description" content="Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.
38
39&lt;example&gt;
40Context: User needs SOC 2 readiness help
41user: &quot;Can you run a SOC 2 gap analysis and tell me what controls we&#x27;re missing?&quot;
42assistant: &quot;I&#x27;ll use the legal agent to scope the review, map the control gaps, and frame the remediation work.&quot;
43&lt;commentary&gt;
44SOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.
45&lt;/commentary&gt;
46&lt;/example&gt;
47
48&lt;example&gt;
49Context: User needs auditor-facing documentation
50user: &quot;Draft our access control policy and help organize the evidence for the auditor.&quot;
51assistant: &quot;I&#x27;ll use the legal agent to draft the policy and structure the evidence request.&quot;
52&lt;commentary&gt;
53Policy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.
54&lt;/commentary&gt;
55&lt;/example&gt;
56
57&lt;example&gt;
58Context: User is evaluating a stablecoin or digital-asset product
59user: &quot;What licenses or registrations might apply if we help design or operate a payment stablecoin?&quot;
60assistant: &quot;I&#x27;ll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.&quot;
61&lt;commentary&gt;
62Stablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.
63&lt;/commentary&gt;
64&lt;/example&gt;
65
66&lt;example&gt;
67Context: User needs token classification or tokenized-securities analysis
68user: &quot;Is this token a security, a commodity, or just software infrastructure?&quot;
69assistant: &quot;I&#x27;ll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.&quot;
70&lt;commentary&gt;
71Token classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.
72&lt;/commentary&gt;
73&lt;/example&gt;"/><meta property="og:url" content="https://bopen.ai/agents/product-skills/legal/"/><meta property="og:site_name" content="bOpen.ai"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://bopen.ai/api/og?agent=product-skills%3Alegal"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Anthony, Legal &amp; Compliance at bOpen.ai"/><meta property="og:type" content="profile"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Anthony — Legal &amp; Compliance — bOpen.ai"/><meta name="twitter:description" content="Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.
74
75&lt;example&gt;
76Context: User needs SOC 2 readiness help
77user: &quot;Can you run a SOC 2 gap analysis and tell me what controls we&#x27;re missing?&quot;
78assistant: &quot;I&#x27;ll use the legal agent to scope the review, map the control gaps, and frame the remediation work.&quot;
79&lt;commentary&gt;
80SOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.
81&lt;/commentary&gt;
82&lt;/example&gt;
83
84&lt;example&gt;
85Context: User needs auditor-facing documentation
86user: &quot;Draft our access control policy and help organize the evidence for the auditor.&quot;
87assistant: &quot;I&#x27;ll use the legal agent to draft the policy and structure the evidence request.&quot;
88&lt;commentary&gt;
89Policy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.
90&lt;/commentary&gt;
91&lt;/example&gt;
92
93&lt;example&gt;
94Context: User is evaluating a stablecoin or digital-asset product
95user: &quot;What licenses or registrations might apply if we help design or operate a payment stablecoin?&quot;
96assistant: &quot;I&#x27;ll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.&quot;
97&lt;commentary&gt;
98Stablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.
99&lt;/commentary&gt;
100&lt;/example&gt;
101
102&lt;example&gt;
103Context: User needs token classification or tokenized-securities analysis
104user: &quot;Is this token a security, a commodity, or just software infrastructure?&quot;
105assistant: &quot;I&#x27;ll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.&quot;
106&lt;commentary&gt;
107Token classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.
108&lt;/commentary&gt;
109&lt;/example&gt;"/><meta name="twitter:image" content="https://bopen.ai/api/og?agent=product-skills%3Alegal"/><link rel="icon" href="/favicon.ico?favicon.2qpp2cviistsx.ico" sizes="32x32" type="image/x-icon"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180"/>
109<script id="webmcp-register">(() => {
110  const tools = [{"name":"list_marketplace","description":"List every plugin, agent, and skill available in the bOpen.ai marketplace.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/marketplace","pick":null,"kind":"catalog","method":"GET"},{"name":"get_plugin","description":"Fetch a single bOpen.ai marketplace plugin by name, including its agents, skills, and install string.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Plugin name (e.g. sigma-auth)."}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/marketplace","pick":"plugin","kind":"catalog","method":"GET"},{"name":"get_skill","description":"Fetch a single bOpen.ai marketplace skill by name. Pass plugin when the skill name is shared across plugins.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Skill name, or plugin:skill id (e.g. confess or core:confess)."},"plugin":{"type":"string","description":"Plugin that owns the skill, when name is not qualified."}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/marketplace","pick":"skill","kind":"catalog","method":"GET"},{"name":"search_marketplace","description":"Search the bOpen.ai marketplace snapshot for matching plugins, skills, and agents.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search query (min 2 chars)."}},"required":["q"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/marketplace","pick":"search","kind":"catalog","method":"GET"},{"name":"get_agent","description":"Fetch skills and metadata for a single bOpen.ai agent by its id (plugin:agent-name).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Agent id in the form plugin:agent-name."}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/agent/{id}","pick":null,"kind":"catalog","method":"GET"},{"name":"search_agents","description":"Search bOpen.ai agents by keyword. Matches system prompts and referenced skill content.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search query (min 2 chars)."}},"required":["q"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/search","pick":null,"kind":"catalog","method":"GET"},{"name":"search_tool_shed","description":"Search the bOpen.ai Tool Shed catalog for developer tools.","inputSchema":{"type":"object","properties":{"q":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":20}},"required":["q"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/tool-shed/search","pick":null,"kind":"catalog","method":"GET"},{"name":"list_products","description":"List bOpen.ai commerce products with live sale and release status. Stripe secret IDs are not included. If onSale is false, start_checkout will return the existing 409.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/products","pick":null,"kind":"catalog","method":"GET"},{"name":"get_product","description":"Fetch one bOpen.ai commerce product by id, including price, checkoutMode, rails, and whether it is on sale.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"commerce_products id (e.g. chat-pro, pack-full-suite, agent-master-desktop)."}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/products/{id}","pick":null,"kind":"catalog","method":"GET"},{"name":"start_checkout","description":"Start a live purchase for a product id. Confirms with the user, then POSTs the existing /api/checkout/{productId} route (or /api/bsv/checkout/{productId} when rail=bsv) and navigates to the returned Stripe URL. Flag and release gates stay on those routes.","inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"commerce_products id to buy."},"rail":{"type":"string","enum":["stripe","bsv"],"description":"Payment rail. Defaults to stripe."},"email":{"type":"string","description":"Buyer email. Required when rail is bsv."}},"required":["productId"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"anchor":"/api/checkout/{productId}","pick":null,"kind":"checkout","method":"GET"},{"name":"list_social_accounts","description":"List the signed-in user's linked X accounts so an agent can choose an account id for a draft.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/social/accounts","pick":null,"kind":"catalog","method":"GET"},{"name":"list_social_drafts","description":"List the signed-in user's X posts, including drafts and planned posts for review. This cannot schedule or publish anything.","inputSchema":{"type":"object","properties":{"account":{"type":"string","description":"Optional linked account id."},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"anchor":"/api/social/posts","pick":null,"kind":"catalog","method":"GET"},{"name":"create_social_draft","description":"Create an editable X draft for the signed-in user. The user must review and schedule or post it themselves.","inputSchema":{"type":"object","properties":{"accountId":{"type":"string","description":"Linked X account id."},"items":{"type":"array","minItems":1,"description":"One item per tweet in thread order.","items":{"type":"object","properties":{"text":{"type":"string","description":"Tweet text."},"media":{"type":"array","maxItems":4,"description":"Optional private image ids returned by POST /api/social/media.","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}},"required":["text"],"additionalProperties":false}},"tz":{"type":"string","description":"Optional IANA timezone, such as America/Detroit."}},"required":["accountId","items"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"anchor":"/api/social/posts","pick":null,"kind":"catalog","method":"POST"},{"name":"upload_social_image","description":"Upload one private P
110NG, JPEG, GIF, or WebP image for a social draft. Pass a base64 data URL, then use the returned media id in create_social_draft or update_social_draft. The user still controls scheduling and posting.","inputSchema":{"type":"object","properties":{"dataUrl":{"type":"string","description":"A base64 image data URL up to 10 MB, for example data:image/png;base64,..."}},"required":["dataUrl"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"anchor":"/api/social/media","pick":null,"kind":"catalog","method":"POST"},{"name":"update_social_draft","description":"Replace the text and image order in one of the signed-in user's draft or planned X posts. Scheduled posts must be edited from their private review page; this tool cannot schedule or publish.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Social post id."},"items":{"type":"array","minItems":1,"description":"Complete replacement thread in tweet order.","items":{"type":"object","properties":{"text":{"type":"string","description":"Tweet text."},"media":{"type":"array","maxItems":4,"description":"Optional private image ids returned by POST /api/social/media.","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false}}},"required":["text"],"additionalProperties":false}}},"required":["id","items"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"anchor":"/api/social/posts/{id}","pick":null,"kind":"catalog","method":"PATCH"}];
111  const api = (typeof document !== "undefined" && document.modelContext)
112    || (typeof navigator !== "undefined" && navigator.modelContext);
113  if (!api || typeof api.registerTool !== "function") return;
114
115  const haystack = (value) => String(value ?? "").toLowerCase();
116
117  function pickPlugin(data, input) {
118    const name = String(input.name ?? "").trim();
119    const plugin = (data.plugins || []).find((item) => item.name === name);
120    if (!plugin) throw new Error("Unknown plugin: " + (name || "(empty)"));
121    return plugin;
122  }
123
124  function pickSkill(data, input) {
125    const raw = String(input.name ?? "").trim();
126    const pluginHint = String(input.plugin ?? "").trim();
127    const colon = raw.indexOf(":");
128    const plugin = pluginHint || (colon === -1 ? "" : raw.slice(0, colon));
129    const name = colon === -1 ? raw : raw.slice(colon + 1);
130    const matches = [];
131    for (const item of data.plugins || []) {
132      for (const skill of item.skills || []) {
133        if (skill.name !== name) continue;
134        if (plugin && skill.plugin !== plugin && item.name !== plugin) continue;
135        matches.push({
136          ...skill,
137          plugin: skill.plugin || item.name,
138          id: (skill.plugin || item.name) + ":" + skill.name,
139        });
140      }
141    }
142    if (matches.length === 0) throw new Error("Unknown skill: " + (raw || "(empty)"));
143    return matches[0];
144  }
145
146  function searchMarketplace(data, input) {
147    const q = String(input.q ?? "").trim().toLowerCase();
148    if (q.length < 2) throw new Error("q must be at least 2 characters");
149    const plugins = [];
150    const skills = [];
151    const agents = [];
152    for (const plugin of data.plugins || []) {
153      if (haystack(plugin.name).includes(q) || haystack(plugin.description).includes(q)) {
154        plugins.push(plugin);
155      }
156      for (const skill of plugin.skills || []) {
157        if (haystack(skill.name).includes(q) || haystack(skill.description).includes(q)) {
158          skills.push({
159            ...skill,
160            plugin: skill.plugin || plugin.name,
161            id: (skill.plugin || plugin.name) + ":" + skill.name,
162          });
163        }
164      }
165      for (const agent of plugin.agents || []) {
166        if (
167          haystack(agent.id).includes(q) ||
168          haystack(agent.name).includes(q) ||
169          haystack(agent.label).includes(q) ||
170          haystack(agent.desc).includes(q) ||
171          haystack(agent.title).includes(q)
172        ) {
173          agents.push(agent);
174        }
175      }
176    }
177    return { plugins, skills, agents };
178  }
179
180  function applyPick(pick, data, input) {
181    if (pick === "plugin") return pickPlugin(data, input);
182    if (pick === "skill") return pickSkill(data, input);
183    if (pick === "search") return searchMarketplace(data, input);
184    return data;
185  }
186
187  async function confirmCheckout(message, options) {
188    const ask = () => typeof window !== "undefined" && window.confirm(message);
189    if (options && typeof options.requestUserInteraction === "function") {
190      return Boolean(await options.requestUserInteraction(ask));
191    }
192    return ask();
193  }
194
195  async function executeCheckout(input, options) {
196    const productId = String(input.productId ?? "").trim();
197    if (!productId) return { error: "productId is required", status: 400 };
198    const rail = input.rail === "bsv" ? "bsv" : "stripe";
199    const email = String(input.email ?? "").trim();
200    const confirmed = await confirmCheckout(
201      rail === "bsv"
202        ? "Pay for " + productId + " with BSV? This starts a live purchase."
203        : "Buy " + productId + "? You will be redirected to Stripe checkout.",
204      options,
205    );
206    if (!confirmed) return { cancelled: true, message: "Checkout cancelled" };
207    if (rail === "bsv") {
208      if (!email) return { error: "A valid buyer email is required", status: 400 };
209      const res = await fetch("/api/bsv/checkout/" + encodeURIComponent(productId), {
210        method: "POST",
211        headers: { accept: "application/json", "content-type": "application/json" },
212        credentials: "same-origin",
213        body: JSON.stringify({ email }),
214        signal: options && options.signal,
215      });
216      const body = await res.json().catch(() => ({}));
217      if (!res.ok) return { error: body.error || (res.status + " " + res.statusText), status: res.status };
218      return body;
219    }
220    const res = await fetch("/api/checkout/" + encodeURIComponent(productId), {
221      method: "POST",
222      headers: { accept: "application/json", "content-type": "application/json" },
223      credentials: "same-origin",
224      signal: options && options.signal,
225    });
226    const body = await res.json().catch(() => ({}));
227    if (!res.ok) return { error: body.error || (res.status + " " + res.statusText), status: res.status };
228    if (!body.url) return { error: "Checkout did not return a URL", status: 502 };
229    if (typeof window !== "undefined") window.location.assign(body.url);
230    return { url: body.url, navigated: true };
231  }
232
233  async function executeTool(tool, input, options) {
234    if (tool.kind === "checkout") return executeCheckout(input ?? {}, options);
235    let path = tool.anchor;
236    const query = new URLSearchParams();
237    const body = {};
238    for (const [key, value] of Object.entries(input ?? {})) {
239      const token = "{" + key + "}";
240      if (path.includes(token)) {
241        path = path.replace(token, encodeURIComponent(String(value)));
242      } else if (!tool.pick && value != null) {
243        if (tool.method === "GET") query.set(key, String(value));
244        else body[key] = value;
245      }
246    }
247    const qs = query.toString();
248    const res = await fetch(path + (qs ? "?" + qs : ""), {
249      method: tool.method,
250      headers: {
251        accept: "application/json",
252        ...(tool.method === "GET" ? {} : { "content-type": "application/json" }),
253      },
254      credentials: "same-origin",
255      ...(tool.method === "GET" ? {} : { body: JSON.stringify(body) }),
256      signal: options && options.signal,
257    });
258    if (!res.ok) {
259      throw new Error("bOpen.ai API " + tool.name + " failed: " + res.status + " " + res.statusText);
260    }
261    return applyPick(tool.pick, await res.json(), input);
262  }
263
264  (async () => {
265    for (const tool of tools) {
266      try {
267        await api.registerTool({
268          name: tool.name,
269          description: tool.description,
270          inputSchema: tool.inputSchema,
271          annotations: tool.annotations,
272          execute: (input, options) => executeTool(tool, input ?? {}, options),
273        });
274      } catch (err) {
275        if (err && err.name === "InvalidStateError") continue;
276      }
277    }
278  })();
279})();</script>
279<script src="/_next/static/chunks/0cz1d0mv5g_q7.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" noModule=""></script>
279</head><body class="inter_b1cfe8d5-module__FGNtsa__variable space_mono_d8eecc30-module__bEIZiG__variable raleway_9937a3e8-module__oiguAa__variable"><div hidden=""><!--$--><!--/$--></div>
279<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@id":"https://bopen.ai/#organization","@type":"Organization","name":"bOpen.ai","url":"https://bopen.ai","logo":"https://bopen.ai/android-chrome-512x512.png","description":"bOpen.ai is the open-source toolkit published by Open Protocol Labs, Inc., with free developer tooling for AI agents, wallets, tokens, and overlay networks.","parentOrganization":{"@type":"Organization","name":"Open Protocol Labs, Inc.","url":"https://opl.dev","foundingDate":"2023","sameAs":["https://www.linkedin.com/company/opldotdev","https://github.com/b-open-io","https://x.com/bOpen_AI"]},"email":"[email protected]","contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","url":"https://bopen.ai/contact","availableLanguage":"English"},"address":{"@type":"PostalAddress","addressCountry":"US"},"founder":[{"@type":"Person","name":"Kurt Wuckert Jr.","url":"https://kurtwuckertjr.com","sameAs":["https://www.wikidata.org/wiki/Q138774106"]},{"@type":"Person","name":"Luke Rohenaz","url":"https://satchmo.dev","sameAs":["https://www.wikidata.org/wiki/Q140697627"]}],"knowsAbout":[{"@type":"Thing","name":"Artificial intelligence","sameAs":["https://www.wikidata.org/wiki/Q11660"]},{"@type":"Thing","name":"Intelligent agent","sameAs":["https://www.wikidata.org/wiki/Q1142726"]},{"@type":"Thing","name":"Multi-agent system","sameAs":["https://www.wikidata.org/wiki/Q529909"]},{"@type":"Thing","name":"Large language model","sameAs":["https://www.wikidata.org/wiki/Q115305900"]},{"@type":"Thing","name":"Prompt engineering","sameAs":["https://www.wikidata.org/wiki/Q108941486"]},{"@type":"Thing","name":"Autonomous agent","sameAs":["https://www.wikidata.org/wiki/Q4826847"]},{"@type":"Thing","name":"AI agent","sameAs":["https://www.wikidata.org/wiki/Q132451509"]},{"@type":"Thing","name":"Chatbot","sameAs":["https://www.wikidata.org/wiki/Q870780"]},{"@type":"Thing","name":"Anthropic","sameAs":["https://www.wikidata.org/wiki/Q116758847"]},{"@type":"Thing","name":"Claude","sameAs":["https://www.wikidata.org/wiki/Q118876059"]},{"@type":"Thing","name":"Claude Code","sameAs":["https://www.wikidata.org/wiki/Q138457287"]},{"@type":"Thing","name":"Model Context Protocol","sameAs":["https://www.wikidata.org/wiki/Q133436854"]},{"@type":"Thing","name":"OpenAI","sameAs":["https://www.wikidata.org/wiki/Q21708200"]},{"@type":"Thing","name":"Generative pre-trained transformer","sameAs":["https://www.wikidata.org/wiki/Q116777014"]},{"@type":"Thing","name":"ChatGPT","sameAs":["https://www.wikidata.org/wiki/Q115564437"]},{"@type":"Thing","name":"xAI","sameAs":["https://www.wikidata.org/wiki/Q120599684"]},{"@type":"Thing","name":"Grok","sameAs":["https://www.wikidata.org/wiki/Q123361035"]},{"@type":"Thing","name":"GitHub","sameAs":["https://www.wikidata.org/wiki/Q364"]},{"@type":"Thing","name":"GitHub Copilot","sameAs":["https://www.wikidata.org/wiki/Q107435063"]},{"@type":"Thing","name":"Cursor","sameAs":["https://www.wikidata.org/wiki/Q131980386"]},{"@type":"Thing","name":"Replit","sameAs":["https://www.wikidata.org/wiki/Q60768699"]},{"@type":"Thing","name":"Vercel","sameAs":["https://www.wikidata.org/wiki/Q56069184"]},{"@type":"Thing","name":"Next.js","sameAs":["https://www.wikidata.org/wiki/Q56062435"]},{"@type":"Thing","name":"React","sameAs":["https://www.wikidata.org/wiki/Q19399674"]},{"@type":"Thing","name":"TypeScript","sameAs":["https://www.wikidata.org/wiki/Q978185"]},{"@type":"Thing","name":"Node.js","sameAs":["https://www.wikidata.org/wiki/Q756100"]},{"@type":"Thing","name":"E-commerce","sameAs":["https://www.wikidata.org/wiki/Q484847"]},{"@type":"Thing","name":"Online marketplace","sameAs":["https://www.wikidata.org/wiki/Q3390477"]},{"@type":"Thing","name":"Software as a service","sameAs":["https://www.wikidata.org/wiki/Q1254596"]},{"@type":"Thing","name":"Digital distribution","sameAs":["https://www.wikidata.org/wiki/Q269415"]}]},{"@type":"WebSite","@id":"https://bopen.ai/#website","url":"https://bopen.ai","name":"bOpen.ai","publisher":{"@id":"https://bopen.ai/#organization"}}]}</script>
279<script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script>
279<div class="relative">
279<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"ProfilePage","@id":"https://bopen.ai/agents/product-skills/legal/#webpage","url":"https://bopen.ai/agents/product-skills/legal","name":"Anthony — Legal & Compliance","description":"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample>\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary>\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary>\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary>\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary>\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary>\n\u003c/example>","isPartOf":{"@id":"https://bopen.ai/#website"},"about":{"@id":"https://bopen.ai/agents/product-skills/legal/#person"},"primaryImageOfPage":{"@id":"https://bopen.ai/agents/product-skills/legal/#image"}},{"@type":"Person","@id":"https://bopen.ai/agents/product-skills/legal/#person","name":"Anthony","jobTitle":"Legal & Compliance","description":"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample>\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary>\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary>\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary>
279\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary>\n\u003c/example>\n\n\u003cexample>\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary>\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary>\n\u003c/example>","url":"https://bopen.ai/agents/product-skills/legal","worksFor":{"@id":"https://bopen.ai/#organization"},"image":{"@type":"ImageObject","@id":"https://bopen.ai/agents/product-skills/legal/#image","url":"https://bopen.ai/images/agents/anthony.png"}},{"@type":"BreadcrumbList","@id":"https://bopen.ai/agents/product-skills/legal/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://bopen.ai"},{"@type":"ListItem","position":2,"name":"Agents","item":"https://bopen.ai/agents"},{"@type":"ListItem","position":3,"name":"product-skills","item":"https://bopen.ai/plugins/product-skills"},{"@type":"ListItem","position":4,"name":"Anthony","item":"https://bopen.ai/agents/product-skills/legal"}]}]}</script>
279<nav class="site-nav" aria-label="Primary navigation"><a class="site-nav-brand" href="/">bOpen.ai</a><nav aria-label="Main" data-orientation="horizontal" dir="ltr" data-slot="navigation-menu" data-viewport="true" class="group/navigation-menu relative flex max-w-max flex-1 items-center justify-center max-md:hidden"><div style="position:relative"><ul data-orientation="horizontal" data-slot="navigation-menu-list" class="group flex flex-1 list-none items-center justify-center gap-0" dir="ltr"><li data-slot="navigation-menu-item" class="relative"><button id="radix-_R_iav5ubsnimlb_-trigger-radix-_R_biav5ubsnimlb_" data-state="closed" aria-expanded="false" data-slot="navigation-menu-trigger" class="group/navigation-menu-trigger group group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted mono bg-transparent text-xs text-primary" data-radix-collection-item="">Toolkit<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></li><li data-slot="navigation-menu-item" class="relative"><button id="radix-_R_iav5ubsnimlb_-trigger-radix-_R_jiav5ubsnimlb_" data-state="closed" aria-expanded="false" data-slot="navigation-menu-trigger" class="group/navigation-menu-trigger group group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted mono bg-transparent text-xs text-primary" data-radix-collection-item="">Resources<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></li><li data-slot="navigation-menu-item" class="relative"><button id="radix-_R_iav5ubsnimlb_-trigger-radix-_R_riav5ubsnimlb_" data-state="closed" aria-expanded="false" data-slot="navigation-menu-trigger" class="group/navigation-menu-trigger group group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted mono bg-transparent text-xs text-accent" data-radix-collection-item="">Premium<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button></li></ul></div><div class="absolute top-full left-0 isolate z-50 flex justify-center"></div></nav><div class="flex items-center gap-2 md:gap-3"><span class="relative inline-flex"><button type="button" aria-pressed="false" data-state="off" data-slot="toggle" class="group/toggle inline-flex items-center justify-center gap-1 font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 bg-transparent h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&amp;_svg:not([class*=&#x27;
279size-&#x27;])]:size-3.5" aria-label="Enable interface sounds" title="Enable interface sounds" data-sound="none"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-volume-x" aria-hidden="true"><path d="M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"></path><line x1="22" x2="16" y1="9" y2="15"></line><line x1="16" x2="22" y1="9" y2="15"></line></svg></button><button type="button" data-sound="none" class="site-nav-input" data-active="false" title="Hold backtick to open settings" aria-label="Hold backtick to open settings. Click to open settings controls."><span class="site-nav-input-label" aria-hidden="true">hold</span><kbd data-slot="kbd-group" class="inline-flex items-center gap-1 site-nav-input-keys" aria-live="polite"><kbd data-slot="kbd" class="pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-3">`</kbd></kbd></button></span><button type="button" class="site-nav-input inline-flex items-center justify-center" aria-label="Toggle theme" title="Toggle theme (d)"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><button type="button" id="radix-_R_4qav5ubsnimlb_" aria-haspopup="menu" aria-expanded="false" data-state="closed" data-slot="dropdown-menu-trigger" class="btn-primary flex items-center gap-1.5 px-4 py-2.5 max-md:hidden">INSTALL<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><button type="button" class="site-nav-hamburger md:hidden" aria-label="Open navigation menu" aria-haspopup="dialog" aria-expanded="false" data-state="closed"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button></div></nav><main id="main-content" style="background:var(--background)"><header class="px-6 pb-16 pt-32 md:px-12 md:pb-24 md:pt-40"><div class="mx-auto w-full max-w-7xl"><nav aria-label="Breadcrumb" class="mono flex flex-wrap gap-2 text-xs"><a class="no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="color:var(--muted-foreground)" href="/">HOME</a><span aria-hidden="true" style="color:var(--input)">/</span><a class="no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="color:var(--muted-foreground)" href="/agents">AGENTS</a><span aria-hidden="true" style="color:var(--input)">/</span><a class="no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="color:var(--muted-foreground)" href="/plugins/product-skills">PRODUCT-SKILLS</a><span aria-hidden="true" style="color:var(--input)">/</span><span style="color:var(--primary)" translate="no">LEGAL</span></nav><div class="mt-12 grid gap-10 md:grid-cols-[auto_1fr] md:items-end"><div class="relative shrink-0 overflow-hidden border" style="width:160px;height:160px;border-color:var(--border);background:var(--secondary)"><img alt="Anthony, bOpen agent" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;image-rendering:pixelated" sizes="160px" srcSet="/images/agents/optimized/anthony-48.webp 48w, /images/agents/optimized/anthony-96.webp 96w, /images/agents/optimized/anthony-144.webp 144w, /images/agents/optimized/anthony-192.webp 192w, /images/agents/optimized/anthony-256.webp 256w, /images/agents/optimized/anthony-384.webp 320w, /images/agents/optimized/anthony-384.webp 384w, /images/agents/optimized/anthony-512.webp 512w, /images/agents/optimized/anthony-640.webp 640w, /images/agents/optimized/anthony-640.webp 828w, /images/agents/optimized/anthony-640.webp 1080w, /images/agents/optimized/anthony-640.webp 1920w" src="/images/agents/optimized/anthony-640.webp"/></div><div class="min-w-0"><p class="mono mb-4 text-xs" style="color:var(--accent);letter-spacing:0.1em">[ <!-- -->LEGAL &amp; COMPLIANCE<!-- --> ]</p><h1 class="text-balance font-serif text-5xl font-black leading-none text-white md:text-7xl">Anthony</h1><p class="mt-6 max-w-3xl text-pretty text-lg leading-relaxed" style="color:var(--secondary-foreground)">Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS A
279ct, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.
280
281&lt;example&gt;
282Context: User needs SOC 2 readiness help
283user: &quot;Can you run a SOC 2 gap analysis and tell me what controls we&#x27;re missing?&quot;
284assistant: &quot;I&#x27;ll use the legal agent to scope the review, map the control gaps, and frame the remediation work.&quot;
285&lt;commentary&gt;
286SOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.
287&lt;/commentary&gt;
288&lt;/example&gt;
289
290&lt;example&gt;
291Context: User needs auditor-facing documentation
292user: &quot;Draft our access control policy and help organize the evidence for the auditor.&quot;
293assistant: &quot;I&#x27;ll use the legal agent to draft the policy and structure the evidence request.&quot;
294&lt;commentary&gt;
295Policy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.
296&lt;/commentary&gt;
297&lt;/example&gt;
298
299&lt;example&gt;
300Context: User is evaluating a stablecoin or digital-asset product
301user: &quot;What licenses or registrations might apply if we help design or operate a payment stablecoin?&quot;
302assistant: &quot;I&#x27;ll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.&quot;
303&lt;commentary&gt;
304Stablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.
305&lt;/commentary&gt;
306&lt;/example&gt;
307
308&lt;example&gt;
309Context: User needs token classification or tokenized-securities analysis
310user: &quot;Is this token a security, a commodity, or just software infrastructure?&quot;
311assistant: &quot;I&#x27;ll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.&quot;
312&lt;commentary&gt;
313Token classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.
314&lt;/commentary&gt;
315&lt;/example&gt;</p></div></div></div></header><section class="border-t px-6 py-16 md:px-12"><div class="mx-auto flex w-full max-w-7xl flex-col gap-6 md:flex-row md:items-center"><button type="button" class="btn-primary inline-flex min-h-11 items-center px-5">CHAT WITH <!-- -->ANTHONY</button><a class="mono inline-flex min-h-11 items-center border px-5 text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="border-color:var(--input);color:var(--primary)" href="/chat?agent=product-skills%3Alegal">CLASSIC CHAT →</a><a class="mono inline-flex min-h-11 items-center text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="color:var(--primary)" href="/plugins/product-skills">PLUGIN PROFILE →</a><a href="https://github.com/b-open-io/product-skills/blob/master/agents/legal.md" target="_blank" rel="noopener noreferrer" class="mono inline-flex min-h-11 items-center text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="color:var(--primary)">SOURCE ↗</a></div></section><section class="border-t px-6 py-16 md:px-12"><div class="mx-auto w-full max-w-7xl"><h2 class="mb-8 text-balance font-serif text-3xl font-black text-white">Facts</h2><dl class="grid grid-cols-1 gap-px sm:grid-cols-2 lg:grid-cols-5"><div class="min-w-0 border p-4" style="background:var(--secondary);border-color:var(--border)"><dt class="mono mb-2 text-xs" style="color:var(--muted-foreground)">AGENT ID</dt><dd class="break-words text-sm text-white" translate="no">product-skills:legal</dd></div><div class="min-w-0 border p-4" style="background:var(--secondary);border-color:var(--border)"><dt class="mono mb-2 text-xs" style="color:var(--muted-foreground)">PLUGIN</dt><dd class="break-words text-sm text-white" translate="no">product-skills</dd></div><div class="min-w-0 border p-4" style="background:var(--secondary);border-color:var(--border)"><dt class="mono mb-2 text-xs" style="color:var(--muted-foreground)">ROLE</dt><dd class="break-words text-sm text-white" translate="no">Legal &amp; Compliance</dd></div><div class="min-w-0 border p-4" style="background:var(--secondary);border-color:var(--border)"><dt class="mono mb-2 text-xs" style="color:var(--muted-foreground)">MODEL</dt><dd class="break-words text-sm text-white" translate="no">opus</dd></div><div class="min-w-0 border p-4" style="background:var(--secondary);border-color:var(--border)"><dt class="mono mb-2 text-xs" style="color:var(--muted-foreground)">VERSION</dt><dd class="break-words text-sm text-white" translate="no">1.1.12</dd></div></dl></div></section><section class="border-t px-6 py-16 md:px-12"><div class="mx-auto w-full max-w-7xl"><h2 class="font-serif text-3xl font-black text-white">Skills this agent uses</h2><ul class="mt-6 grid gap-px sm:grid-cols-2 lg:grid-cols-3"><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/core/confess"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">confess</span></a></li><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/product-skills/legal-agentic-build"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">legal-agentic-build</span></a></li><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/product-skills/legal-compliance"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">legal-compliance</span></a></li><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/product-skills/soc2-evidence-collection"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">soc2-evidence-collection</span></a></li><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/product-skills/soc2-gap-analysis"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">soc2-gap-analysis</span></a></li><li><a class="block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="background:var(--secondary);border-color:var(--border);color:inherit" href="/skills/product-skills/soc2-policy-drafting"><span class="font-mono text-sm font-bold" style="color:var(--primary)" translate="no">soc2-policy-drafting</span></a></li></ul></div></section><nav aria-label="Next agent" class="border-t px-6 md:px-12"><a class="group mx-auto grid min-h-64 w-full max-w-7xl gap-8 py-16 no-underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring md:grid-cols-[1fr_auto] md:items-end md:py-20" style="color:inherit" href="/agents/product-skills/marketer"><div><div class="mono mb-5 text-xs" style="color:var(--accent);letter-spacing:0.1em">[ UP NEXT · <!-- -->PRODUCT-SKILLS<!-- --> ]</div><h2 class="break-words font-serif text-3xl font-black text-white transition-colors group-hover:text-primary md:text-5xl">Caal</h2><p class="mt-4 max-w-3xl text-pretty text-base leading-relaxed" style="color:var(--muted-foreground)">Growth Marketer</p></div><span aria-hidden="true" class="font-mono text-5xl transition-transform group-hover:translate-x-2 md:text-7xl" style="color:var(--primary)">→</span></a></nav></main><footer class="w-full py-32 px-6 border-t flex flex-col items-center justify-center text-center" style="border-color:var(--input)"><h2 class="text-5xl md:text-7xl font-serif font-black text-white mb-12 tracking-tighter">Bring your own agent.</h2><div class="flex flex-col items-center gap-6"><p class="max-w-xl text-base md:text-lg" style="color:var(--secondary-foreground);line-height:1.6">Find install options for Claude Code, Codex, Grok Build, and OpenCode in each package.</p><a class="btn-primary no-underline" style="transform:scale(1.25)" href="/plugins/core#install">View install options</a><span class="mono uppercase mt-4 text-center" style="font-size:0.75rem;color:var(--secondary-foreground)">Claude Code · Codex · Open SKILL.md<br/>Free &amp; Open Source</span></div><div class="mt-24 flex flex-col items-center gap-4" style="border-top:1px solid var(--input);padding-top:3rem;width:100%;max-width:28rem"><div class="mono text-xs" style="color:var(--secondary-foreground)">GET UPDATES</div><form class="flex w-full flex-col gap-0 sm:flex-row" toolname="subscribe_newsletter" tooldescription="Subscribe an email address to the bOpen.ai newsletter." action="javascript:throw new Error(&#x27;React form unexpectedly submitted.&#x27;)"><input aria-label="Email address" type="email" autoComplete="email" spellCheck="false" placeholder="[email protected]…" required="" toolparamdescription="Email address to subscribe to the newsletter." class="mono min-h-11 min-w-0 flex-1 border bg-transparent px-4 py-3 text-xs focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" style="border-color:var(--border);color:var(--foreground)" name="email" value=""/><button type="submit" aria-busy="false" class="btn-primary min-h-11">Subscribe</button></form></div><div class="mono mt-16 flex w-full max-w-7xl flex-wrap items-center justify-center gap-4 text-xs md:justify-between" style="color:var(--secondary-foreground)"><span>© 2026 bOPEN.AI</span><div class="flex items-center gap-4"><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/about">About</a><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/contact">Contact</a><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/agents">Agents</a><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/developers">Developers</a><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/privacy">Privacy</a><a class="hover:opacity-100 transition-opacity" style="color:var(--secondary-foreground);opacity:0.7;text-decoration:none" href="/terms">Terms</a></div><a href="https://x.com/bOpen_AI" target="_blank" rel="noopener noreferrer" class="hover:opacity-100 transition-opacity" style="color:var(--primary);text-decoration:none">Open Protocol Labs on X ↗</a><span style="color:var(--primary)">[ OPEN AGENT TOOLKIT ]</span></div></footer></div><!--$--><!--/$-->
315<section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section>
315<script>addEventListener("submit",function(a){if(!a.defaultPrevented){var b=a.target,d=a.submitter,c=b.action,e=d;if(d){var f=d.getAttribute("formAction");null!=f&&(c=f,e=null)}"javascript:throw new Error('React form unexpectedly submitted.')"===c&&(a.preventDefault(),a=new FormData(b,e),c=b.ownerDocument||b,(c.$$reactFormReplay=c.$$reactFormReplay||[]).push(b,d,a))}});</script>
315<script src="/_next/static/chunks/1ie6cijmm75g3.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed" id="_R_" async=""></script>
315<script>(self.__next_f=self.__next_f||[]).push([0])</script>
315<script>self.__next_f.push([1,"1:I[768017,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"HTTPAccessFallbackBoundary\"]\nd:I[168027,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"default\",1]\n:HL[\"/_next/static/chunks/3e7p7_cewh3w8.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"style\"]\n:HL[\"/_next/static/chunks/14f2nd_kuit2j.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"style\"]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.2bn3s6zvc0dyp.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8d05cfa5faa8406c-s.p.1s123piy9_v1m.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c825fd02acae0153-s.p.1q3-y3vmyf3p6.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/dc0d9adbac686440-s.p.3cik_s2si-ft-.woff2?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/chunks/2d_rj09wsb5q5.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"style\"]\n2:T3a2f,"])</script>
315<script>self.__next_f.push([1,"(() =\u003e {\n  const tools = [{\"name\":\"list_marketplace\",\"description\":\"List every plugin, agent, and skill available in the bOpen.ai marketplace.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_plugin\",\"description\":\"Fetch a single bOpen.ai marketplace plugin by name, including its agents, skills, and install string.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"Plugin name (e.g. sigma-auth).\"}},\"required\":[\"name\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"plugin\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_skill\",\"description\":\"Fetch a single bOpen.ai marketplace skill by name. Pass plugin when the skill name is shared across plugins.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"Skill name, or plugin:skill id (e.g. confess or core:confess).\"},\"plugin\":{\"type\":\"string\",\"description\":\"Plugin that owns the skill, when name is not qualified.\"}},\"required\":[\"name\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"skill\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_marketplace\",\"description\":\"Search the bOpen.ai marketplace snapshot for matching plugins, skills, and agents.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\",\"description\":\"Search query (min 2 chars).\"}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"search\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_agent\",\"description\":\"Fetch skills and metadata for a single bOpen.ai agent by its id (plugin:agent-name).\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Agent id in the form plugin:agent-name.\"}},\"required\":[\"id\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/agent/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_agents\",\"description\":\"Search bOpen.ai agents by keyword. Matches system prompts and referenced skill content.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\",\"description\":\"Search query (min 2 chars).\"}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/search\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_tool_shed\",\"description\":\"Search the bOpen.ai Tool Shed catalog for developer tools.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\"},\"limit\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":20}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/tool-shed/search\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"list_products\",\"description\":\"List bOpen.ai commerce products with live sale and release status. Stripe secret IDs are not included. If onSale is false, start_checkout will return the existing 409.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/products\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_product\",\"description\":\"Fetch one bOpen.ai commerce product by id, including price, checkoutMode, rails, and whether it is on sale.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"commerce_products id (e.g. chat-pro, pack-full-suite, agent-master-desktop).\"}},\"required\":[\"id\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/products/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"start_checkout\",\"description\":\"Start a live purchase for a product id. Confirms with the user, then POSTs the existing /api/checkout/{productId} route (or /api/bsv/checkout/{productId} when rail=bsv) and navigates to the returned Stripe URL. Flag and release gates stay on those routes.\",\"
315inputSchema\":{\"type\":\"object\",\"properties\":{\"productId\":{\"type\":\"string\",\"description\":\"commerce_products id to buy.\"},\"rail\":{\"type\":\"string\",\"enum\":[\"stripe\",\"bsv\"],\"description\":\"Payment rail. Defaults to stripe.\"},\"email\":{\"type\":\"string\",\"description\":\"Buyer email. Required when rail is bsv.\"}},\"required\":[\"productId\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/checkout/{productId}\",\"pick\":null,\"kind\":\"checkout\",\"method\":\"GET\"},{\"name\":\"list_social_accounts\",\"description\":\"List the signed-in user's linked X accounts so an agent can choose an account id for a draft.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/social/accounts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"list_social_drafts\",\"description\":\"List the signed-in user's X posts, including drafts and planned posts for review. This cannot schedule or publish anything.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"account\":{\"type\":\"string\",\"description\":\"Optional linked account id.\"},\"from\":{\"type\":\"string\",\"format\":\"date-time\"},\"to\":{\"type\":\"string\",\"format\":\"date-time\"}},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/social/posts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"create_social_draft\",\"description\":\"Create an editable X draft for the signed-in user. The user must review and schedule or post it themselves.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"accountId\":{\"type\":\"string\",\"description\":\"Linked X account id.\"},\"items\":{\"type\":\"array\",\"minItems\":1,\"description\":\"One item per tweet in thread order.\",\"items\":{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\",\"description\":\"Tweet text.\"},\"media\":{\"type\":\"array\",\"maxItems\":4,\"description\":\"Optional private image ids returned by POST /api/social/media.\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"}},\"required\":[\"id\"],\"additionalProperties\":false}}},\"required\":[\"text\"],\"additionalProperties\":false}},\"tz\":{\"type\":\"string\",\"description\":\"Optional IANA timezone, such as America/Detroit.\"}},\"required\":[\"accountId\",\"items\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/posts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"POST\"},{\"name\":\"upload_social_image\",\"description\":\"Upload one private PNG, JPEG, GIF, or WebP image for a social draft. Pass a base64 data URL, then use the returned media id in create_social_draft or update_social_draft. The user still controls scheduling and posting.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"dataUrl\":{\"type\":\"string\",\"description\":\"A base64 image data URL up to 10 MB, for example data:image/png;base64,...\"}},\"required\":[\"dataUrl\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/media\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"POST\"},{\"name\":\"update_social_draft\",\"description\":\"Replace the text and image order in one of the signed-in user's draft or planned X posts. Scheduled posts must be edited from their private review page; this tool cannot schedule or publish.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Social post id.\"},\"items\":{\"type\":\"array\",\"minItems\":1,\"description\":\"Complete replacement thread in tweet order.\",\"items\":{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\",\"description\":\"Tweet text.\"},\"media\":{\"type\":\"array\",\"maxItems\":4,\"description\":\"Optional private image ids returned by POST /api/social/media.\",\"
315items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"}},\"required\":[\"id\"],\"additionalProperties\":false}}},\"required\":[\"text\"],\"additionalProperties\":false}}},\"required\":[\"id\",\"items\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/posts/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"PATCH\"}];\n  const api = (typeof document !== \"undefined\" \u0026\u0026 document.modelContext)\n    || (typeof navigator !== \"undefined\" \u0026\u0026 navigator.modelContext);\n  if (!api || typeof api.registerTool !== \"function\") return;\n\n  const haystack = (value) =\u003e String(value ?? \"\").toLowerCase();\n\n  function pickPlugin(data, input) {\n    const name = String(input.name ?? \"\").trim();\n    const plugin = (data.plugins || []).find((item) =\u003e item.name === name);\n    if (!plugin) throw new Error(\"Unknown plugin: \" + (name || \"(empty)\"));\n    return plugin;\n  }\n\n  function pickSkill(data, input) {\n    const raw = String(input.name ?? \"\").trim();\n    const pluginHint = String(input.plugin ?? \"\").trim();\n    const colon = raw.indexOf(\":\");\n    const plugin = pluginHint || (colon === -1 ? \"\" : raw.slice(0, colon));\n    const name = colon === -1 ? raw : raw.slice(colon + 1);\n    const matches = [];\n    for (const item of data.plugins || []) {\n      for (const skill of item.skills || []) {\n        if (skill.name !== name) continue;\n        if (plugin \u0026\u0026 skill.plugin !== plugin \u0026\u0026 item.name !== plugin) continue;\n        matches.push({\n          ...skill,\n          plugin: skill.plugin || item.name,\n          id: (skill.plugin || item.name) + \":\" + skill.name,\n        });\n      }\n    }\n    if (matches.length === 0) throw new Error(\"Unknown skill: \" + (raw || \"(empty)\"));\n    return matches[0];\n  }\n\n  function searchMarketplace(data, input) {\n    const q = String(input.q ?? \"\").trim().toLowerCase();\n    if (q.length \u003c 2) throw new Error(\"q must be at least 2 characters\");\n    const plugins = [];\n    const skills = [];\n    const agents = [];\n    for (const plugin of data.plugins || []) {\n      if (haystack(plugin.name).includes(q) || haystack(plugin.description).includes(q)) {\n        plugins.push(plugin);\n      }\n      for (const skill of plugin.skills || []) {\n        if (haystack(skill.name).includes(q) || haystack(skill.description).includes(q)) {\n          skills.push({\n            ...skill,\n            plugin: skill.plugin || plugin.name,\n            id: (skill.plugin || plugin.name) + \":\" + skill.name,\n          });\n        }\n      }\n      for (const agent of plugin.agents || []) {\n        if (\n          haystack(agent.id).includes(q) ||\n          haystack(agent.name).includes(q) ||\n          haystack(agent.label).includes(q) ||\n          haystack(agent.desc).includes(q) ||\n          haystack(agent.title).includes(q)\n        ) {\n          agents.push(agent);\n        }\n      }\n    }\n    return { plugins, skills, agents };\n  }\n\n  function applyPick(pick, data, input) {\n    if (pick === \"plugin\") return pickPlugin(data, input);\n    if (pick === \"skill\") return pickSkill(data, input);\n    if (pick === \"search\") return searchMarketplace(data, input);\n    return data;\n  }\n\n  async function confirmCheckout(message, options) {\n    const ask = () =\u003e typeof window !== \"undefined\" \u0026\u0026 window.confirm(message);\n    if (options \u0026\u0026 typeof options.requestUserInteraction === \"function\") {\n      return Boolean(await options.requestUserInteraction(ask));\n    }\n    return ask();\n  }\n\n  async function executeCheckout(input, options) {\n    const productId = String(input.productId ?? \"\").trim();\n    if (!productId) return { error: \"productId is required\", status: 400 };\n    const rail = input.rail === \"bsv\" ? \"bsv\" : \"stripe\";\n    const email = String(input.email ?? \"\").trim();\n    const confirmed = await confirmCheckout(\n      rail === \"bsv\"\n        ? \"Pay for \" + productId + \" with BSV? This starts a live purchase.\"\n        : \"Buy \" + productId + \"? You will be redirected to Stripe checkout.\",\n      options,\n    );\n    if (!confirmed) return { cancelled: true, message: \"Checkout cancelled\" };\n    if (rail === \"bsv\") {\n      if (!email) return { error: \"A valid buyer email is required\", status: 400 };\n      const res = await fetch(\"/api/bsv/checkout/\" + encodeURIComponent(productId), {\n        method: \"POST\",\n        headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n        credentials: \"same-origin\",\n        body: JSON.stringify({ email }),\n        signal: options \u0026\u0026 options.signal,\n      });\n      const body = await res.json().catch(() =\u003e ({}));\n      if (!res.ok) return { error: body.error || (res.status + \" \" + res.statusText), status: res.status };\n      return body;\n    }\n    const res = await fetch(\"/api/checkout/\" + encodeURIComponent(productId), {\n      method: \"POST\",\n      headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n      credentials: \"same-origin\",\n      signal: options \u0026\u0026 options.signal,\n    });\n    const body = await res.json().catch(() =\u003e ({}));\n    if (!res.ok) return { error: body.error || (res.status + \" \" + res.statusText), status: res.status };\n    if (!body.url) return { error: \"Checkout did not return a URL\", status: 502 };\n    if (typeof window !== \"undefined\") window.location.assign(body.url);\n    return { url: body.url, navigated: true };\n  }\n\n  async function executeTool(tool, input, options) {\n    if (tool.kind === \"checkout\") return executeCheckout(input ?? {}, options);\n    let path = tool.anchor;\n    const query = new URLSearchParams();\n    const body = {};\n    for (const [key, value] of Object.entries(input ?? {})) {\n      const token = \"{\" + key + \"}\";\n      if (path.includes(token)) {\n        path = path.replace(token, encodeURIComponent(String(value)));\n      } else if (!tool.pick \u0026\u0026 value != null) {\n        if (tool.method === \"GET\") query.set(key, String(value));\n        else body[key] = value;\n      }\n    }\n    const qs = query.toString();\n    const res = await fetch(path + (qs ? \"?\" + qs : \"\"), {\n      method: tool.method,\n      headers: {\n        accept: \"application/json\",\n        ...(tool.method === \"GET\" ? {} : { \"content-type\": \"application/json\" }),\n      },\n      credentials: \"same-origin\",\n      ...(tool.method === \"GET\" ? {} : { body: JSON.stringify(body) }),\n      signal: options \u0026\u0026 options.signal,\n    });\n    if (!res.ok) {\n      throw new Error(\"bOpen.ai API \" + tool.name + \" failed: \" + res.status + \" \" + res.statusText);\n    }\n    return applyPick(tool.pick, await res.json(), input);\n  }\n\n  (async () =\u003e {\n    for (const tool of tools) {\n      tr
315y {\n        await api.registerTool({\n          name: tool.name,\n          description: tool.description,\n          inputSchema: tool.inputSchema,\n          annotations: tool.annotations,\n          execute: (input, options) =\u003e executeTool(tool, input ?? {}, options),\n        });\n      } catch (err) {\n        if (err \u0026\u0026 err.name === \"InvalidStateError\") continue;\n      }\n    }\n  })();\n})();"])</script>
315<script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"agents\",\"product-skills\",\"legal\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"agents\",{\"children\":[[\"plugin\",\"product-skills\",\"d\",null],{\"children\":[[\"slug\",\"legal\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]}],\"overlay\":[\"__DEFAULT__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$L1\",\"c\",{\"notFound\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3e7p7_cewh3w8.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/14f2nd_kuit2j.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"origin-trial\",\"content\":\"AmcXM47jsJzN45BHbf3c1UagBhIkZjRjV8jdXUQIaTMvOh7iaqIhpXBTruqyYMX30ixQS/3klY/YcnbkqWAidwMAAABIeyJvcmlnaW4iOiJodHRwczovL2JvcGVuLmFpOjQ0MyIsImZlYXR1cmUiOiJXZWJNQ1AiLCJleHBpcnkiOjE3OTQ4NzM2MDB9\"}],[\"$\",\"script\",null,{\"id\":\"webmcp-register\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}]]}],\"$L3\",\"$L4\"]}]],\"children\":[\"$0:f:0:1:0:props:notFound:0\",\"$L5\"]}],{\"children\":[\"$L6\",{\"children\":[\"$L7\",{\"children\":[\"$L8\",{\"children\":[\"$L9\",{},null,false,null]},null,false,\"$@a\"]},null,false,\"$@a\"]},null,false,\"$@a\"],\"overlay\":[\"$Lb\",{},null,false,null]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\",\"$Lf\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script>
315<script>self.__next_f.push([1,"12:I[654576,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"GoogleAnalytics\"]\n16:\"$Sreact.fragment\"\n17:I[339756,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"default\"]\n18:I[837457,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"default\"]\n1a:I[897367,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"OutletBoundary\"]\n1b:\"$Sreact.suspense\"\n1e:I[897367,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"ViewportBoundary\"]\n20:I[897367,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?d"])</script>
315<script>self.__next_f.push([1,"pl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"MetadataBoundary\"]\n10:Tfec,"])</script>
315<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@id\":\"https://bopen.ai/#organization\",\"@type\":\"Organization\",\"name\":\"bOpen.ai\",\"url\":\"https://bopen.ai\",\"logo\":\"https://bopen.ai/android-chrome-512x512.png\",\"description\":\"bOpen.ai is the open-source toolkit published by Open Protocol Labs, Inc., with free developer tooling for AI agents, wallets, tokens, and overlay networks.\",\"parentOrganization\":{\"@type\":\"Organization\",\"name\":\"Open Protocol Labs, Inc.\",\"url\":\"https://opl.dev\",\"foundingDate\":\"2023\",\"sameAs\":[\"https://www.linkedin.com/company/opldotdev\",\"https://github.com/b-open-io\",\"https://x.com/bOpen_AI\"]},\"email\":\"[email protected]\",\"contactPoint\":{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"[email protected]\",\"url\":\"https://bopen.ai/contact\",\"availableLanguage\":\"English\"},\"address\":{\"@type\":\"PostalAddress\",\"addressCountry\":\"US\"},\"founder\":[{\"@type\":\"Person\",\"name\":\"Kurt Wuckert Jr.\",\"url\":\"https://kurtwuckertjr.com\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q138774106\"]},{\"@type\":\"Person\",\"name\":\"Luke Rohenaz\",\"url\":\"https://satchmo.dev\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q140697627\"]}],\"knowsAbout\":[{\"@type\":\"Thing\",\"name\":\"Artificial intelligence\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q11660\"]},{\"@type\":\"Thing\",\"name\":\"Intelligent agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q1142726\"]},{\"@type\":\"Thing\",\"name\":\"Multi-agent system\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q529909\"]},{\"@type\":\"Thing\",\"name\":\"Large language model\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q115305900\"]},{\"@type\":\"Thing\",\"name\":\"Prompt engineering\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q108941486\"]},{\"@type\":\"Thing\",\"name\":\"Autonomous agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q4826847\"]},{\"@type\":\"Thing\",\"name\":\"AI agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q132451509\"]},{\"@type\":\"Thing\",\"name\":\"Chatbot\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q870780\"]},{\"@type\":\"Thing\",\"name\":\"Anthropic\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q116758847\"]},{\"@type\":\"Thing\",\"name\":\"Claude\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q118876059\"]},{\"@type\":\"Thing\",\"name\":\"Claude Code\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q138457287\"]},{\"@type\":\"Thing\",\"name\":\"Model Context Protocol\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q133436854\"]},{\"@type\":\"Thing\",\"name\":\"OpenAI\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q21708200\"]},{\"@type\":\"Thing\",\"name\":\"Generative pre-trained transformer\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q116777014\"]},{\"@type\":\"Thing\",\"name\":\"ChatGPT\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q115564437\"]},{\"@type\":\"Thing\",\"name\":\"xAI\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q120599684\"]},{\"@type\":\"Thing\",\"name\":\"Grok\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q123361035\"]},{\"@type\":\"Thing\",\"name\":\"GitHub\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q364\"]},{\"@type\":\"Thing\",\"name\":\"GitHub Copilot\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q107435063\"]},{\"@type\":\"Thing\",\"name\":\"Cursor\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q131980386\"]},{\"@type\":\"Thing\",\"name\":\"Replit\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q60768699\"]},{\"@type\":\"Thing\",\"name\":\"Vercel\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q56069184\"]},{\"@type\":\"Thing\",\"name\":\"Next.js\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q56062435\"]},{\"@type\":\"Thing\",\"name\":\"React\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q19399674\"]},{\"@type\":\"Thing\",\"name\":\"TypeScript\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q978185\"]},{\"@type\":\"Thing\",\"name\":\"Node.js\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q756100\"]},{\"@type\":\"Thing\",\"name\":\"E-commerce\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q484847\"]},{\"@type\":\"Thing\",\"name\":\"Online marketplace\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q3390477\"]},{\"@type\":\"Thing\",\"name\":\"Software as a service\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q1254596\"]},{\"@type\":\"Thing\",\"name\":\"Digital distribution\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q269415\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https://bopen.ai/#website\",\"url\":\"https://bopen.ai\",\"name\":\"bOpen.ai\",\"publisher\":{\"@id\":\"https://bopen.ai/#organization\"}}]}"])</script>
315<script>self.__next_f.push([1,"3:[\"$\",\"body\",null,{\"className\":\"inter_b1cfe8d5-module__FGNtsa__variable space_mono_d8eecc30-module__bEIZiG__variable raleway_9937a3e8-module__oiguAa__variable\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$10\"}}],\"$L11\"]}]\n4:[\"$\",\"$L12\",null,{\"gaId\":\"G-N0HC9H708Z\"}]\n13:T3a2f,"])</script>
315<script>self.__next_f.push([1,"(() =\u003e {\n  const tools = [{\"name\":\"list_marketplace\",\"description\":\"List every plugin, agent, and skill available in the bOpen.ai marketplace.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_plugin\",\"description\":\"Fetch a single bOpen.ai marketplace plugin by name, including its agents, skills, and install string.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"Plugin name (e.g. sigma-auth).\"}},\"required\":[\"name\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"plugin\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_skill\",\"description\":\"Fetch a single bOpen.ai marketplace skill by name. Pass plugin when the skill name is shared across plugins.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"Skill name, or plugin:skill id (e.g. confess or core:confess).\"},\"plugin\":{\"type\":\"string\",\"description\":\"Plugin that owns the skill, when name is not qualified.\"}},\"required\":[\"name\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"skill\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_marketplace\",\"description\":\"Search the bOpen.ai marketplace snapshot for matching plugins, skills, and agents.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\",\"description\":\"Search query (min 2 chars).\"}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/marketplace\",\"pick\":\"search\",\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_agent\",\"description\":\"Fetch skills and metadata for a single bOpen.ai agent by its id (plugin:agent-name).\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Agent id in the form plugin:agent-name.\"}},\"required\":[\"id\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/agent/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_agents\",\"description\":\"Search bOpen.ai agents by keyword. Matches system prompts and referenced skill content.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\",\"description\":\"Search query (min 2 chars).\"}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/search\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"search_tool_shed\",\"description\":\"Search the bOpen.ai Tool Shed catalog for developer tools.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"q\":{\"type\":\"string\"},\"limit\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":20}},\"required\":[\"q\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/tool-shed/search\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"list_products\",\"description\":\"List bOpen.ai commerce products with live sale and release status. Stripe secret IDs are not included. If onSale is false, start_checkout will return the existing 409.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/products\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"get_product\",\"description\":\"Fetch one bOpen.ai commerce product by id, including price, checkoutMode, rails, and whether it is on sale.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"commerce_products id (e.g. chat-pro, pack-full-suite, agent-master-desktop).\"}},\"required\":[\"id\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/products/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"start_checkout\",\"description\":\"Start a live purchase for a product id. Confirms with the user, then POSTs the existing /api/checkout/{productId} route (or /api/bsv/checkout/{productId} when rail=bsv) and navigates to the returned Stripe URL. Flag and release gates stay on those routes.\",\"
315inputSchema\":{\"type\":\"object\",\"properties\":{\"productId\":{\"type\":\"string\",\"description\":\"commerce_products id to buy.\"},\"rail\":{\"type\":\"string\",\"enum\":[\"stripe\",\"bsv\"],\"description\":\"Payment rail. Defaults to stripe.\"},\"email\":{\"type\":\"string\",\"description\":\"Buyer email. Required when rail is bsv.\"}},\"required\":[\"productId\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/checkout/{productId}\",\"pick\":null,\"kind\":\"checkout\",\"method\":\"GET\"},{\"name\":\"list_social_accounts\",\"description\":\"List the signed-in user's linked X accounts so an agent can choose an account id for a draft.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/social/accounts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"list_social_drafts\",\"description\":\"List the signed-in user's X posts, including drafts and planned posts for review. This cannot schedule or publish anything.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"account\":{\"type\":\"string\",\"description\":\"Optional linked account id.\"},\"from\":{\"type\":\"string\",\"format\":\"date-time\"},\"to\":{\"type\":\"string\",\"format\":\"date-time\"}},\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":true,\"destructiveHint\":false},\"anchor\":\"/api/social/posts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"GET\"},{\"name\":\"create_social_draft\",\"description\":\"Create an editable X draft for the signed-in user. The user must review and schedule or post it themselves.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"accountId\":{\"type\":\"string\",\"description\":\"Linked X account id.\"},\"items\":{\"type\":\"array\",\"minItems\":1,\"description\":\"One item per tweet in thread order.\",\"items\":{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\",\"description\":\"Tweet text.\"},\"media\":{\"type\":\"array\",\"maxItems\":4,\"description\":\"Optional private image ids returned by POST /api/social/media.\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"}},\"required\":[\"id\"],\"additionalProperties\":false}}},\"required\":[\"text\"],\"additionalProperties\":false}},\"tz\":{\"type\":\"string\",\"description\":\"Optional IANA timezone, such as America/Detroit.\"}},\"required\":[\"accountId\",\"items\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/posts\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"POST\"},{\"name\":\"upload_social_image\",\"description\":\"Upload one private PNG, JPEG, GIF, or WebP image for a social draft. Pass a base64 data URL, then use the returned media id in create_social_draft or update_social_draft. The user still controls scheduling and posting.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"dataUrl\":{\"type\":\"string\",\"description\":\"A base64 image data URL up to 10 MB, for example data:image/png;base64,...\"}},\"required\":[\"dataUrl\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/media\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"POST\"},{\"name\":\"update_social_draft\",\"description\":\"Replace the text and image order in one of the signed-in user's draft or planned X posts. Scheduled posts must be edited from their private review page; this tool cannot schedule or publish.\",\"inputSchema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Social post id.\"},\"items\":{\"type\":\"array\",\"minItems\":1,\"description\":\"Complete replacement thread in tweet order.\",\"items\":{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\",\"description\":\"Tweet text.\"},\"media\":{\"type\":\"array\",\"maxItems\":4,\"description\":\"Optional private image ids returned by POST /api/social/media.\",\"
315items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"}},\"required\":[\"id\"],\"additionalProperties\":false}}},\"required\":[\"text\"],\"additionalProperties\":false}}},\"required\":[\"id\",\"items\"],\"additionalProperties\":false},\"annotations\":{\"readOnlyHint\":false,\"destructiveHint\":false},\"anchor\":\"/api/social/posts/{id}\",\"pick\":null,\"kind\":\"catalog\",\"method\":\"PATCH\"}];\n  const api = (typeof document !== \"undefined\" \u0026\u0026 document.modelContext)\n    || (typeof navigator !== \"undefined\" \u0026\u0026 navigator.modelContext);\n  if (!api || typeof api.registerTool !== \"function\") return;\n\n  const haystack = (value) =\u003e String(value ?? \"\").toLowerCase();\n\n  function pickPlugin(data, input) {\n    const name = String(input.name ?? \"\").trim();\n    const plugin = (data.plugins || []).find((item) =\u003e item.name === name);\n    if (!plugin) throw new Error(\"Unknown plugin: \" + (name || \"(empty)\"));\n    return plugin;\n  }\n\n  function pickSkill(data, input) {\n    const raw = String(input.name ?? \"\").trim();\n    const pluginHint = String(input.plugin ?? \"\").trim();\n    const colon = raw.indexOf(\":\");\n    const plugin = pluginHint || (colon === -1 ? \"\" : raw.slice(0, colon));\n    const name = colon === -1 ? raw : raw.slice(colon + 1);\n    const matches = [];\n    for (const item of data.plugins || []) {\n      for (const skill of item.skills || []) {\n        if (skill.name !== name) continue;\n        if (plugin \u0026\u0026 skill.plugin !== plugin \u0026\u0026 item.name !== plugin) continue;\n        matches.push({\n          ...skill,\n          plugin: skill.plugin || item.name,\n          id: (skill.plugin || item.name) + \":\" + skill.name,\n        });\n      }\n    }\n    if (matches.length === 0) throw new Error(\"Unknown skill: \" + (raw || \"(empty)\"));\n    return matches[0];\n  }\n\n  function searchMarketplace(data, input) {\n    const q = String(input.q ?? \"\").trim().toLowerCase();\n    if (q.length \u003c 2) throw new Error(\"q must be at least 2 characters\");\n    const plugins = [];\n    const skills = [];\n    const agents = [];\n    for (const plugin of data.plugins || []) {\n      if (haystack(plugin.name).includes(q) || haystack(plugin.description).includes(q)) {\n        plugins.push(plugin);\n      }\n      for (const skill of plugin.skills || []) {\n        if (haystack(skill.name).includes(q) || haystack(skill.description).includes(q)) {\n          skills.push({\n            ...skill,\n            plugin: skill.plugin || plugin.name,\n            id: (skill.plugin || plugin.name) + \":\" + skill.name,\n          });\n        }\n      }\n      for (const agent of plugin.agents || []) {\n        if (\n          haystack(agent.id).includes(q) ||\n          haystack(agent.name).includes(q) ||\n          haystack(agent.label).includes(q) ||\n          haystack(agent.desc).includes(q) ||\n          haystack(agent.title).includes(q)\n        ) {\n          agents.push(agent);\n        }\n      }\n    }\n    return { plugins, skills, agents };\n  }\n\n  function applyPick(pick, data, input) {\n    if (pick === \"plugin\") return pickPlugin(data, input);\n    if (pick === \"skill\") return pickSkill(data, input);\n    if (pick === \"search\") return searchMarketplace(data, input);\n    return data;\n  }\n\n  async function confirmCheckout(message, options) {\n    const ask = () =\u003e typeof window !== \"undefined\" \u0026\u0026 window.confirm(message);\n    if (options \u0026\u0026 typeof options.requestUserInteraction === \"function\") {\n      return Boolean(await options.requestUserInteraction(ask));\n    }\n    return ask();\n  }\n\n  async function executeCheckout(input, options) {\n    const productId = String(input.productId ?? \"\").trim();\n    if (!productId) return { error: \"productId is required\", status: 400 };\n    const rail = input.rail === \"bsv\" ? \"bsv\" : \"stripe\";\n    const email = String(input.email ?? \"\").trim();\n    const confirmed = await confirmCheckout(\n      rail === \"bsv\"\n        ? \"Pay for \" + productId + \" with BSV? This starts a live purchase.\"\n        : \"Buy \" + productId + \"? You will be redirected to Stripe checkout.\",\n      options,\n    );\n    if (!confirmed) return { cancelled: true, message: \"Checkout cancelled\" };\n    if (rail === \"bsv\") {\n      if (!email) return { error: \"A valid buyer email is required\", status: 400 };\n      const res = await fetch(\"/api/bsv/checkout/\" + encodeURIComponent(productId), {\n        method: \"POST\",\n        headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n        credentials: \"same-origin\",\n        body: JSON.stringify({ email }),\n        signal: options \u0026\u0026 options.signal,\n      });\n      const body = await res.json().catch(() =\u003e ({}));\n      if (!res.ok) return { error: body.error || (res.status + \" \" + res.statusText), status: res.status };\n      return body;\n    }\n    const res = await fetch(\"/api/checkout/\" + encodeURIComponent(productId), {\n      method: \"POST\",\n      headers: { accept: \"application/json\", \"content-type\": \"application/json\" },\n      credentials: \"same-origin\",\n      signal: options \u0026\u0026 options.signal,\n    });\n    const body = await res.json().catch(() =\u003e ({}));\n    if (!res.ok) return { error: body.error || (res.status + \" \" + res.statusText), status: res.status };\n    if (!body.url) return { error: \"Checkout did not return a URL\", status: 502 };\n    if (typeof window !== \"undefined\") window.location.assign(body.url);\n    return { url: body.url, navigated: true };\n  }\n\n  async function executeTool(tool, input, options) {\n    if (tool.kind === \"checkout\") return executeCheckout(input ?? {}, options);\n    let path = tool.anchor;\n    const query = new URLSearchParams();\n    const body = {};\n    for (const [key, value] of Object.entries(input ?? {})) {\n      const token = \"{\" + key + \"}\";\n      if (path.includes(token)) {\n        path = path.replace(token, encodeURIComponent(String(value)));\n      } else if (!tool.pick \u0026\u0026 value != null) {\n        if (tool.method === \"GET\") query.set(key, String(value));\n        else body[key] = value;\n      }\n    }\n    const qs = query.toString();\n    const res = await fetch(path + (qs ? \"?\" + qs : \"\"), {\n      method: tool.method,\n      headers: {\n        accept: \"application/json\",\n        ...(tool.method === \"GET\" ? {} : { \"content-type\": \"application/json\" }),\n      },\n      credentials: \"same-origin\",\n      ...(tool.method === \"GET\" ? {} : { body: JSON.stringify(body) }),\n      signal: options \u0026\u0026 options.signal,\n    });\n    if (!res.ok) {\n      throw new Error(\"bOpen.ai API \" + tool.name + \" failed: \" + res.status + \" \" + res.statusText);\n    }\n    return applyPick(tool.pick, await res.json(), input);\n  }\n\n  (async () =\u003e {\n    for (const tool of tools) {\n      tr
315y {\n        await api.registerTool({\n          name: tool.name,\n          description: tool.description,\n          inputSchema: tool.inputSchema,\n          annotations: tool.annotations,\n          execute: (input, options) =\u003e executeTool(tool, input ?? {}, options),\n        });\n      } catch (err) {\n        if (err \u0026\u0026 err.name === \"InvalidStateError\") continue;\n      }\n    }\n  })();\n})();"])</script>
315<script>self.__next_f.push([1,"5:[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"httpEquiv\":\"origin-trial\",\"content\":\"AmcXM47jsJzN45BHbf3c1UagBhIkZjRjV8jdXUQIaTMvOh7iaqIhpXBTruqyYMX30ixQS/3klY/YcnbkqWAidwMAAABIeyJvcmlnaW4iOiJodHRwczovL2JvcGVuLmFpOjQ0MyIsImZlYXR1cmUiOiJXZWJNQ1AiLCJleHBpcnkiOjE3OTQ4NzM2MDB9\"}],[\"$\",\"script\",null,{\"id\":\"webmcp-register\",\"dangerouslySetInnerHTML\":{\"__html\":\"$13\"}}]]}],\"$L14\",\"$L15\"]}]\n6:[\"$\",\"$16\",\"c\",{\"children\":[null,[\"$\",\"$L17\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L18\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n7:[\"$\",\"$16\",\"c\",{\"children\":[null,[\"$\",\"$L17\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L18\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n8:[\"$\",\"$16\",\"c\",{\"children\":[null,[\"$\",\"$L17\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L18\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n9:[\"$\",\"$16\",\"c\",{\"children\":[\"$L19\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2d_rj09wsb5q5.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$1b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@1c\"}]}]]}]\n1d:[]\na:\"$W1d\"\nb:[\"$\",\"$16\",\"c\",{\"children\":[null,null,null]}]\nc:[\"$\",\"$16\",\"h\",{\"children\":[null,[\"$\",\"$L1e\",null,{\"children\":\"$L1f\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L20\",null,{\"children\":[\"$\",\"$1b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L21\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3e7p7_cewh3w8.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nf:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/14f2nd_kuit2j.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script>
315<script>self.__next_f.push([1,"22:I[59919,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"ThemeProvider\"]\n23:I[386227,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"SoundProvider\"]\n24:I[993530,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"SelectedAgentProvider\"]\n25:I[999061,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"GameShellProvider\"]\n26:I[984834,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"Nav\"]\n27:I[522016,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\","])</script>
315<script>self.__next_f.push([1,"\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"\"]\n28:I[960679,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"FloatingCompanion\"]\n29:I[112368,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"CommandMenu\"]\n2a:I[843999,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"WebMCPProvider\"]\n2b:I[713354,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"Toaster\"]\n"])</script>
315<script>self.__next_f.push([1,"11:[\"$\",\"$L22\",null,{\"children\":[[\"$\",\"$L23\",null,{\"children\":[\"$\",\"$L24\",null,{\"children\":[\"$\",\"$L25\",null,{\"children\":[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2d_rj09wsb5q5.css?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[[[\"$\",\"$L26\",null,{}],[\"$\",\"main\",null,{\"className\":\"mx-auto flex min-h-screen w-full max-w-3xl flex-col items-start justify-center gap-6 px-6 py-32 md:px-10\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mono text-xs tracking-[0.14em]\",\"style\":{\"color\":\"var(--accent)\"},\"children\":\"[ ERROR 404 ]\"}],[\"$\",\"h1\",null,{\"className\":\"text-balance font-serif text-5xl font-black leading-none text-foreground md:text-7xl\",\"children\":\"This page went off-grid.\"}],[\"$\",\"p\",null,{\"className\":\"max-w-xl text-pretty text-lg leading-relaxed text-muted-foreground\",\"children\":\"The link may be broken, or the page may have moved. Everything else is still right where you left it.\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 flex flex-wrap gap-3\",\"children\":[[\"$\",\"$L27\",null,{\"href\":\"/\",\"className\":\"btn-primary min-h-11 px-5\",\"children\":\"BACK TO HOME\"}],[\"$\",\"$L27\",null,{\"href\":\"/plugins\",\"className\":\"mono min-h-11 border border-border px-5 py-3 text-xs font-bold tracking-[0.08em] text-primary hover:border-primary\",\"children\":\"BROWSE PLUGINS\"}]]}],[\"$\",\"pre\",null,{\"className\":\"mt-8 max-w-xl overflow-x-auto text-xs leading-6 text-muted-foreground\",\"style\":{\"fontFamily\":\"var(--font-mono), monospace\"},\"children\":\"# Not found\\n\\nThis path does not exist on bOpen.ai. The HTTP status is 404.\\n\\nWhere to look next:\\n\\n- [Sitemap](https://bopen.ai/sitemap.xml)\\n- [llms.txt](https://bopen.ai/llms.txt)\\n- [Full index](https://bopen.ai/llms-full.txt)\\n- [bOpen.ai Developers](https://bopen.ai/developers)\\n- [OpenAPI spec](https://bopen.ai/api/openapi.json)\\n- [Plugin catalog](https://bopen.ai/plugins)\\n- [Skill catalog](https://bopen.ai/skills)\\n- [Home](https://bopen.ai/)\\n\"}]]}]],\"$11:props:children:0:props:children:props:children:props:children:0:0\"]],\"$undefined\",[\"$\",\"$L28\",null,{}],[\"$\",\"$L29\",null,{}]]}]}]}],[\"$\",\"$L2a\",null,{}],[\"$\",\"$L2b\",null,{}]]}]\n"])</script>
315<script>self.__next_f.push([1,"2c:Tfec,"])</script>
315<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@id\":\"https://bopen.ai/#organization\",\"@type\":\"Organization\",\"name\":\"bOpen.ai\",\"url\":\"https://bopen.ai\",\"logo\":\"https://bopen.ai/android-chrome-512x512.png\",\"description\":\"bOpen.ai is the open-source toolkit published by Open Protocol Labs, Inc., with free developer tooling for AI agents, wallets, tokens, and overlay networks.\",\"parentOrganization\":{\"@type\":\"Organization\",\"name\":\"Open Protocol Labs, Inc.\",\"url\":\"https://opl.dev\",\"foundingDate\":\"2023\",\"sameAs\":[\"https://www.linkedin.com/company/opldotdev\",\"https://github.com/b-open-io\",\"https://x.com/bOpen_AI\"]},\"email\":\"[email protected]\",\"contactPoint\":{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"[email protected]\",\"url\":\"https://bopen.ai/contact\",\"availableLanguage\":\"English\"},\"address\":{\"@type\":\"PostalAddress\",\"addressCountry\":\"US\"},\"founder\":[{\"@type\":\"Person\",\"name\":\"Kurt Wuckert Jr.\",\"url\":\"https://kurtwuckertjr.com\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q138774106\"]},{\"@type\":\"Person\",\"name\":\"Luke Rohenaz\",\"url\":\"https://satchmo.dev\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q140697627\"]}],\"knowsAbout\":[{\"@type\":\"Thing\",\"name\":\"Artificial intelligence\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q11660\"]},{\"@type\":\"Thing\",\"name\":\"Intelligent agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q1142726\"]},{\"@type\":\"Thing\",\"name\":\"Multi-agent system\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q529909\"]},{\"@type\":\"Thing\",\"name\":\"Large language model\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q115305900\"]},{\"@type\":\"Thing\",\"name\":\"Prompt engineering\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q108941486\"]},{\"@type\":\"Thing\",\"name\":\"Autonomous agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q4826847\"]},{\"@type\":\"Thing\",\"name\":\"AI agent\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q132451509\"]},{\"@type\":\"Thing\",\"name\":\"Chatbot\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q870780\"]},{\"@type\":\"Thing\",\"name\":\"Anthropic\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q116758847\"]},{\"@type\":\"Thing\",\"name\":\"Claude\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q118876059\"]},{\"@type\":\"Thing\",\"name\":\"Claude Code\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q138457287\"]},{\"@type\":\"Thing\",\"name\":\"Model Context Protocol\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q133436854\"]},{\"@type\":\"Thing\",\"name\":\"OpenAI\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q21708200\"]},{\"@type\":\"Thing\",\"name\":\"Generative pre-trained transformer\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q116777014\"]},{\"@type\":\"Thing\",\"name\":\"ChatGPT\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q115564437\"]},{\"@type\":\"Thing\",\"name\":\"xAI\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q120599684\"]},{\"@type\":\"Thing\",\"name\":\"Grok\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q123361035\"]},{\"@type\":\"Thing\",\"name\":\"GitHub\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q364\"]},{\"@type\":\"Thing\",\"name\":\"GitHub Copilot\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q107435063\"]},{\"@type\":\"Thing\",\"name\":\"Cursor\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q131980386\"]},{\"@type\":\"Thing\",\"name\":\"Replit\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q60768699\"]},{\"@type\":\"Thing\",\"name\":\"Vercel\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q56069184\"]},{\"@type\":\"Thing\",\"name\":\"Next.js\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q56062435\"]},{\"@type\":\"Thing\",\"name\":\"React\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q19399674\"]},{\"@type\":\"Thing\",\"name\":\"TypeScript\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q978185\"]},{\"@type\":\"Thing\",\"name\":\"Node.js\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q756100\"]},{\"@type\":\"Thing\",\"name\":\"E-commerce\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q484847\"]},{\"@type\":\"Thing\",\"name\":\"Online marketplace\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q3390477\"]},{\"@type\":\"Thing\",\"name\":\"Software as a service\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q1254596\"]},{\"@type\":\"Thing\",\"name\":\"Digital distribution\",\"sameAs\":[\"https://www.wikidata.org/wiki/Q269415\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https://bopen.ai/#website\",\"url\":\"https://bopen.ai\",\"name\":\"bOpen.ai\",\"publisher\":{\"@id\":\"https://bopen.ai/#organization\"}}]}"])</script>
315<script>self.__next_f.push([1,"14:[\"$\",\"body\",null,{\"className\":\"inter_b1cfe8d5-module__FGNtsa__variable space_mono_d8eecc30-module__bEIZiG__variable raleway_9937a3e8-module__oiguAa__variable\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2c\"}}],\"$L2d\"]}]\n15:[\"$\",\"$L12\",null,{\"gaId\":\"G-N0HC9H708Z\"}]\n"])</script>
315<script>self.__next_f.push([1,"2e:I[758298,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2d4kbcb_xr14_.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"default\"]\n2d:[\"$\",\"$L22\",null,{\"children\":[[\"$\",\"$L23\",null,{\"children\":[\"$\",\"$L24\",null,{\"children\":[\"$\",\"$L25\",null,{\"children\":[[\"$\",\"$L17\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$2e\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2d4kbcb_xr14_.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"async\":true}]],\"template\":[\"$\",\"$L18\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$11:props:children:0:props:children:props:children:props:children:0:1\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L17\",null,{\"parallelRouterKey\":\"overlay\",\"error\":\"$2e\",\"errorStyles\":\"$2d:props:children:0:props:children:props:children:props:children:0:props:errorStyles\",\"errorScripts\":\"$2d:props:children:0:props:children:props:children:props:children:0:props:errorScripts\",\"template\":[\"$\",\"$L18\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L28\",null,{}],[\"$\",\"$L29\",null,{}]]}]}]}],[\"$\",\"$L2a\",null,{}],[\"$\",\"$L2b\",null,{}]]}]\n"])</script>
315<script>self.__next_f.push([1,"2f:T1a46,"])</script>
315<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"ProfilePage\",\"@id\":\"https://bopen.ai/agents/product-skills/legal/#webpage\",\"url\":\"https://bopen.ai/agents/product-skills/legal\",\"name\":\"Anthony — Legal \u0026 Compliance\",\"description\":\"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\\n\\n\\u003cexample\u003e\\nContext: User needs SOC 2 readiness help\\nuser: \\\"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\\\"\\nassistant: \\\"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\\\"\\n\\u003ccommentary\u003e\\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User needs auditor-facing documentation\\nuser: \\\"Draft our access control policy and help organize the evidence for the auditor.\\\"\\nassistant: \\\"I'll use the legal agent to draft the policy and structure the evidence request.\\\"\\n\\u003ccommentary\u003e\\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User is evaluating a stablecoin or digital-asset product\\nuser: \\\"What licenses or registrations might apply if we help design or operate a payment stablecoin?\\\"\\nassistant: \\\"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\\\"\\n\\u003ccommentary\u003e\\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User needs token classification or tokenized-securities analysis\\nuser: \\\"Is this token a security, a commodity, or just software infrastructure?\\\"\\nassistant: \\\"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\\\"\\n\\u003ccommentary\u003e\\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\",\"isPartOf\":{\"@id\":\"https://bopen.ai/#website\"},\"about\":{\"@id\":\"https://bopen.ai/agents/product-skills/legal/#person\"},\"primaryImageOfPage\":{\"@id\":\"https://bopen.ai/agents/product-skills/legal/#image\"}},{\"@type\":\"Person\",\"@id\":\"https://bopen.ai/agents/product-skills/legal/#person\",\"name\":\"Anthony\",\"jobTitle\":\"Legal \u0026 Compliance\",\"description\":\"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exch
315ange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\\n\\n\\u003cexample\u003e\\nContext: User needs SOC 2 readiness help\\nuser: \\\"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\\\"\\nassistant: \\\"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\\\"\\n\\u003ccommentary\u003e\\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User needs auditor-facing documentation\\nuser: \\\"Draft our access control policy and help organize the evidence for the auditor.\\\"\\nassistant: \\\"I'll use the legal agent to draft the policy and structure the evidence request.\\\"\\n\\u003ccommentary\u003e\\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User is evaluating a stablecoin or digital-asset product\\nuser: \\\"What licenses or registrations might apply if we help design or operate a payment stablecoin?\\\"\\nassistant: \\\"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\\\"\\n\\u003ccommentary\u003e\\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\\n\\n\\u003cexample\u003e\\nContext: User needs token classification or tokenized-securities analysis\\nuser: \\\"Is this token a security, a commodity, or just software infrastructure?\\\"\\nassistant: \\\"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\\\"\\n\\u003ccommentary\u003e\\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\\n\\u003c/commentary\u003e\\n\\u003c/example\u003e\",\"url\":\"https://bopen.ai/agents/product-skills/legal\",\"worksFor\":{\"@id\":\"https://bopen.ai/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://bopen.ai/agents/product-skills/legal/#image\",\"url\":\"https://bopen.ai/images/agents/anthony.png\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://bopen.ai/agents/product-skills/legal/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https://bopen.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agents\",\"item\":\"https://bopen.ai/agents\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"product-skills\",\"item\":\"https://bopen.ai/plugins/product-skills\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Anthony\",\"item\":\"https://bopen.ai/agents/product-skills/legal\"}]}]}"])</script>
315<script>self.__next_f.push([1,"19:[\"$\",\"div\",null,{\"className\":\"relative\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2f\"}}],\"$L30\",\"$L31\",\"$L32\"]}]\n"])</script>
315<script>self.__next_f.push([1,"33:I[241326,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"AgentPortrait\"]\n39:I[166639,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"NewsletterForm\"]\n30:[\"$\",\"$L26\",null,{}]\n34:Ta0d,"])</script>
315<script>self.__next_f.push([1,"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample\u003e\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary\u003e\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary\u003e\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary\u003e\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary\u003e\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary\u003e\n\u003c/example\u003e"])</script>
315<script>self.__next_f.push([1,"31:[\"$\",\"main\",null,{\"id\":\"main-content\",\"style\":{\"background\":\"var(--background)\"},\"children\":[[\"$\",\"header\",null,{\"className\":\"px-6 pb-16 pt-32 md:px-12 md:pb-24 md:pt-40\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-7xl\",\"children\":[[\"$\",\"nav\",null,{\"aria-label\":\"Breadcrumb\",\"className\":\"mono flex flex-wrap gap-2 text-xs\",\"children\":[[\"$\",\"$L27\",null,{\"href\":\"/\",\"className\":\"no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"HOME\"}],[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"style\":{\"color\":\"var(--input)\"},\"children\":\"/\"}],[\"$\",\"$L27\",null,{\"href\":\"/agents\",\"className\":\"no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"AGENTS\"}],[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"style\":{\"color\":\"var(--input)\"},\"children\":\"/\"}],[\"$\",\"$L27\",null,{\"href\":\"/plugins/product-skills\",\"className\":\"no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"PRODUCT-SKILLS\"}],[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"style\":{\"color\":\"var(--input)\"},\"children\":\"/\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"LEGAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-12 grid gap-10 md:grid-cols-[auto_1fr] md:items-end\",\"children\":[[\"$\",\"$L33\",null,{\"displayName\":\"Anthony\",\"size\":160,\"priority\":true}],[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mono mb-4 text-xs\",\"style\":{\"color\":\"var(--accent)\",\"letterSpacing\":\"0.1em\"},\"children\":[\"[ \",\"LEGAL \u0026 COMPLIANCE\",\" ]\"]}],[\"$\",\"h1\",null,{\"className\":\"text-balance font-serif text-5xl font-black leading-none text-white md:text-7xl\",\"children\":\"Anthony\"}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-3xl text-pretty text-lg leading-relaxed\",\"style\":{\"color\":\"var(--secondary-foreground)\"},\"children\":\"$34\"}]]}]]}]]}]}],\"$L35\",\"$L36\",\"$L37\",\"$L38\"]}]\n"])</script>
315<script>self.__next_f.push([1,"32:[\"$\",\"footer\",null,{\"className\":\"w-full py-32 px-6 border-t flex flex-col items-center justify-center text-center\",\"style\":{\"borderColor\":\"var(--input)\"},\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-5xl md:text-7xl font-serif font-black text-white mb-12 tracking-tighter\",\"children\":\"Bring your own agent.\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center gap-6\",\"children\":[[\"$\",\"p\",null,{\"className\":\"max-w-xl text-base md:text-lg\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"lineHeight\":1.6},\"children\":\"Find install options for Claude Code, Codex, Grok Build, and OpenCode in each package.\"}],[\"$\",\"$L27\",null,{\"href\":\"/plugins/core#install\",\"className\":\"btn-primary no-underline\",\"style\":{\"transform\":\"scale(1.25)\"},\"children\":\"View install options\"}],[\"$\",\"span\",null,{\"className\":\"mono uppercase mt-4 text-center\",\"style\":{\"fontSize\":\"0.75rem\",\"color\":\"var(--secondary-foreground)\"},\"children\":[\"Claude Code · Codex · Open SKILL.md\",[\"$\",\"br\",null,{}],\"Free \u0026 Open Source\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-24 flex flex-col items-center gap-4\",\"style\":{\"borderTop\":\"1px solid var(--input)\",\"paddingTop\":\"3rem\",\"width\":\"100%\",\"maxWidth\":\"28rem\"},\"children\":[[\"$\",\"div\",null,{\"className\":\"mono text-xs\",\"style\":{\"color\":\"var(--secondary-foreground)\"},\"children\":\"GET UPDATES\"}],[\"$\",\"$L39\",null,{}]]}],[\"$\",\"div\",null,{\"className\":\"mono mt-16 flex w-full max-w-7xl flex-wrap items-center justify-center gap-4 text-xs md:justify-between\",\"style\":{\"color\":\"var(--secondary-foreground)\"},\"children\":[[\"$\",\"span\",null,{\"children\":\"© 2026 bOPEN.AI\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4\",\"children\":[[\"$\",\"$L27\",null,{\"href\":\"/about\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"About\"}],[\"$\",\"$L27\",null,{\"href\":\"/contact\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"Contact\"}],[\"$\",\"$L27\",null,{\"href\":\"/agents\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"Agents\"}],[\"$\",\"$L27\",null,{\"href\":\"/developers\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"Developers\"}],[\"$\",\"$L27\",null,{\"href\":\"/privacy\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"Privacy\"}],[\"$\",\"$L27\",null,{\"href\":\"/terms\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--secondary-foreground)\",\"opacity\":0.7,\"textDecoration\":\"none\"},\"children\":\"Terms\"}]]}],[\"$\",\"a\",null,{\"href\":\"https://x.com/bOpen_AI\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"hover:opacity-100 transition-opacity\",\"style\":{\"color\":\"var(--primary)\",\"textDecoration\":\"none\"},\"children\":\"Open Protocol Labs on X ↗\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--primary)\"},\"children\":\"[ OPEN AGENT TOOLKIT ]\"}]]}]]}]\n"])</script>
315<script>self.__next_f.push([1,"3a:I[114802,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/1a95ask0834lv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2roe094dr40zf.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"AgentChatLaunch\"]\n3b:Ta0d,"])</script>
315<script>self.__next_f.push([1,"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample\u003e\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary\u003e\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary\u003e\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary\u003e\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary\u003e\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary\u003e\n\u003c/example\u003e"])</script>
315<script>self.__next_f.push([1,"35:[\"$\",\"section\",null,{\"className\":\"border-t px-6 py-16 md:px-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex w-full max-w-7xl flex-col gap-6 md:flex-row md:items-center\",\"children\":[[\"$\",\"$L3a\",null,{\"agent\":{\"kind\":\"plugin-agent\",\"id\":\"product-skills:legal\",\"slug\":\"legal\",\"plugin\":\"product-skills\",\"name\":\"legal\",\"displayName\":\"Anthony\",\"title\":\"Legal \u0026 Compliance\",\"description\":\"$3b\",\"model\":\"opus\",\"color\":\"red\",\"tools\":[\"Read\",\"Write\",\"Edit\",\"MultiEdit\",\"WebFetch\",\"Bash\",\"Grep\",\"Glob\",\"TodoWrite\",\"core:markdown-writer\",\"core:agent-browser\",\"product-skills:legal-compliance\",\"product-skills:legal-agentic-build\",\"product-skills:soc2-gap-analysis\",\"product-skills:soc2-evidence-collection\",\"product-skills:soc2-policy-drafting\",\"core:confess\"],\"version\":\"1.1.12\",\"sourcePath\":\"agents/legal.md\"}}],\"$L3c\",\"$L3d\",\"$L3e\"]}]}]\n"])</script>
315<script>self.__next_f.push([1,"36:[\"$\",\"section\",null,{\"className\":\"border-t px-6 py-16 md:px-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-7xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-8 text-balance font-serif text-3xl font-black text-white\",\"children\":\"Facts\"}],[\"$\",\"dl\",null,{\"className\":\"grid grid-cols-1 gap-px sm:grid-cols-2 lg:grid-cols-5\",\"children\":[[\"$\",\"div\",\"Agent ID\",{\"className\":\"min-w-0 border p-4\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\"},\"children\":[[\"$\",\"dt\",null,{\"className\":\"mono mb-2 text-xs\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"AGENT ID\"}],[\"$\",\"dd\",null,{\"className\":\"break-words text-sm text-white\",\"translate\":\"no\",\"children\":\"product-skills:legal\"}]]}],[\"$\",\"div\",\"Plugin\",{\"className\":\"min-w-0 border p-4\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\"},\"children\":[[\"$\",\"dt\",null,{\"className\":\"mono mb-2 text-xs\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"PLUGIN\"}],[\"$\",\"dd\",null,{\"className\":\"break-words text-sm text-white\",\"translate\":\"no\",\"children\":\"product-skills\"}]]}],[\"$\",\"div\",\"Role\",{\"className\":\"min-w-0 border p-4\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\"},\"children\":[[\"$\",\"dt\",null,{\"className\":\"mono mb-2 text-xs\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"ROLE\"}],[\"$\",\"dd\",null,{\"className\":\"break-words text-sm text-white\",\"translate\":\"no\",\"children\":\"Legal \u0026 Compliance\"}]]}],[\"$\",\"div\",\"Model\",{\"className\":\"min-w-0 border p-4\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\"},\"children\":[[\"$\",\"dt\",null,{\"className\":\"mono mb-2 text-xs\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"MODEL\"}],[\"$\",\"dd\",null,{\"className\":\"break-words text-sm text-white\",\"translate\":\"no\",\"children\":\"opus\"}]]}],[\"$\",\"div\",\"Version\",{\"className\":\"min-w-0 border p-4\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\"},\"children\":[[\"$\",\"dt\",null,{\"className\":\"mono mb-2 text-xs\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"VERSION\"}],[\"$\",\"dd\",null,{\"className\":\"break-words text-sm text-white\",\"translate\":\"no\",\"children\":\"1.1.12\"}]]}]]}]]}]}]\n"])</script>
315<script>self.__next_f.push([1,"37:[\"$\",\"section\",null,{\"className\":\"border-t px-6 py-16 md:px-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-7xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-serif text-3xl font-black text-white\",\"children\":\"Skills this agent uses\"}],[\"$\",\"ul\",null,{\"className\":\"mt-6 grid gap-px sm:grid-cols-2 lg:grid-cols-3\",\"children\":[[\"$\",\"li\",\"core:confess\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/core/confess\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"confess\"}]}]}],[\"$\",\"li\",\"product-skills:legal-agentic-build\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/product-skills/legal-agentic-build\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"legal-agentic-build\"}]}]}],[\"$\",\"li\",\"product-skills:legal-compliance\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/product-skills/legal-compliance\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"legal-compliance\"}]}]}],[\"$\",\"li\",\"product-skills:soc2-evidence-collection\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/product-skills/soc2-evidence-collection\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"soc2-evidence-collection\"}]}]}],[\"$\",\"li\",\"product-skills:soc2-gap-analysis\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/product-skills/soc2-gap-analysis\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"soc2-gap-analysis\"}]}]}],[\"$\",\"li\",\"product-skills:soc2-policy-drafting\",{\"children\":[\"$\",\"$L27\",null,{\"href\":\"/skills/product-skills/soc2-policy-drafting\",\"className\":\"block border p-4 no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"background\":\"var(--secondary)\",\"borderColor\":\"var(--border)\",\"color\":\"inherit\"},\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-sm font-bold\",\"style\":{\"color\":\"var(--primary)\"},\"translate\":\"no\",\"children\":\"soc2-policy-drafting\"}]}]}]]}]]}]}]\n"])</script>
315<script>self.__next_f.push([1,"38:[\"$\",\"nav\",null,{\"aria-label\":\"Next agent\",\"className\":\"border-t px-6 md:px-12\",\"children\":[\"$\",\"$L27\",null,{\"href\":\"/agents/product-skills/marketer\",\"className\":\"group mx-auto grid min-h-64 w-full max-w-7xl gap-8 py-16 no-underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring md:grid-cols-[1fr_auto] md:items-end md:py-20\",\"style\":{\"color\":\"inherit\"},\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"mono mb-5 text-xs\",\"style\":{\"color\":\"var(--accent)\",\"letterSpacing\":\"0.1em\"},\"children\":[\"[ UP NEXT · \",\"PRODUCT-SKILLS\",\" ]\"]}],[\"$\",\"h2\",null,{\"className\":\"break-words font-serif text-3xl font-black text-white transition-colors group-hover:text-primary md:text-5xl\",\"children\":\"Caal\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-3xl text-pretty text-base leading-relaxed\",\"style\":{\"color\":\"var(--muted-foreground)\"},\"children\":\"Growth Marketer\"}]]}],[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"className\":\"font-mono text-5xl transition-transform group-hover:translate-x-2 md:text-7xl\",\"style\":{\"color\":\"var(--primary)\"},\"children\":\"→\"}]]}]}]\n"])</script>
315<script>self.__next_f.push([1,"3c:[\"$\",\"$L27\",null,{\"href\":\"/chat?agent=product-skills%3Alegal\",\"className\":\"mono inline-flex min-h-11 items-center border px-5 text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"borderColor\":\"var(--input)\",\"color\":\"var(--primary)\"},\"children\":\"CLASSIC CHAT →\"}]\n3d:[\"$\",\"$L27\",null,{\"href\":\"/plugins/product-skills\",\"className\":\"mono inline-flex min-h-11 items-center text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"color\":\"var(--primary)\"},\"children\":\"PLUGIN PROFILE →\"}]\n3e:[\"$\",\"a\",null,{\"href\":\"https://github.com/b-open-io/product-skills/blob/master/agents/legal.md\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"mono inline-flex min-h-11 items-center text-xs no-underline hover:text-white focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\"style\":{\"color\":\"var(--primary)\"},\"children\":\"SOURCE ↗\"}]\n"])</script>
315<script>self.__next_f.push([1,"1f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
315<script>self.__next_f.push([1,"1c:null\n3f:Ta0d,"])</script>
315<script>self.__next_f.push([1,"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample\u003e\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary\u003e\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary\u003e\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary\u003e\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary\u003e\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary\u003e\n\u003c/example\u003e"])</script>
315<script>self.__next_f.push([1,"40:Ta0d,"])</script>
315<script>self.__next_f.push([1,"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample\u003e\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary\u003e\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary\u003e\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary\u003e\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary\u003e\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary\u003e\n\u003c/example\u003e"])</script>
315<script>self.__next_f.push([1,"21:[[\"$\",\"title\",\"0\",{\"children\":\"Anthony — Legal \u0026 Compliance — bOpen.ai\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"$3f\"}],[\"$\",\"link\",\"2\",{\"rel\":\"canonical\",\"href\":\"https://bopen.ai/agents/product-skills/legal/\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"Anthony — Legal \u0026 Compliance — bOpen.ai\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"$40\"}],\"$L41\",\"$L42\",\"$L43\",\"$L44\",\"$L45\",\"$L46\",\"$L47\",\"$L48\",\"$L49\",\"$L4a\",\"$L4b\",\"$L4c\",\"$L4d\",\"$L4e\",\"$L4f\",\"$L50\",\"$L51\"]\n"])</script>
315<script>self.__next_f.push([1,"53:I[27201,[\"/_next/static/chunks/1wm8z31cyob0f.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/22wh1y4p00lgv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/05xqq3thagkhp.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0g5bfpwmmpo1s.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/2qzt0gwmwpjn5.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3x91s2t9ourfr.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/3etr7ocxp8c-k.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/0gcbd0sitplxv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\",\"/_next/static/chunks/15lw58hmqpldv.js?dpl=dpl_CxZwiXfEsqk6MFEYGi35cW6Roqed\"],\"IconMark\"]\n41:[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://bopen.ai/agents/product-skills/legal/\"}]\n42:[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"bOpen.ai\"}]\n43:[\"$\",\"meta\",\"7\",{\"property\":\"og:locale\",\"content\":\"en_US\"}]\n44:[\"$\",\"meta\",\"8\",{\"property\":\"og:image\",\"content\":\"https://bopen.ai/api/og?agent=product-skills%3Alegal\"}]\n45:[\"$\",\"meta\",\"9\",{\"property\":\"og:image:width\",\"content\":\"1200\"}]\n46:[\"$\",\"meta\",\"10\",{\"property\":\"og:image:height\",\"content\":\"630\"}]\n47:[\"$\",\"meta\",\"11\",{\"property\":\"og:image:alt\",\"content\":\"Anthony, Legal \u0026 Compliance at bOpen.ai\"}]\n48:[\"$\",\"meta\",\"12\",{\"property\":\"og:type\",\"content\":\"profile\"}]\n49:[\"$\",\"meta\",\"13\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}]\n4a:[\"$\",\"meta\",\"14\",{\"name\":\"twitter:title\",\"content\":\"Anthony — Legal \u0026 Compliance — bOpen.ai\"}]\n52:Ta0d,"])</script>
315<script>self.__next_f.push([1,"Expert in legal compliance, privacy regulations, terms of service, data protection, DPAs, SOC 2 readiness, and US crypto-law research for startup operations. Use this agent when the user asks for privacy policies, terms, data processing agreements, vendor security/legal review, SOC 2 work such as gap analysis, evidence preparation, policy drafting, trust center language, audit readiness, or crypto-law issues such as stablecoin issuance, the GENIUS Act, CLARITY/FIT21 status, token classification, Howey analysis, FinCEN/MSB or Travel Rule questions, exchange or ATS exposure, 1099-DA broker reporting, tokenized securities, UCC Article 8 / Article 12 mechanics, DAO liability, or digital-asset entity structuring.\n\n\u003cexample\u003e\nContext: User needs SOC 2 readiness help\nuser: \"Can you run a SOC 2 gap analysis and tell me what controls we're missing?\"\nassistant: \"I'll use the legal agent to scope the review, map the control gaps, and frame the remediation work.\"\n\u003ccommentary\u003e\nSOC 2 scoping and compliance framing should route here first, even if security-ops may join for technical validation.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs auditor-facing documentation\nuser: \"Draft our access control policy and help organize the evidence for the auditor.\"\nassistant: \"I'll use the legal agent to draft the policy and structure the evidence request.\"\n\u003ccommentary\u003e\nPolicy drafting and evidence organization are core legal/compliance workflows handled by Anthony with the SOC 2 skills.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User is evaluating a stablecoin or digital-asset product\nuser: \"What licenses or registrations might apply if we help design or operate a payment stablecoin?\"\nassistant: \"I'll use the legal agent to frame the federal and state-law analysis, including GENIUS, FinCEN/MSB, and money-transmission issues.\"\n\u003ccommentary\u003e\nStablecoin issuance, payment rails, and crypto startup legal analysis should route to Anthony first because they require integrated securities, AML, sanctions, and entity-structure framing.\n\u003c/commentary\u003e\n\u003c/example\u003e\n\n\u003cexample\u003e\nContext: User needs token classification or tokenized-securities analysis\nuser: \"Is this token a security, a commodity, or just software infrastructure?\"\nassistant: \"I'll use the legal agent to structure the Howey analysis, check current SEC/CFTC guidance, and identify the main unresolved points.\"\n\u003ccommentary\u003e\nToken classification, exchange/ATS questions, tokenized securities, and DAO/entity issues are core legal-analysis work rather than generic research only.\n\u003c/commentary\u003e\n\u003c/example\u003e"])</script>
315<script>self.__next_f.push([1,"4b:[\"$\",\"meta\",\"15\",{\"name\":\"twitter:description\",\"content\":\"$52\"}]\n4c:[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image\",\"content\":\"https://bopen.ai/api/og?agent=product-skills%3Alegal\"}]\n4d:[\"$\",\"link\",\"17\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.2qpp2cviistsx.ico\",\"sizes\":\"32x32\",\"type\":\"image/x-icon\"}]\n4e:[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}]\n4f:[\"$\",\"link\",\"19\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}]\n50:[\"$\",\"link\",\"20\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\",\"sizes\":\"180x180\"}]\n51:[\"$\",\"$L53\",\"21\",{}]\n"])</script>
315</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.