🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

SmartSaaS

by @smartsaas

Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...

Versionv1.0.0
πŸ’‘ Examples

  • Create dataset then add items: (1) Create with scripts/create-dataset.sh "" "" '<bodyJson>'</code> (bodyJson includes dataTitle and dataSchema.fields). (2) Parse the response: use the <strong style="color:#e5e7eb">top-level <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">_id</code></strong> as folderId. (3) Add each item: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/add-to-dataset.sh <folderId> '<itemJson>'</code> (itemJson matches schema). (4) Fetch: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/get-data-content.sh <folderId></code>.</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Schema chain:</strong> Run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/get-schema.sh dataset</code> first to see required/optional fields, then build the body and run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-dataset.sh "My Dataset" "" '<bodyJson>'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Create a dataset (no items): <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-dataset.sh "My Dataset"</code>. To allow adding content later, include dataSchema: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-dataset.sh "My Dataset" "" '{"dataTitle":"My Dataset","dataSchema":{"fields":[{"name":"name","type":"string"}]}}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">List datasets: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/list-datasets.sh</code>.</li> <li style="color:#94a3b8;margin:3px 0">Create a project: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-project.sh "Project Alpha" "Description"</code>.</li> <li style="color:#94a3b8;margin:3px 0">Create a task: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-task.sh "<projectId>" "<workPackageId>" "Task title"</code>.</li> <li style="color:#94a3b8;margin:3px 0">Assign a task: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/assign-task.sh "<projectId>" "<taskId>" "<userId>"</code>.</li> <li style="color:#94a3b8;margin:3px 0">List user integrations: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/list-integrations.sh</code>.</li> <li style="color:#94a3b8;margin:3px 0">Sync Shopify products: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/sync-shopify-products.sh</code>.</li> <li style="color:#94a3b8;margin:3px 0">Refresh user: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/refresh-user.sh</code>.</li> <li style="color:#94a3b8;margin:3px 0">Get calendar for a date: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/get-calendar-content.sh "2025-03-15"</code>.</li> <li style="color:#94a3b8;margin:3px 0">List campaigns: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/list-active-campaigns.sh</code>.</li> <li style="color:#94a3b8;margin:3px 0">Start a campaign: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/start-campaign.sh "<campaignId>"</code>.</li> <li style="color:#94a3b8;margin:3px 0">Create email template: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-email-template.sh '{"title":"Welcome","subject":"Hi","content":"..."}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Create webpage template: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-webpage-template.sh '{"title":"Landing","description":"..."}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Send test email: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/send-test-email.sh "<templateId>" "user@example.com" "Test"</code>.</li> <li style="color:#94a3b8;margin:3px 0">List knowledge: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/list-knowledge.sh</code> or <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/list-knowledge.sh 1 10 createdAt desc</code>. Get one: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/get-knowledge.sh "<id>"</code>. Create: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/create-knowledge.sh '{"title":"My article","content":"..."}'</code>. Post research: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/post-research.sh '{"title":"Market study","findings":"..."}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Dispatch to webhook: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/dispatch-openclaw-webhook.sh</code> or <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/dispatch-openclaw-webhook.sh '{"event":"cron","job":"daily"}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Post event: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/post-openclaw-event.sh cron '{"schedule":"daily"}'</code>.</li> <li style="color:#94a3b8;margin:3px 0">Configure cron: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/configure-openclaw-cron.sh '{"schedule":"0 9 * * *","payload":{},"enabled":true}'</code>.</li></p><p style="margin:8px 0"><strong style="color:#e5e7eb">Schema requirements (valid posts):</strong> Use the <strong style="color:#e5e7eb">schema chain</strong>: run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">get-schema.sh <resource></code> before any create/post to retrieve the expected shape, then build the request from that output. Schemas are in this skill's <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">schemas/</code> (JSON per resource); they mirror <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">smartsaas-backend/src/schema/</code> and repo <strong style="color:#e5e7eb">SCHEMA_REQUIREMENTS.md</strong>. Use the correct field names (e.g. task_title, campaign_title, dataSchema) when sending full JSON; scripts may accept friendly names and the API may map them.</p><p style="margin:8px 0">Do not log or echo the API key. Never ask the user to provide the API key in chat. If the scripts report missing config, tell the user to set <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">SMARTSAAS_BASE_URL</code> and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">SMARTSAAS_API_KEY</code> in OpenClaw (e.g. in <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">skills.entries.smartsaas.env</code> in ~/.openclaw/openclaw.json).</p></div></div><div style="background:#070714;border:1px solid #1e1e3f;border-radius:12px;padding:16px 18px"><div style="color:#fbbf24;font-size:.82em;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:6px"><span>βš™οΈ</span> <!-- -->Configuration</div><div style="font-size:.85em;line-height:1.65;color:#94a3b8;max-height:500px;overflow-y:auto"><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">SMARTSAAS_BASE_URL</code> and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">SMARTSAAS_API_KEY</code> must be available to the scripts (see <strong style="color:#e5e7eb">Environment</strong> above). The API key is created in SmartSaaS APIScreen. You do not ask the user for it.</li></p></div></div></div><button style="background:none;border:none;color:#6366f1;cursor:pointer;font-size:.82em;padding:4px 0;display:inline-flex;align-items:center;gap:4px">β–Έ Show full description</button></div><div class="actions-row" style="margin-top:8px;margin-bottom:4px;gap:8px"><a href="https://clawhub.ai/smartsaas/smartsaas-ai" target="_blank" rel="noopener" class="btn-secondary" style="padding:6px 12px;font-size:.82em;border-radius:8px;background:transparent;border:1px solid #1e1e3f;color:#6b7280;text-decoration:none;white-space:nowrap">View on <!-- -->ClawHub</a><button class="copy-btn" data-cmd="clawhub install smartsaas-ai" style="background:linear-gradient(135deg, #22c55e22, #16a34a22);color:#22c55e;border:1px solid #22c55e33;border-radius:8px;padding:6px 12px;font-size:.82em;cursor:pointer;white-space:nowrap;font-weight:700">πŸ“‹ Copy install</button></div></div><div class="install-box"><div class="install-header"><div class="install-dots"><div class="dot" style="background:#ef4444"></div><div class="dot" style="background:#eab308"></div><div class="dot" style="background:#22c55e"></div></div><span class="install-label">TERMINAL</span></div><div class="install-body" style="flex-wrap:wrap"><code class="install-cmd">clawhub install smartsaas-ai</code><button class="copy-btn" data-cmd="clawhub install smartsaas-ai" style="font-weight:700">Copy</button></div></div><section class="next-step-card"><h2 class="next-step-title">πŸ§ͺ Use this skill with your agent</h2><p class="next-step-sub">Most visitors already have an agent. Pick your environment, install or copy the workflow, then run the smoke-test prompt above.</p><div class="agent-grid"><a class="agent-card" href="https://manus.im/invitation/PAN0HWLUJPLKA?utm_source=bytesagain&utm_medium=skill_page&utm_campaign=agent_cta" target="_blank" rel="sponsored noopener noreferrer"><div class="agent-name"><span>Manus</span><span class="sponsored-pill">invite</span></div><div class="agent-desc">Task-oriented agent. Great for testing AI skills end-to-end.</div><div class="agent-link">Try Manus<!-- --> β†’</div></a><a class="agent-card" href="/install"><div class="agent-name"><span>OpenClaw</span></div><div class="agent-desc">Local-first agent. Install skills via ClawHub CLI.</div><div class="agent-link">Set up OpenClaw<!-- --> β†’</div></a><a class="agent-card" href="https://code.claude.com/docs" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Claude Code</span></div><div class="agent-desc">Anthropic's coding agent. Paste the prompt or SKILL.md into your session.</div><div class="agent-link">Claude Code docs<!-- --> β†’</div></a><a class="agent-card" href="https://cursor.com" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Cursor</span></div><div class="agent-desc">AI-powered IDE. Use the smoke-test prompt in Cursor Agent.</div><div class="agent-link">Open Cursor<!-- --> β†’</div></a><a class="agent-card" href="https://docs.continue.dev/customize/tools" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Continue.dev</span></div><div class="agent-desc">Open-source AI code assistant. Add SKILL.md as a custom tool.</div><div class="agent-link">Continue docs<!-- --> β†’</div></a><a class="agent-card" href="https://codeium.com/windsurf" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Windsurf</span></div><div class="agent-desc">Agentic IDE by Codeium. Paste the prompt into Cascade.</div><div class="agent-link">Try Windsurf<!-- --> β†’</div></a><a class="agent-card" href="https://github.com/cline/cline" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Cline</span></div><div class="agent-desc">VS Code extension for autonomous coding with MCP tools.</div><div class="agent-link">Cline on GitHub<!-- --> β†’</div></a><a class="agent-card" href="https://github.com/features/copilot" target="_blank" rel="noopener noreferrer"><div class="agent-name"><span>Copilot Workspace</span></div><div class="agent-desc">GitHub's AI dev environment. Suitable for code-generation skills.</div><div class="agent-link">Copilot Workspace<!-- --> β†’</div></a></div></section><div class="cta-banner"><div><p class="cta-title">πŸ” Can't find the right skill?</p><p class="cta-sub">Search 60,000+ AI agent skills β€” free, no login needed.</p></div><a href="/" class="btn-primary" style="font-size:.88em;padding:10px 22px">Search Skills β†’</a></div></div><div class="two-col-side"></div></div></div><script> document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => { btn.addEventListener('click', () => { const cmd = btn.getAttribute('data-cmd'); if (!cmd) return; navigator.clipboard.writeText(cmd).then(() => { const orig = btn.textContent; btn.textContent = 'Copied!'; setTimeout(() => btn.textContent = orig, 1500); }).catch(() => {}); }); }); </script><!--$--><!--/$--></main><footer style="background:#0a0a1a;border-top:1px solid #1a1a2e;margin-top:60px"><div style="border-top:1px solid #111;max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:#ccc;margin-bottom:8px">BytesAgain</div><div style="color:#555;font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:#666;text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:#666;text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:#666;text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:#666;text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:#666;text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:#666;text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:#666;text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:#666;text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid #111;padding-top:16px"><div style="color:#444;font-size:.8em;margin-bottom:8px">Β© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:#333;font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">πŸ’¬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"LangProvider\"]\n3:I[16988,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\nd:I[68027,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\",1]\n:HL[\"/_next/static/chunks/0u0u2jc_hw-33.css?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-05-14\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"smartsaas-ai\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"smartsaas-ai\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0u0u2jc_hw-33.css?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-3C1MM9FWYF');\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"background\":\"#0a0a1a\",\"color\":\"#e0e0e0\",\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"linear-gradient(90deg,#13103a,#0d0d1f,#13103a)\",\"borderBottom\":\"1px solid #2a2a5a\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"#e2e8f0\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" β€” \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe β†’\"}]]}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"}}],\"$L5\",\"$L6\",\"$L7\"]}]}]]}]]}],{\"children\":[\"$L8\",{\"children\":[\"$L9\",{\"children\":[\"$La\",{},null,false,null]},null,false,\"$@b\"]},null,false,\"$@b\"]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:I[39756,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n10:I[37457,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n11:I[90940,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n12:I[16397,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n14:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n18:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"ViewportBoundary\"]\n1a:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"$L11\",null,{}]\n7:[\"$\",\"$L12\",null,{}]\n8:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[\"$L13\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/13n0i~5jmm-ff.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]]}]\n17:[]\nb:\"$W17\"\nc:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1b\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0u0u2jc_hw-33.css?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1c:I[27201,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"IconMark\"]\n16:null\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"title\",\"0\",{\"children\":\"SmartSaaS β€” AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/smartsaas-ai\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"SmartSaaS β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/smartsaas-ai\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"SmartSaaS β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1c\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1d:T1e26,"])</script><script>self.__next_f.push([1,"\n .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n .two-col { display: flex; gap: 32px; align-items: flex-start; }\n .two-col-main { flex: 1; min-width: 0; }\n .two-col-side { width: 300px; flex-shrink: 0; }\n @media (max-width: 860px) {\n .two-col { flex-direction: column; }\n .two-col-side { width: 100%; }\n }\n .breadcrumb { font-size: .82em; color: #4b5563; margin-bottom: 28px; }\n .breadcrumb a { color: #818cf8; text-decoration: none; }\n .breadcrumb a:hover { text-decoration: underline; }\n .skill-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n .skill-title { font-size: 1.6em; font-weight: 800; color: #f1f5f9; margin: 0 0 4px; line-height: 1.2; }\n .skill-owner { font-size: .82em; color: #4b5563; margin: 0 0 14px; }\n .skill-owner span { color: #818cf8; }\n .skill-desc { font-size: .92em; color: #94a3b8; line-height: 1.65; margin: 0 0 16px; }\n .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid #1e1e3f; }\n .meta-item { display: flex; flex-direction: column; gap: 2px; }\n .meta-label { font-size: .7em; color: #374151; text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n .meta-value { font-size: .92em; color: #94a3b8; font-weight: 600; }\n .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n .tag:hover { background: #6366f125; }\n .install-box { background: #070714; border: 1px solid #1e1e3f; border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid #1e1e3f; }\n .install-dots { display: flex; gap: 6px; }\n .dot { width: 10px; height: 10px; border-radius: 50%; }\n .install-label { font-size: .72em; color: #374151; font-family: monospace; letter-spacing: 1px; }\n .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .install-cmd { font-family: 'Courier New', monospace; font-size: 1em; color: #a5f3fc; }\n .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n .copy-btn:hover { background: #6366f125; }\n .btn-primary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 28px; background: linear-gradient(135deg, #6366f1, #818cf8); border-radius: 10px; color: #fff; text-decoration: none; font-weight: 700; font-size: .95em; transition: opacity .15s; }\n .btn-primary:hover { opacity: .88; }\n .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid #1e1e3f; border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n .actions-row { display: flex; gap: 12px; flex-wrap: wrap; }\n .disclaimer { margin-top: 20px; padding: 14px 18px; background: #070714; border: 1px solid #1a1a3a; border-radius: 10px; font-size: .78em; color: #374151; line-height: 1.7; }\n .disclaimer a { color: #6366f1; }\n .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n .section-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n .section-title { color: #f8fafc; font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n .section-content { font-size: .88em; color: #94a3b8; line-height: 1.7; }\n .next-step-card { background: linear-gradient(135deg, #10102a, #0d0d1f); border: 1px solid #6366f144; border-radius: 16px; padding: 20px; margin: 0 0 20px; }\n .next-step-title { color: #f8fafc; font-size: 1.18em; font-weight: 800; margin: 0 0 8px; }\n .next-step-sub { color: #94a3b8; line-height: 1.65; margin: 0 0 18px; }\n .agent-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(210px,1fr)); gap: 12px; margin-top: 14px; }\n .agent-card { display: block; background: #070714; border: 1px solid #1e1e3f; border-radius: 14px; padding: 16px; text-decoration: none; transition: border-color .15s, transform .15s; }\n .agent-card:hover { border-color: #818cf8; transform: translateY(-1px); }\n .agent-name { color: #f8fafc; font-weight: 800; margin-bottom: 6px; display: flex; justify-content: space-between; gap: 8px; }\n .agent-desc { color: #64748b; font-size: .84em; line-height: 1.55; margin-bottom: 12px; }\n .agent-link { color: #a5b4fc; font-size: .82em; font-weight: 800; }\n .sponsored-pill { color: #fbbf24; background: #fbbf2414; border: 1px solid #fbbf2444; border-radius: 999px; padding: 2px 7px; font-size: .7em; white-space: nowrap; }\n .cta-banner { background: linear-gradient(135deg, #0d0d1f, #13103a); border: 1px solid #6366f133; border-radius: 16px; padding: 24px 28px; display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-top: 8px; }\n .cta-title { font-weight: 700; color: #e2e8f0; margin: 0 0 4px; }\n .cta-sub { color: #4b5563; font-size: .86em; }\n /* Script box */\n .script-box { background: #050510; border: 1px solid #1e1e3f; border-radius: 12px; overflow: hidden; }\n .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: #0a0a1c; border-bottom: 1px solid #1e1e3f; }\n .script-filename { font-size: .72em; color: #4b5563; font-family: 'Courier New', monospace; }\n .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n .script-copy-btn:hover { background: #6366f115; }\n .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: #a5f3fc; overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n /* Articles */\n .article-card { display: block; background: #0f0f23; border: 1px solid #1a1a3e; border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n .article-card:hover { border-color: #6366f1; }\n @media (max-width: 600px) {\n .skill-card { padding: 20px; }\n .skill-title { font-size: 1.5em; }\n .cta-banner { flex-direction: column; align-items: flex-start; }\n }\n "])</script><script>self.__next_f.push([1,"13:[[\"$\",\"style\",null,{\"children\":\"$1d\"}],\"$L1e\",\"$L1f\"]\n"])</script><script>self.__next_f.push([1,"20:I[78297,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/13n0i~5jmm-ff.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n21:I[32109,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/13n0i~5jmm-ff.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n22:Tc9e,"])</script><script>self.__next_f.push([1,"- **Create dataset then add items:** (1) Create with `scripts/create-dataset.sh \"\u003ctitle\u003e\" \"\" '\u003cbodyJson\u003e'` (bodyJson includes dataTitle and dataSchema.fields). (2) Parse the response: use the **top-level `_id`** as folderId. (3) Add each item: `scripts/add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'` (itemJson matches schema). (4) Fetch: `scripts/get-data-content.sh \u003cfolderId\u003e`.\n- **Schema chain:** Run `scripts/get-schema.sh dataset` first to see required/optional fields, then build the body and run `scripts/create-dataset.sh \"My Dataset\" \"\" '\u003cbodyJson\u003e'`.\n- Create a dataset (no items): `scripts/create-dataset.sh \"My Dataset\"`. To allow adding content later, include dataSchema: `scripts/create-dataset.sh \"My Dataset\" \"\" '{\"dataTitle\":\"My Dataset\",\"dataSchema\":{\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}}'`.\n- List datasets: run `scripts/list-datasets.sh`.\n- Create a project: run `scripts/create-project.sh \"Project Alpha\" \"Description\"`.\n- Create a task: run `scripts/create-task.sh \"\u003cprojectId\u003e\" \"\u003cworkPackageId\u003e\" \"Task title\"`.\n- Assign a task: run `scripts/assign-task.sh \"\u003cprojectId\u003e\" \"\u003ctaskId\u003e\" \"\u003cuserId\u003e\"`.\n- List user integrations: run `scripts/list-integrations.sh`.\n- Sync Shopify products: run `scripts/sync-shopify-products.sh`.\n- Refresh user: run `scripts/refresh-user.sh`.\n- Get calendar for a date: run `scripts/get-calendar-content.sh \"2025-03-15\"`.\n- List campaigns: run `scripts/list-active-campaigns.sh`.\n- Start a campaign: run `scripts/start-campaign.sh \"\u003ccampaignId\u003e\"`.\n- Create email template: run `scripts/create-email-template.sh '{\"title\":\"Welcome\",\"subject\":\"Hi\",\"content\":\"...\"}'`.\n- Create webpage template: run `scripts/create-webpage-template.sh '{\"title\":\"Landing\",\"description\":\"...\"}'`.\n- Send test email: run `scripts/send-test-email.sh \"\u003ctemplateId\u003e\" \"user@example.com\" \"Test\"`.\n- List knowledge: `scripts/list-knowledge.sh` or `scripts/list-knowledge.sh 1 10 createdAt desc`. Get one: `scripts/get-knowledge.sh \"\u003cid\u003e\"`. Create: `scripts/create-knowledge.sh '{\"title\":\"My article\",\"content\":\"...\"}'`. Post research: `scripts/post-research.sh '{\"title\":\"Market study\",\"findings\":\"...\"}'`.\n- Dispatch to webhook: run `scripts/dispatch-openclaw-webhook.sh` or `scripts/dispatch-openclaw-webhook.sh '{\"event\":\"cron\",\"job\":\"daily\"}'`.\n- Post event: run `scripts/post-openclaw-event.sh cron '{\"schedule\":\"daily\"}'`.\n- Configure cron: run `scripts/configure-openclaw-cron.sh '{\"schedule\":\"0 9 * * *\",\"payload\":{},\"enabled\":true}'`.\n\n**Schema requirements (valid posts):** Use the **schema chain**: run `get-schema.sh \u003cresource\u003e` before any create/post to retrieve the expected shape, then build the request from that output. Schemas are in this skill's `schemas/` (JSON per resource); they mirror `smartsaas-backend/src/schema/` and repo **SCHEMA_REQUIREMENTS.md**. Use the correct field names (e.g. task_title, campaign_title, dataSchema) when sending full JSON; scripts may accept friendly names and the API may map them.\n\nDo not log or echo the API key. Never ask the user to provide the API key in chat. If the scripts report missing config, tell the user to set `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` in OpenClaw (e.g. in `skills.entries.smartsaas.env` in ~/.openclaw/openclaw.json)."])</script><script>self.__next_f.push([1,"23:T7ebf,"])</script><script>self.__next_f.push([1,"---\nname: smartsaas\ndescription: \"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-dataset.sh (positional only, no --name/--dataset). Run via execute_shell; never curl. Env: SMARTSAAS_BASE_URL, SMARTSAAS_API_KEY.\"\n---\n\n# SmartSaaS Skill\n\n**When the user asks how to install or to install the smartsaas skill:** Do NOT run or suggest `clawhub install smartsaas` or `pwd` then clawhub install. This skill is not installed via clawhub. Tell the user: (1) Add the path to this repo's `skills` folder to `skills.load.extraDirs` in `~/.openclaw/openclaw.json`. (2) Set `skills.entries.smartsaas.env` with `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY`. (3) Restart OpenClaw. The skill is then loaded from that path. Do not run clawhub.\n\n**Create dataset + add items β€” WRONG vs RIGHT (no flags, use schema):**\n- **WRONG:** `create-dataset.sh --name smartsaas-home` (no `--name`; first arg is the title; dataset ends up with wrong title and empty schema). **WRONG:** `add-to-dataset.sh --dataset \u003cid\u003e --name \"Investor 1\" --location \"London\"` (no `--dataset`/`--name`/`--location`).\n- **RIGHT create:** `create-dataset.sh \"investor-list\" \"\" '{\"dataTitle\":\"investor-list\",\"dataSchema\":{\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"notes\",\"type\":\"string\"}]}}'` β€” **Arg1 is always the dataset title** (e.g. \"investor-list\"); the script sends it as dataTitle so the folder is never \"untitled_folder\". Arg2 = **\"\"** for no parent. Arg3 = full JSON with dataTitle and dataSchema.fields.\n- **RIGHT add:** `add-to-dataset.sh 69b66368aa4e413d0ab084b7 '{\"Name\":\"Investor 1\",\"City\":\"London\"}'` β€” first arg = folder _id, second arg = **one JSON object** whose keys match the dataset's dataSchema (e.g. Name, City). No flags. The script sends it as the request body `{\"data\": \u003cthat object\u003e}`. One call per item.\n\n**Add-item shape:** The second argument to add-to-dataset.sh is the **item content object** (keys = field names from the dataset's dataSchema). **Before adding items**, run `get-dataset.sh \u003cfolderId\u003e` to get the folder's dataSchema and use it to build itemJson. Example: if dataSchema has `name`, `notes`, use `'{\"name\":\"John\",\"notes\":\"Investor\"}'`. The script wraps it in `{\"data\": ...}` for the API. No flags.\n\n**Do NOT auto-add items.** Only add items when the user **explicitly asks** to add specific items. If the user only asked to create a dataset (e.g. \"create a dataset called X\"), create it and stop β€” do not proceed to add items or suggest \"shall I add investors?\" or add example data. The **user** defines what to add (if anything). \"Investor-list\" / \"investors from London\" in this doc are syntax examples only, not a directive to add that content.\n\n## Skill summary (for explain / reference)\n\n**What it does:** Interact with SmartSaaS via shell scripts: create datasets, add items, manage projects/tasks, knowledge, campaigns, templates, webhooks. Run scripts with **execute_shell**; do not run or show curl. Do not ask for an API token β€” the key is in the environment.\n\n**Environment:** Scripts read **`SMARTSAAS_BASE_URL`** and **`SMARTSAAS_API_KEY`** (not `SMARTSAAS_API_TOKEN`). Both are required; set in OpenClaw config or system env. Never ask the user to provide the key in chat.\n\n**Scripts (positional args only β€” no `--name`, `--dataset`, `--location`):**\n- **create-dataset.sh** β€” Arg1: dataTitle. Arg2: use **\"\"** for no parent (not the word \"parentId\"). Arg3: bodyJson with **dataTitle** and **dataSchema: {\"fields\":[...]}** (dataSchema must be object with \"fields\", not a string). Example: `create-dataset.sh \"investor-list\" \"\" '{\"dataTitle\":\"investor-list\",\"dataSchema\":{\"fields\":[{\"name\":\"Name\",\"type\":\"string\"},{\"name\":\"City\",\"type\":\"string\"}]}}'`\n- **add-to-dataset.sh** β€” `add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'`. No flags. itemJson = one object with keys matching the dataset's dataSchema (script sends body `{\"data\": itemJson}`). Example: `add-to-dataset.sh 507f1f77bcf86cd799439011 '{\"Name\":\"John Doe\",\"City\":\"London\"}'`\n\n**Example flow:** (1) Run create-dataset.sh with dataTitle and dataSchema. (2) From the response, take the top-level `_id`. (3) Only if the user asked to add items: run **get-dataset.sh** \u003cfolderId\u003e to get dataSchema, then run add-to-dataset.sh with that _id and each item (itemJson keys match dataSchema.fields). Scripts in `skills/smartsaas/scripts/`; use full path if needed.\n\n**Is the skill installed?** This skill is loaded from **extraDirs** (local path in openclaw.json). Do **NOT** suggest `clawhub install smartsaas` when scripts or `ls skills/` appear missing β€” the shell CWD is often not the repo root. **Still run the scripts** using the **full path** (e.g. `\u003cworkspace_root\u003e/skills/smartsaas/scripts/create-dataset.sh`). Do not conclude \"skill not installed\" and suggest clawhub install.\n\n**When the user asks to create a dataset:** If they only asked to create (e.g. \"create a dataset called X\"), run create-dataset.sh and stop; do not add items unless they explicitly asked to add something. If they asked to create and add items, only add what they specified β€” the user defines what to add (if anything). Do NOT reply with \"we need your API token\". Do NOT output curl. Run scripts via execute_shell; the key is in the environment.\n\n**NEVER ask for \"API token\" or \"YOUR_API_TOKEN\". NEVER output curl or api.smartsaas.co.uk. ONLY run the scripts via execute_shell. The key is in env.**\n\n**MANDATORY β€” read first.** You must NOT: use curl; use api.smartsaas.co.uk or api.smartsaas.com; send body `{\"name\":\"investor-list\"}` (API expects dataTitle + dataSchema); ask the user for \"API token\" or \"YOUR_API_TOKEN\". The only way to create a dataset and add items is to call **execute_shell** with the scripts: create-dataset.sh (args: title, \"\", bodyJson with dataTitle+dataSchema), then add-to-dataset.sh (args: the _id from the create response, itemJson). Base URL and API key come from env (openclaw.json); never ask for them in chat.\n\n---\n\n**Quick reference (32k window: read this first)** \n**Installation:** This skill is loaded **locally** via extraDirs in openclaw.json (this repo’s `skills` folder). **Never** run `clawhub install smartsaas` . If `ls skills/` shows nothing or scripts are \"not found\", do NOT suggest clawhub install; use the **full path** to the script (e.g. \u003cworkspace_root\u003e/skills/smartsaas/scripts/create-dataset.sh) or run from workspace root. Do NOT search the web for SmartSaaS API docs.\n\nYou MUST run the **scripts** via **execute_shell** β€” do NOT run or output curl. Do NOT put the API key in chat. Scripts need env: SMARTSAAS_BASE_URL, SMARTSAAS_API_KEY (openclaw.json or system env). Wrong: curl, body {\\\"name\\\":\\\"...\\\"}, /folders/investor-list/items (use folder _id). Right: (1) create-dataset.sh \"title\" \"\" '{\"dataTitle\":\"...\",\"dataSchema\":{...}}' β€” no --name (2) get _id (3) only if user asked to add items: add-to-dataset.sh \u003c_id\u003e '\u003citemJson\u003e' β€” no --dataset/--name/--location. Do NOT auto-add items; user defines what to add.\n\n---\n\nUse this skill when the user asks to create or list datasets, create projects, work packages, tasks, assign tasks, add team members, sync or manage integrations, refresh user data, get favourites, companies, users, calendar, **research knowledge** (list/get/create knowledge articles, post research saved as knowledge), **look up data entries** (contacts, investors, companies, etc.) to add to datasets β€” find or validate entries then add via add-to-dataset.sh β€” start or create campaigns, create or update email templates, create or update website (webpage) templates, post events / configure cron jobs and dispatch to the SmartSaaS OpenClaw webhook.\n\n**Never ask the user for an API key.** The scripts read `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` from the **environment**. If a script fails with \"must be set\", tell the user to set these in OpenClaw config or in the system env (see **Environment** below) β€” not to paste the key in chat.\n\n**You have direct access to the API via the scripts.** Do NOT say \"we don't have direct access\" or \"I will provide you with the API calls\". You MUST run the shell scripts yourself via execute_shell. Do NOT output curl for the user to run.\n\n**Wrong (do not do this):**\n- Do NOT run or output **curl** at all β€” not even with the correct URL or a real API key. You MUST call **execute_shell** with the script; the scripts read URL and key from env. Never put the API key in the chat.\n- Do NOT use body `{\"name\":\"investor-list\"}`. The API expects **dataTitle** and **dataSchema** (for adding items), not \"name\". A 500 or error often means wrong body β€” use the scripts.\n- Do NOT use the dataset **name** in the add-items path. Wrong: `/folders/investor-list/items`. The path must use the **folder _id** (the ObjectId returned from the create call), e.g. `/folders/507f1f77bcf86cd799439011/items`. Run create-dataset.sh first, take the top-level `_id` from the response, then call add-to-dataset.sh with that _id.\n\n**Right:** (1) Create: `create-dataset.sh \"title\" \"\" '{\"dataTitle\":\"...\",\"dataSchema\":{...}}'`. (2) From the output, copy the top-level `_id`. (3) Only if the user asked to add items: for each item they specified, run `add-to-dataset.sh \u003cthat_id\u003e '\u003citemJson\u003e'`. Do not add items the user did not ask for. Do not use curl.\n\n**Scripts use positional args only β€” no flags.** \n- **create-dataset.sh** has no `--name`. Usage: `create-dataset.sh \"\u003cdataTitle\u003e\" [parentId] [bodyJson]`. Example: `create-dataset.sh \"investor-list\" \"\" '{\"dataTitle\":\"investor-list\",\"dataSchema\":{\"fields\":[...]}}'`. \n- **add-to-dataset.sh** has no `--dataset`, `--name`, or `--location`. Usage: `add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'`. Second arg = one JSON object whose **keys match the dataset's dataSchema** (script sends `{\"data\": itemJson}` to the API). Example: `add-to-dataset.sh 507f1f77bcf86cd799439011 '{\"Name\":\"John Doe\",\"City\":\"London\"}'`.\n\n## Required behavior (must follow)\n\n- **Do NOT auto-add items.** Only run add-to-dataset.sh when the user has explicitly asked to add specific items. If they only asked to create a dataset, create it and stop; the user defines what to add (if anything).\n- **Run the scripts, never curl.** You MUST use execute_shell to run the scripts in `skills/smartsaas/scripts/`. Do NOT run or output curl (even with the right URL or key). Creating datasets and adding items is done ONLY by calling create-dataset.sh and add-to-dataset.sh via execute_shell. Do not ask for an API key; do not put the API key in your message.\n- **Do NOT create local files as a substitute.** Do not create a JSON file or any file in the workspace and claim it is \"the dataset\" β€” that does not call the API. That does not create anything in SmartSaaS. Only the scripts (create-dataset.sh, add-to-dataset.sh, etc.) create or update data in SmartSaaS. If the scripts are \"not in the expected location\", run from the workspace root (the directory containing `skills/`) or use the full path to the script; do not fall back to writing a local file. If script execution is blocked (\"not allowed for spawning sub-agents\"), tell the user to enable it in OpenClaw; do not use web_fetch or create local files.\n- **Do NOT ask the user for the API key.** Never say \"If you have an API key, please provide it\" or \"Do you have an API key?\". The API key is configured in OpenClaw (`skills.entries.smartsaas.env.SMARTSAAS_API_KEY`). Run the scripts; they get the key from the environment. If the scripts report \"SMARTSAAS_API_KEY must be set\", tell the user to add it to their OpenClaw skill config (openclaw.json), not to paste it here.\n- **If script execution is disabled or \"not allowed for spawning sub-agents\":** If you get an error that execute_shell is not supported, the tool is not available, or the \"smartsaas agent ID is not allowed for spawning sub-agents\", tell the user: \"The SmartSaaS skill requires script execution (execute_shell) to be enabled for this skill in OpenClaw. Please enable it in your OpenClaw settings so I can run create-dataset.sh and add-to-dataset.sh. See TROUBLESHOOTING.md in the skill repo for 'Agent ID not allowed for spawning sub-agents'.\" Do **not** fall back to web_fetch for documentation or to creating local files or directories β€” that does not create a dataset in SmartSaaS.\n\n## Do NOT (common mistakes)\n\n- **Do NOT ask for the API key.** Do not say \"please provide your API key\", \"do you have an API key?\", or \"if you have an API key we can proceed\". Just run the scripts. The key is in OpenClaw config; only if a script fails with \"must be set\" tell the user to add it to openclaw.json.\n- **Do NOT suggest `clawhub install smartsaas` when the skill or scripts appear missing.** The skill is loaded from extraDirs. If `ls skills/` returns nothing or the scripts dir \"does not exist\", the CWD is likely wrong β€” use the **full path** to the script and still run the scripts.\n- **Do NOT use a generic \"action\" JSON.** There is no API that accepts `{\"action\":\"create-dataset\", \"dataset\":\"...\", \"fields\":[...]}` or `{\"action\":\"create-records\", \"dataset\":\"...\", \"records\":[...]}`. You MUST run the **shell scripts**: `create-dataset.sh` and `add-to-dataset.sh` via execute_shell.\n- **Do NOT create or run** invented script names (e.g. create_dataset.sh, add_investors.sh) β€” they do not exist. Use only the scripts in `skills/smartsaas/scripts/` (create-dataset.sh, add-to-dataset.sh, etc.).\n- **Do NOT use flags** like `--name`, `--dataset`, `--location` with these scripts. They take **positional arguments only**: create-dataset.sh `\u003cdataTitle\u003e` `[parentId]` `[bodyJson]`; add-to-dataset.sh `\u003cfolderId\u003e` `\u003citemJson\u003e` (one JSON object as second arg).\n- **Do NOT use wrong endpoints.** The API is **not** at `POST /datasets` or `POST /datasets/\u003cname\u003e/records`. It is at **POST /api/protected/data/folders** (create dataset) and **POST /api/protected/data/folders/:folderId/items** (add items). Base URL is **SMARTSAAS_BASE_URL** (set in env), not api.smartsaas.co.uk.\n- **Do NOT suggest** `clawhub install smartsaas` to fix \"skill not found\" β€” the skill is installed via extraDirs; when scripts appear missing, use full path to scripts.\n- **Do NOT search the web** for \"SmartSaaS API documentation\" or open smartsaas.com for API docs β€” that is a different product or public site. This skill’s endpoints and flow are in this SKILL.md; use the scripts only.\n- **Do NOT skip running the scripts.** If the scripts \"are not in the expected location\", run from the workspace root (the directory that contains `skills/`) so that `./skills/smartsaas/scripts/create-dataset.sh` works, or use the full path to the script. Do not fall back to \"API calls directly\" with made-up endpoints, curl to the wrong host, or creating a local JSON file instead of calling the API.\n- **Do NOT run or output curl.** Do not run curl yourself or give the user curl commands to run. You MUST call **execute_shell** with the script path and args. Do not put the API key in the message (scripts use env). **Do NOT prefix the script with placeholder env** (e.g. `SMARTSAAS_BASE_URL=https://your-smartsaas-url.com SMARTSAAS_API_KEY=your-api-key`); run the script alone so it uses the process environment. If scripts fail (env missing, HTTP 000), tell the user to set vars in ~/.openclaw/.env and restart OpenClaw; do not fall back to curl.\n\n## Environment (env) β€” required for scripts\n\nThe scripts read **`SMARTSAAS_BASE_URL`** and **`SMARTSAAS_API_KEY`** from the environment. Without them, scripts exit with \"SMARTSAAS_BASE_URL and SMARTSAAS_API_KEY must be set.\"\n\n**NEVER run the script with placeholder values.** Do NOT prefix the command with `SMARTSAAS_BASE_URL=https://your-smartsaas-url.com SMARTSAAS_API_KEY=your-api-key` or any fake URL/key. Run the script **alone** (e.g. `./skills/smartsaas/scripts/create-dataset.sh \"investor-list\" \"\" '{\"dataTitle\":\"investor-list\",\"dataSchema\":{...}}'`) so it uses the **process environment**. If the script then fails with \"must be set\" or connection errors, the sub-agent/shell is not receiving the vars β€” tell the user to set them in **`~/.openclaw/.env`** or export them before starting OpenClaw (see BLOCKED_ENV_FIX.md / TROUBLESHOOTING \"Sub-agent not receiving env vars\").\n\n**Where env can be set (so sub-agents get them):**\n1. **`~/.openclaw/.env`** β€” OpenClaw loads this; best so the process (and any sub-agent shell) has the vars.\n2. **Export before starting OpenClaw** in the same shell: `export SMARTSAAS_BASE_URL=... SMARTSAAS_API_KEY=...` then start OpenClaw.\n3. **OpenClaw skill config:** `~/.openclaw/openclaw.json` β†’ `skills.entries.smartsaas.env` β€” may not be passed to sub-agent shells; if scripts fail with \"must be set\", use (1) or (2).\n\n**If a script fails with \"must be set\" or HTTP 000 / connection errors:** Tell the user the sub-agent is likely not receiving env vars. Have them add `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` to `~/.openclaw/.env` and restart OpenClaw. Do not ask the user to paste the API key in chat.\n\n## Prerequisites\n\n- `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` must be available to the scripts (see **Environment** above). The API key is created in SmartSaaS APIScreen. You do not ask the user for it.\n\n## Schema chain (retrieve schema before posting)\n\n**Before any create or POST request, retrieve the expected shape so the request body matches backend expectations.**\n\n1. Run **`scripts/get-schema.sh \u003cresource\u003e`** to get the schema for that resource. Resources: `dataset`, `data-item`, `project`, `work-package`, `task`, `campaign`, `email-template`, `webpage-template`.\n2. Use the script output (JSON with `fields`, `endpoint`, `createScript`) to build the POST body. Include all required fields and only optional fields you need.\n3. Then run the corresponding create script with the built body (e.g. `scripts/create-dataset.sh` with bodyJson, or `scripts/add-to-dataset.sh` with itemJson).\n\nExample chain for creating a dataset that can hold content: \n`get-schema.sh dataset` β†’ read `dataTitle` (required), `dataSchema` (required when adding content) β†’ \n`create-dataset.sh \"My Dataset\" \"\" '{\"dataTitle\":\"My Dataset\",\"dataSchema\":{\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}}'`\n\nIf you skip the schema step and the backend returns 400 (e.g. missing field or wrong shape), run `get-schema.sh \u003cresource\u003e` and retry with a body that matches.\n\n## Creating a dataset and adding items (two-step flow)\n\nOnly add items when the user **explicitly asked** to add something; they define what to add (if anything). Do not assume or add example data (e.g. \"investors\") unless the user asked for it.\n\nAdding items to a dataset requires the **dataset id** from the create step. Follow this order:\n\n1. **Create the dataset** (with dataSchema so items can be added):\n - Run `scripts/create-dataset.sh \"\u003cdataTitle\u003e\" \"\" '\u003cbodyJson\u003e'` where bodyJson includes `dataTitle` and `dataSchema.fields` for the fields the user wants. Use get-schema.sh dataset first if needed to build the body.\n - The script prints the API response. Response shape: `{ \"success\": true, \"message\": \"Data posted\", \"data\": { \"_id\": \"...\", \"dataTitle\": \"...\", ... }, \"_id\": \"\u003cfolderId\u003e\" }`. **Use the top-level `_id`** as the dataset id (folderId) for add-to-dataset.sh.\n\n2. **Before adding items (recommended):** Run `scripts/get-dataset.sh \u003cfolderId\u003e` to fetch the folder; the response includes **dataSchema** so you can build itemJson with matching field names. If get-dataset.sh returns 404, the backend may not expose GET /folders/:id yet β€” use the dataSchema you used when creating the dataset, or list-datasets.sh and find the folder in the list by _id to read its dataSchema.\n\n3. **Add each item:**\n - Run `scripts/add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'` for each item. `\u003citemJson\u003e` must match the dataset's dataSchema (same field names as in dataSchema.fields). If you didn't create the dataset in this session, run get-dataset.sh first to get the structure.\n\n**Looking up data entries:** You may look up contacts, investors, companies, or other entities (e.g. via web search or other tools) to find or validate data to add as dataset items. That is separate from research/knowledge: use whatever tools you have to gather entries, then add them via add-to-dataset.sh. **Research / knowledge** is different: use list-knowledge.sh, create-knowledge.sh, and post-research.sh to work with knowledge articles and save research as knowledge β€” that does not populate dataset items; it saves findings as knowledge content.\n\nYou cannot add items until the dataset exists and you have its id. Always use the top-level **`_id`** from the create-dataset.sh response as folderId.\n\n**Where to run / why \"scripts directory doesn't exist\":** The shell used by execute_shell often does **not** start in the repo root. So `./skills/smartsaas/scripts/` or `ls skills/smartsaas/scripts/` may fail with \"no such file\" or \"directory does not exist\" because the **current working directory** is elsewhere. Fix: use the **full absolute path** to the script. The scripts live at `\u003crepo_root\u003e/skills/smartsaas/scripts/` where `\u003crepo_root\u003e` is the directory that contains the `skills` folder (e.g. the smartsaas-openclaw-tools repo). Example: `/Users/sarfrazhussain/smartsaas-openclaw-tools/skills/smartsaas/scripts/create-dataset.sh` (adjust if the user's repo is elsewhere). Or run `cd \u003crepo_root\u003e \u0026\u0026 ./skills/smartsaas/scripts/create-dataset.sh ...` with the real path to the repo. Do **not** conclude the scripts are missing; use the full path.\n\n**Do NOT:** Invent script names (e.g. create_dataset.sh, add_investors.sh) or use api.smartsaas.co.uk or `/datasets`. Run only the existing scripts from `skills/smartsaas/scripts/`.\n\n### Example: dataset + items (e.g. \"Investor-List\" with name/email/phone/city/country)\n\nFor \"create dataset X\" only: create and stop. For \"create dataset X and add [specific items]\": create then add only what the user specified. Example syntax for adding (when user asked) β€” dataset with fields Name, Email, Phone, City, Country:\n\n1. Create: `create-dataset.sh \"\u003cTitle\u003e\" \"\" '{\"dataTitle\":\"\u003cTitle\u003e\",\"dataSchema\":{\"fields\":[...]}}'` (replace with user's dataset name and desired fields).\n2. From the output, take the top-level `_id` as folderId.\n3. Before adding items: run `get-dataset.sh \u003cfolderId\u003e` to get the folder's dataSchema so itemJson keys match.\n4. For each item the user asked to add: `add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'` with itemJson keys matching dataSchema.fields.\n\nDo not ask for an API key. Do not create a local file instead of running the scripts.\n\n## Scripts (run via execute_shell)\n\nRun scripts from this skill's `scripts/` directory (or use the full path to each script). All scripts use `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` from the environment (except `get-schema.sh`, which needs no env). **Always report the script's full stdout and stderr to the user** so they can see success messages or errors. For dataset/project names with spaces, pass the title as a single quoted argument (e.g. `scripts/create-dataset.sh \"hello world\"`).\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| **Get schema (run first before create/post)** | `scripts/get-schema.sh` | 1) resource (dataset \\| data-item \\| project \\| work-package \\| task \\| campaign \\| email-template \\| webpage-template). No arg = list resources. |\n| Create dataset | `scripts/create-dataset.sh` | 1) dataTitle (required) 2) parentId (optional) 3) bodyJson (optional: full JSON per Data.mjsβ€”dataTitle, **dataSchema** for content, dataTags, dataType, description, shared, etc.) |\n| Get dataset (folder) by id | `scripts/get-dataset.sh` | 1) folderId. Returns folder including **dataSchema**; run before adding items to get correct structure for itemJson. |\n| Add item to dataset | `scripts/add-to-dataset.sh` | 1) folderId 2) itemJson (keys match dataSchema.fields; use get-dataset.sh first if unsure of structure) |\n| Get dataset content | `scripts/get-data-content.sh` | 1) folderId 2) type (optional: document \\| invoice; omit for dataset + dataContent items). Backend: getDataContent.mjs. |\n| List datasets | `scripts/list-datasets.sh` | 1) parentId (optional) |\n| Create project | `scripts/create-project.sh` | 1) title 2) description (optional). Shape: Projects.mjs |\n| List projects | `scripts/list-projects.sh` | (no args) |\n| Create work package | `scripts/create-work-package.sh` | 1) projectId 2) work_package_title 3) description (optional). Shape: Projects.mjs WorkPackageSchema |\n| Create task | `scripts/create-task.sh` | 1) projectId 2) workPackageId 3) task_title 4) description (optional). Shape: Projects.mjs TaskSchema |\n| Assign task | `scripts/assign-task.sh` | 1) projectId 2) taskId 3) assignedTo (optional) |\n| Add team member | `scripts/add-team-member.sh` | 1) projectId 2) userId 3) role (optional) |\n\n### Integrations (sync with user integrations)\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| List integrations | `scripts/list-integrations.sh` | (no args) |\n| Remove integration | `scripts/remove-integration.sh` | 1) integration name (e.g. gmail, shopify) |\n| Sync Shopify products | `scripts/sync-shopify-products.sh` | (no args) |\n| Get product sync status | `scripts/get-product-sync-status.sh` | 1) dataId |\n| Pull products from integration | `scripts/pull-products-from-integration.sh` | 1) dataId 2) integrationType (e.g. shopify) |\n| Push products to integration | `scripts/push-products-to-integration.sh` | 1) dataId 2) integrationType |\n| Get available integrations | `scripts/get-available-integrations.sh` | (no args) |\n\n### Core tasks (user, favourites, companies, calendar)\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| Refresh user | `scripts/refresh-user.sh` | (no args) |\n| Get data favourites | `scripts/get-data-favourites.sh` | (no args) |\n| Get project favourites | `scripts/get-project-favourites.sh` | (no args) |\n| Get user companies | `scripts/get-user-companies.sh` | (no args) |\n| Get users | `scripts/get-users.sh` | 1) page (optional) 2) pageSize (optional) |\n| Get user hierarchy | `scripts/get-user-hierarchy.sh` | (no args) |\n| Get calendar schema | `scripts/get-calendar-schema.sh` | (no args) |\n| Get calendar content | `scripts/get-calendar-content.sh` | 1) date (e.g. 2025-03-15) |\n\n### Knowledge \u0026 research\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| List knowledge | `scripts/list-knowledge.sh` | 1) page (optional) 2) limit (optional) 3) sortBy (optional) 4) sortOrder (optional). Permission: knowledge:read. |\n| Get knowledge article | `scripts/get-knowledge.sh` | 1) id. Permission: knowledge:read. |\n| Create knowledge article | `scripts/create-knowledge.sh` | 1) articleJson (title, content, featuredImage, …). Permission: knowledge:write. |\n| Post research (saved as knowledge) | `scripts/post-research.sh` | 1) researchJson (title, findings/content/summary, source, url, …). Adapter maps to knowledge. Permission: knowledge:write. |\n\n### Campaigns\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| List active campaigns | `scripts/list-active-campaigns.sh` | (no args) |\n| Create campaign | `scripts/create-campaign.sh` | 1) campaignJson (campaign_title, stages, etc.) 2) userId (optional). Shape: SalesSchemas/Campaign.mjs |\n| Start campaign | `scripts/start-campaign.sh` | 1) campaignId |\n\n### Email templates\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| List email templates | `scripts/list-email-templates.sh` | (no args) |\n| Create email template | `scripts/create-email-template.sh` | 1) templateJson (title required; content, description, tags). Shape: TemplateModels/Email.mjs |\n| Update email template | `scripts/update-email-template.sh` | 1) templateJson (_id required; title, content, description, etc.) |\n| Send test email | `scripts/send-test-email.sh` | 1) templateId 2) toEmail 3) subject (optional) |\n\n### Website (webpage) templates\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| List webpage templates | `scripts/list-webpage-templates.sh` | (no args) |\n| Create webpage template | `scripts/create-webpage-template.sh` | 1) templateJson (title required; description, content, urlSlug, isPublished). Shape: TemplateModels/Webpage.mjs |\n| Update webpage template | `scripts/update-webpage-template.sh` | 1) templateJson (_id required; title, description, content, isPublished, urlSlug) |\n\n### Events \u0026 webhook (cron, dispatch)\n\n| Action | Script | Arguments / usage |\n|--------|--------|-------------------|\n| Dispatch to OpenClaw webhook | `scripts/dispatch-openclaw-webhook.sh` | 1) optional JSON payload (default: ping event) |\n| Post event to webhook | `scripts/post-openclaw-event.sh` | 1) eventType (e.g. cron, daily_sync) 2) optional JSON payload |\n| Configure cron / schedule | `scripts/configure-openclaw-cron.sh` | 1) config JSON (schedule, payload, enabled, etc.) |\n\nWebhook URL: `{SMARTSAAS_BASE_URL}/api/protected/openclaw/webhook`. Use for cron jobs, scheduled tasks, or custom event dispatch.\n\n## Examples\n\n- **Create dataset then add items:** (1) Create with `scripts/create-dataset.sh \"\u003ctitle\u003e\" \"\" '\u003cbodyJson\u003e'` (bodyJson includes dataTitle and dataSchema.fields). (2) Parse the response: use the **top-level `_id`** as folderId. (3) Add each item: `scripts/add-to-dataset.sh \u003cfolderId\u003e '\u003citemJson\u003e'` (itemJson matches schema). (4) Fetch: `scripts/get-data-content.sh \u003cfolderId\u003e`.\n- **Schema chain:** Run `scripts/get-schema.sh dataset` first to see required/optional fields, then build the body and run `scripts/create-dataset.sh \"My Dataset\" \"\" '\u003cbodyJson\u003e'`.\n- Create a dataset (no items): `scripts/create-dataset.sh \"My Dataset\"`. To allow adding content later, include dataSchema: `scripts/create-dataset.sh \"My Dataset\" \"\" '{\"dataTitle\":\"My Dataset\",\"dataSchema\":{\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}}'`.\n- List datasets: run `scripts/list-datasets.sh`.\n- Create a project: run `scripts/create-project.sh \"Project Alpha\" \"Description\"`.\n- Create a task: run `scripts/create-task.sh \"\u003cprojectId\u003e\" \"\u003cworkPackageId\u003e\" \"Task title\"`.\n- Assign a task: run `scripts/assign-task.sh \"\u003cprojectId\u003e\" \"\u003ctaskId\u003e\" \"\u003cuserId\u003e\"`.\n- List user integrations: run `scripts/list-integrations.sh`.\n- Sync Shopify products: run `scripts/sync-shopify-products.sh`.\n- Refresh user: run `scripts/refresh-user.sh`.\n- Get calendar for a date: run `scripts/get-calendar-content.sh \"2025-03-15\"`.\n- List campaigns: run `scripts/list-active-campaigns.sh`.\n- Start a campaign: run `scripts/start-campaign.sh \"\u003ccampaignId\u003e\"`.\n- Create email template: run `scripts/create-email-template.sh '{\"title\":\"Welcome\",\"subject\":\"Hi\",\"content\":\"...\"}'`.\n- Create webpage template: run `scripts/create-webpage-template.sh '{\"title\":\"Landing\",\"description\":\"...\"}'`.\n- Send test email: run `scripts/send-test-email.sh \"\u003ctemplateId\u003e\" \"user@example.com\" \"Test\"`.\n- List knowledge: `scripts/list-knowledge.sh` or `scripts/list-knowledge.sh 1 10 createdAt desc`. Get one: `scripts/get-knowledge.sh \"\u003cid\u003e\"`. Create: `scripts/create-knowledge.sh '{\"title\":\"My article\",\"content\":\"...\"}'`. Post research: `scripts/post-research.sh '{\"title\":\"Market study\",\"findings\":\"...\"}'`.\n- Dispatch to webhook: run `scripts/dispatch-openclaw-webhook.sh` or `scripts/dispatch-openclaw-webhook.sh '{\"event\":\"cron\",\"job\":\"daily\"}'`.\n- Post event: run `scripts/post-openclaw-event.sh cron '{\"schedule\":\"daily\"}'`.\n- Configure cron: run `scripts/configure-openclaw-cron.sh '{\"schedule\":\"0 9 * * *\",\"payload\":{},\"enabled\":true}'`.\n\n**Schema requirements (valid posts):** Use the **schema chain**: run `get-schema.sh \u003cresource\u003e` before any create/post to retrieve the expected shape, then build the request from that output. Schemas are in this skill's `schemas/` (JSON per resource); they mirror `smartsaas-backend/src/schema/` and repo **SCHEMA_REQUIREMENTS.md**. Use the correct field names (e.g. task_title, campaign_title, dataSchema) when sending full JSON; scripts may accept friendly names and the API may map them.\n\nDo not log or echo the API key. Never ask the user to provide the API key in chat. If the scripts report missing config, tell the user to set `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` in OpenClaw (e.g. in `skills.entries.smartsaas.env` in ~/.openclaw/openclaw.json).\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"SmartSaaS\\\",\\\"description\\\":\\\"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/smartsaas-ai\\\",\\\"applicationCategory\\\":\\\"clawhub\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" β€Ί \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" β€Ί \",\"SmartSaaS\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"πŸ¦€\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L20\",null,{\"slug\":\"smartsaas-ai\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"SmartSaaS\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"smartsaas\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"Install via extraDirs (not clawhub). Never auto-add items: only add when user explicitly asks; user defines what to add. Scripts: create-dataset.sh, add-to-d...\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"1.0.0\"]}]]}],false,false,false,false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"clawhub\",{\"href\":\"/?q=clawhub\",\"className\":\"tag\",\"children\":[\"#\",\"clawhub\"]}]]}]]}],[\"$\",\"$L21\",null,{\"slug\":\"smartsaas-ai\",\"owner\":\"smartsaas\",\"sections\":{\"examples\":\"$22\",\"configuration\":\"- `SMARTSAAS_BASE_URL` and `SMARTSAAS_API_KEY` must be available to the scripts (see **Environment** above). The API key is created in SmartSaaS APIScreen. You do not ask the user for it.\",\"tips\":null,\"when_to_use\":null,\"core_types\":null,\"constraints\":null,\"script\":null},\"fullDesc\":\"$23\"}],\"$L24\"]}],\"$L25\",null,false,\"$L26\",\"$L27\",false]}],\"$L28\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n btn.addEventListener('click', () =\u003e {\\n const cmd = btn.getAttribute('data-cmd');\\n if (!cmd) return;\\n navigator.clipboard.writeText(cmd).then(() =\u003e {\\n const orig = btn.textContent;\\n btn.textContent = 'Copied!';\\n setTimeout(() =\u003e btn.textContent = orig, 1500);\\n }).catch(() =\u003e {});\\n });\\n });\\n \"}}]\n"])</script><script>self.__next_f.push([1,"29:I[71521,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\",\"/_next/static/chunks/13n0i~5jmm-ff.js?dpl=dpl_A2hgSD3MeXFzVLary6X9Y4AbeWfD\"],\"default\"]\n24:[\"$\",\"div\",null,{\"className\":\"actions-row\",\"style\":{\"marginTop\":8,\"marginBottom\":4,\"gap\":8},\"children\":[[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/smartsaas/smartsaas-ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid #1e1e3f\",\"color\":\"#6b7280\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\"]}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install smartsaas-ai\",\"style\":{\"background\":\"linear-gradient(135deg, #22c55e22, #16a34a22)\",\"color\":\"#22c55e\",\"border\":\"1px solid #22c55e33\",\"borderRadius\":8,\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"cursor\":\"pointer\",\"whiteSpace\":\"nowrap\",\"fontWeight\":700},\"children\":\"πŸ“‹ Copy install\"}]]}]\n25:[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install smartsaas-ai\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install smartsaas-ai\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"section\",null,{\"className\":\"next-step-card\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"next-step-title\",\"children\":\"πŸ§ͺ Use this skill with your agent\"}],[\"$\",\"p\",null,{\"className\":\"next-step-sub\",\"children\":\"Most visitors already have an agent. Pick your environment, install or copy the workflow, then run the smoke-test prompt above.\"}],[\"$\",\"div\",null,{\"className\":\"agent-grid\",\"children\":[[\"$\",\"a\",\"Manus\",{\"className\":\"agent-card\",\"href\":\"https://manus.im/invitation/PAN0HWLUJPLKA?utm_source=bytesagain\u0026utm_medium=skill_page\u0026utm_campaign=agent_cta\",\"target\":\"_blank\",\"rel\":\"sponsored noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Manus\"}],[\"$\",\"span\",null,{\"className\":\"sponsored-pill\",\"children\":\"invite\"}]]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"Task-oriented agent. Great for testing AI skills end-to-end.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Try Manus\",\" β†’\"]}]]}],[\"$\",\"a\",\"OpenClaw\",{\"className\":\"agent-card\",\"href\":\"/install\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"OpenClaw\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"Local-first agent. Install skills via ClawHub CLI.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Set up OpenClaw\",\" β†’\"]}]]}],[\"$\",\"a\",\"Claude Code\",{\"className\":\"agent-card\",\"href\":\"https://code.claude.com/docs\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Claude Code\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"Anthropic's coding agent. Paste the prompt or SKILL.md into your session.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Claude Code docs\",\" β†’\"]}]]}],[\"$\",\"a\",\"Cursor\",{\"className\":\"agent-card\",\"href\":\"https://cursor.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Cursor\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"AI-powered IDE. Use the smoke-test prompt in Cursor Agent.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Open Cursor\",\" β†’\"]}]]}],[\"$\",\"a\",\"Continue.dev\",{\"className\":\"agent-card\",\"href\":\"https://docs.continue.dev/customize/tools\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Continue.dev\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"Open-source AI code assistant. Add SKILL.md as a custom tool.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Continue docs\",\" β†’\"]}]]}],[\"$\",\"a\",\"Windsurf\",{\"className\":\"agent-card\",\"href\":\"https://codeium.com/windsurf\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Windsurf\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"Agentic IDE by Codeium. Paste the prompt into Cascade.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Try Windsurf\",\" β†’\"]}]]}],[\"$\",\"a\",\"Cline\",{\"className\":\"agent-card\",\"href\":\"https://github.com/cline/cline\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Cline\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"VS Code extension for autonomous coding with MCP tools.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Cline on GitHub\",\" β†’\"]}]]}],[\"$\",\"a\",\"Copilot Workspace\",{\"className\":\"agent-card\",\"href\":\"https://github.com/features/copilot\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"div\",null,{\"className\":\"agent-name\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Copilot Workspace\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"agent-desc\",\"children\":\"GitHub's AI dev environment. Suitable for code-generation skills.\"}],[\"$\",\"div\",null,{\"className\":\"agent-link\",\"children\":[\"Copilot Workspace\",\" β†’\"]}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"27:[\"$\",\"div\",null,{\"className\":\"cta-banner\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"cta-title\",\"children\":\"πŸ” Can't find the right skill?\"}],[\"$\",\"p\",null,{\"className\":\"cta-sub\",\"children\":\"Search 60,000+ AI agent skills β€” free, no login needed.\"}]]}],[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"btn-primary\",\"style\":{\"fontSize\":\".88em\",\"padding\":\"10px 22px\"},\"children\":\"Search Skills β†’\"}]]}]\n28:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L29\",null,{\"category\":\"clawhub\",\"currentSlug\":\"smartsaas-ai\",\"name\":\"SmartSaaS\",\"tags\":[\"clawhub\"]}]}]\n"])</script></body></html>