Samvida — Agentic Contracts for Your Business
Overview
This skill crawls a business website, extracts structured information, and generates a properly formatted llms.txt file — the standard that makes any business readable and transactable by AI agents.
It follows the llmstxt.org specification with business-specific extensions:
- -
## Team — builds agent trust in the people behind the business - INLINECODE2 — social proof for agent decision-making
- INLINECODE3 — how agents can interact (or a clear "coming soon" notice)
Read references/llms_txt_spec.md before generating any output.
Workflow
Step 1 — Get the URL
If the user didn't provide a URL, ask:
"What's the website URL?"
Normalize it (add https:// if missing).
Step 2 — Crawl
Run the crawler:
CODEBLOCK0
Read /tmp/llms_business_info.json. Note:
- - What pages were crawled
- What was found vs missing (team, pricing, testimonials, API)
- Whether an existing
llms.txt was found
Tell the user briefly:
"Crawled {domain} ({N} pages). Found: {what was found}. I'll ask about a few things I couldn't determine."
If the crawl found an existing llms.txt, note it:
"I noticed you already have a llms.txt at {domain}/llms.txt. I'll generate a fresh one — you can compare and decide which to keep."
Step 3 — Ask for additional sources (always ask this first)
"Are there any other pages I should read? (docs, API reference, existing llms.txt, press page — anything useful)"
If they provide URLs, re-run the crawl with those extras:
CODEBLOCK1
If they say no/skip, continue.
Step 4 — Generate Pass 1 draft + gap report
Generate a draft llms.txt now using what you have from the crawl. Use all heuristic signals (team_found, testimonials_found, pricing_found, etc.) and the raw_text_summary.
Write the draft. For any section you couldn't populate confidently, use a clear [NOT FOUND] placeholder.
Then show it to the user with a gap report:
"Here's a first draft of your llms.txt:
> {draft}
>
Found automatically: {brief list — e.g. emails, pricing page, testimonials from Wybrid + Cital}
Couldn't determine: {brief list — e.g. team, pricing figures, API}
Two questions to start:
- 1. {Most important gap — e.g. "Who's on the founding team? Names, roles, and an email if you're comfortable."}
- {Second most important — e.g. "What's your pricing model? Even a rough description — per-candidate, subscription, etc."}
_(I have a few more after these. Also — say 'dig deeper' if you'd rather I try to find it myself.)"
Step 4b — Handle "dig deeper" (Pass 2)
If the user says "dig deeper" (or similar — "try again", "re-crawl", "look harder"):
Re-run the crawl in deep mode:
CODEBLOCK3
This returns pages_raw — the full raw text of every crawled page. Use it to extract structure with the LLM. In your generation prompt (Step 5), add:
CODEBLOCK4
Tell the user:
"Doing a deeper crawl — this takes a bit longer but I'll extract everything I can from the raw page content."
After Pass 2, show the updated draft with the same gap report format. Whatever still can't be found, ask the user directly.
Step 5 — Conversational gap-filling (for anything still missing)
Ask questions one at a time — only for things still [NOT FOUND] after Pass 1/2. Wait for each answer. Stop as soon as you have enough to finalize.
Use your judgment — if the user has already filled most gaps conversationally, skip remaining questions and generate.
Q1 — Core value for agents (always ask):
"In one or two sentences: what should an AI agent understand about what it can do or get by working with {domain}?"
Q2 — Team (ask if team not found in crawl):
"I didn't find team info publicly. Want to add a Team section? It helps agents trust who's behind the business. Just names, roles, and emails if you're comfortable."
Q3 — Clients / testimonials (ask if not found):
"Any existing clients or testimonials I can include? Even a couple of company names or a one-line quote builds agent trust. Totally optional."
Q4 — API / integration (ask if api_found=false):
"Is there a public API or docs page agents can reference? (skip if not applicable)"
Q5 — Pricing (ask if pricing_found=false):
"What's the pricing model? Even a rough description helps — like 'per assessment' or 'monthly subscription'."
Q6 — ICP / agent-buyers (ask if not obvious from context):
"Who are the kinds of agents or automated systems most likely to want to work with you? (e.g. HR bots, recruiting pipelines)"
Q7 — Anything else (optional, ask last):
"Anything else agents should know before working with you? (geographic limits, onboarding steps, etc.)"
Step 6 — Generate final llms.txt
Read references/llms_txt_spec.md now if you haven't already.
Generate the complete llms.txt using ALL information gathered:
- - The crawled
business_info JSON (and pages_raw if deep mode ran) - The user's answers from the conversation
- The spec from INLINECODE20
Generation rules:
- 1. Follow the spec format exactly: H1 title → blockquote summary → H2 sections → named links
- Every bullet =
- [Title](url): description — no plain text bullets - Section order: Services → Team → Clients & Testimonials → Compliance → Reviews → For Agents → Pricing → API → Links → Optional
## Team: Always include. Use crawled/user-provided data. If none available, omit silently.## Clients & Testimonials: Always try to include. Structure:
- ICP bullets first (who the business serves)
- Then a
### subsection per named client where you have a real quote or case study detail
- Each subsection: blockquote with verbatim/lightly-cleaned quote, optional Problem: and Outcome: lines
- If you only have a name + one-liner with no detail, a single bullet is fine
- Never invent quotes or outcomes
- 6.
## Compliance: Include if any certifications or standards (SOC 2, ISO 27001, GDPR, HIPAA, etc.) are mentioned anywhere on the site or by the user. Omit if none found. ## Reviews: Include if any third-party ratings, scores, awards, or recognitions (G2, ProductHunt, Trustpilot, Gartner, Capterra, Forbes, YC, etc.) are mentioned. Omit if none found.## For Agents: ALWAYS include. If no API info: add the "coming soon" notice + contact email. Never skip.## Pricing: If unknown, link to pricing page with no summary. If no pricing page, omit.## API: Document URL only — no auth details, no secrets.## Optional: FAQs, blog, case studies, anything supplementary.- Do NOT invent facts. If something is unknown and user didn't provide it, either omit it or note it clearly.
- Keep it tight — this is for agents, not humans. No marketing fluff.
Write the final llms.txt to /tmp/samvida_llms.txt.
Step 7 — Show and confirm
Show the full llms.txt to the user in a code block, then ask:
"Here's your llms.txt 👆
Does this look right? You can:
- - Tell me what to change
- Say 'save' to download it
- Say 'deploy' when you're ready to push it live (Phase 2)"
Step 8 — Handle revisions
If the user asks for changes, make them and show the updated version. Repeat until satisfied.
If they say 'save': tell them the file is at /tmp/samvida_llms.txt and they can copy it to their project.
If they say 'deploy': proceed to Step 9.
Step 9 — Deploy
If an existing llms.txt was found during crawl, warn first:
"⚠️ I found an existing llms.txt at {domain}/llms.txt. Deploying will replace it. Want to see a diff first, or go ahead?"
Show a simple diff if requested (old vs new, first 20 lines each).
First, detect the platform — check the crawl data for CMS detection, or ask:
"Which platform is {domain} hosted on? (Webflow / Framer / Cloudflare / other)"
Then follow the relevant path below.
9a — Cloudflare Workers (any site with Cloudflare DNS)
Best for: any site whose DNS goes through Cloudflare (the orange cloud ☁️ is enabled).
"To deploy to {domain}/llms.txt via Cloudflare Workers, I need 3 things:
- 1. API Token — Cloudflare dashboard → My Profile → API Tokens → Create Token → 'Edit Cloudflare Workers' template
- Account ID — top-right of your Cloudflare dashboard
- Zone ID — Cloudflare dashboard → click your domain → right sidebar under 'API'
These are only used for this deployment and never stored."
CODEBLOCK5
9b — Webflow (fully automated)
Best for: sites hosted on Webflow (webflow.io or custom domain via Webflow hosting).
"To deploy to Webflow, I need your Webflow Site API Token:
Webflow dashboard → your site → Site Settings → Integrations → API Access → Generate API Token
Scopes to enable: Assets (Read/Write), Sites (Read), Redirects (Read/Write), Publishing (Publish)
Optionally: your Site ID (visible in the Webflow dashboard URL — auto-detected if omitted)."
CODEBLOCK6
How it works: Uploads llms.txt to Webflow's CDN → adds a 301 redirect /llms.txt → CDN URL → publishes. Agents follow the redirect transparently.
Note: Redirect API requires Webflow Basic plan or above. If the user is on Starter, Samvida will output manual redirect steps.
9c — Framer (instructions-only)
Framer has no public REST API for file hosting or redirect management. No credentials needed — just run the script and relay the output.
CODEBLOCK7
The script outputs three options (A/B/C) with step-by-step instructions and prints the full llms.txt content for the user to save. Relay all of it clearly to the user.
9d — CMS detected (Cloudflare Worker deployed but CMS takes priority)
On CMS detected (output contains SAMVIDA_CMS:{name}):
"The Worker deployed successfully, but {CMS} is serving /llms.txt directly from their servers — so it takes priority over the Worker.
Run the right deploy command for your platform:
{paste the CMS-specific instructions from the script output}
On any error: relay the script's human-readable error message directly with a suggested fix.
Notes
- - Existing llms.txt: If the crawl found one, mention it early: "I noticed you already have a llms.txt. I'll generate a fresh one — you can compare and decide which to keep."
- Anchor-only links (e.g.
/#section): Skip for Level 2 crawling — they don't load new content. - The For Agents section is mandatory — even if empty of details, it signals intent to support agents and provides a contact path.
- Never ask all questions at once — it's a conversation, not a form.
Samvida — 面向您业务的智能合约
概述
该技能会爬取企业网站,提取结构化信息,并生成格式规范的 llms.txt 文件——这一标准使任何企业都能被AI智能体读取和交易。
它遵循 llmstxt.org 规范,并包含业务专属扩展:
- - ## 团队 — 帮助智能体建立对企业背后人员的信任
- ## 客户与评价 — 为智能体决策提供社会证明
- ## 面向智能体 — 智能体如何交互(或明确的即将推出提示)
在生成任何输出前,请先阅读 references/llmstxtspec.md。
工作流程
步骤1 — 获取URL
如果用户未提供URL,请询问:
网站URL是什么?
规范化处理(若缺少则添加 https://)。
步骤2 — 爬取
运行爬虫:
bash
~/.virtualenvs/samvida/bin/python3 \
~/.openclaw/workspace/samvida/scripts/crawl.py \
{url} > /tmp/llmsbusinessinfo.json
读取 /tmp/llmsbusinessinfo.json。注意:
- - 爬取了哪些页面
- 找到了什么,缺少什么(团队、定价、评价、API)
- 是否找到现有的 llms.txt
简要告知用户:
已爬取 {domain}(共 {N} 个页面)。找到:{找到的内容}。我将就一些无法确定的内容进行询问。
如果爬取发现已有 llms.txt,请注明:
我注意到您在 {domain}/llms.txt 已有一个 llms.txt。我将生成一份全新的——您可以对比后决定保留哪个。
步骤3 — 询问额外来源(始终先问这个)
还有其他我应该阅读的页面吗?(文档、API参考、现有llms.txt、新闻页面——任何有用的内容)
如果用户提供URL,使用这些额外内容重新运行爬取:
bash
~/.virtualenvs/samvida/bin/python3 \
~/.openclaw/workspace/samvida/scripts/crawl.py \
{url} {extraurl1} {extraurl2} > /tmp/llmsbusinessinfo.json
如果用户说没有/跳过,则继续。
步骤4 — 生成初稿 + 差距报告
使用爬取获得的内容立即生成一份llms.txt草稿。使用所有启发式信号(teamfound、testimonialsfound、pricingfound等)和 rawtext_summary。
撰写草稿。对于任何无法自信填充的部分,使用清晰的 [NOT FOUND] 占位符。
然后向用户展示草稿并附上差距报告:
这是您的llms.txt初稿:
{draft}
自动找到的内容: {简要列表——例如邮箱、定价页面、来自Wybrid和Cital的评价}
无法确定的内容: {简要列表——例如团队、定价数据、API}
先问两个问题:
- 1. {最重要的差距——例如创始团队有哪些人?姓名、角色,如果方便的话还有邮箱。}
- {第二重要的——例如您的定价模式是什么?即使是大致描述——按候选人、订阅制等。}
_(之后还有几个问题。另外——如果您希望我自己尝试查找,请说深入挖掘。)
步骤4b — 处理深入挖掘(第二轮)
如果用户说深入挖掘(或类似说法——再试一次、重新爬取、更仔细查找):
以深度模式重新运行爬取:
bash
~/.virtualenvs/samvida/bin/python3 \
~/.openclaw/workspace/samvida/scripts/crawl.py \
{url} {extraurls} --deep > /tmp/llmsbusiness_info.json
这会返回 pages_raw——每个爬取页面的完整原始文本。使用LLM从中提取结构。在您的生成提示(步骤5)中,添加:
除了启发式信号外,以下是每个爬取页面的完整原始文本。
直接从这些文本中提取团队成员、评价、定价详情和任何API信息。
首页原始文本:
{pagesraw[homepageurl]}
团队页面原始文本(如有):
{pagesraw[teamurl]}
定价页面原始文本(如有):
{pagesraw[pricingurl]}
告知用户:
正在进行更深入的爬取——这会花稍长一些时间,但我会从页面原始内容中提取所有我能找到的信息。
第二轮后,使用相同的差距报告格式展示更新后的草稿。对于仍然无法找到的内容,直接询问用户。
步骤5 — 对话式差距填补(针对仍然缺失的内容)
一次只问一个问题——仅针对第一/二轮后仍为 [NOT FOUND] 的内容。等待每个回答。一旦拥有足够信息完成定稿,立即停止。
运用您的判断力——如果用户已经通过对话填补了大部分差距,跳过剩余问题并直接生成。
问题1 — 面向智能体的核心价值(始终询问):
用一两句话说明:AI智能体通过与{domain}合作,应该了解它能做什么或获得什么?
问题2 — 团队(如果爬取未找到团队信息则询问):
我没有在公开信息中找到团队信息。想要添加一个团队部分吗?这有助于智能体信任企业背后的人员。只需姓名、角色,如果方便的话还有邮箱。
问题3 — 客户/评价(如果未找到则询问):
是否有现有客户或评价可以包含?即使只是几个公司名称或一句引用也能建立智能体的信任。完全可选。
问题4 — API/集成(如果api_found=false则询问):
是否有公共API或文档页面供智能体参考?(如不适用请跳过)
问题5 — 定价(如果pricing_found=false则询问):
定价模式是什么?即使是大致描述也有帮助——比如按评估收费或月度订阅。
问题6 — ICP/智能体买家(如果从上下文中不明显则询问):
哪类智能体或自动化系统最有可能希望与您合作?(例如HR机器人、招聘管道)
问题7 — 其他内容(可选,最后询问):
智能体在与您合作前还需要了解什么吗?(地理限制、入门步骤等)
步骤6 — 生成最终llms.txt
如果尚未阅读,请立即阅读 references/llmstxtspec.md。
使用收集到的所有信息生成完整的 llms.txt:
- - 爬取的 businessinfo JSON(如果运行了深度模式,还包括 pagesraw)
- 用户对话中的回答
- references/llmstxtspec.md 中的规范
生成规则:
- 1. 严格遵循规范格式:H1标题 → 引用摘要 → H2部分 → 命名链接
- 每个项目符号 = - Title: description — 无纯文本项目符号
- 部分顺序:服务 → 团队 → 客户与评价 → 合规 → 评价 → 面向智能体 → 定价 → API → 链接 → 可选
- ## 团队:始终包含。使用爬取/用户提供的数据。如果没有任何可用信息,则静默省略。
- ## 客户与评价:始终尝试包含。结构:
- 首先列出ICP项目符号(企业服务的对象)
- 然后为每个有真实引用或案例研究详情的命名客户添加 ### 子部分
- 每个子部分:包含逐字/轻度清理的引用的引用块,可选的问题:和结果:行
- 如果只有名称+一句话且无详情,单个项目符号即可
- 切勿编造引用或结果
- 6. ## 合规:如果网站或用户提及任何认证或标准(SOC 2、ISO 27001、GDPR、HIPAA等),则包含。如果未找到则省略。
- ## 评价:如果提及任何第三方评级、评分、奖项或认可(G2、ProductHunt、Trustpilot、Gartner、Capterra、Forbes、YC等),则包含。如果未找到则省略。
- ## 面向智能体:始终包含。如果没有API信息:添加即将推出提示+联系邮箱。切勿跳过。
- ## 定价:如果未知,链接到定价页面,不附摘要。如果没有定价页面,则省略。
- ## API:仅记录URL——无认证详情,无密钥。
- ## 可选:常见问题、博客、案例研究、任何补充内容。
- 不要编造事实。如果某内容未知且用户未提供,要么省略,要么清晰注明。
- 保持简洁——这是为智能