| name | protocol-info-crawler |
| description | Focused sub-skill selected by protocol-info-router for creating or recrawling DeFi yield/earn protocol metadata into a schema-validated EarnProtocolInfo record. Use after the router chooses the new-crawl path. Do not use for existing-record maintenance, queue orchestration, token prices, on-chain data, or generic web research. |
| user-invocable | false |
Protocol-info dispatcher
This is a focused sub-skill. If you arrived here directly and the request is
about existing records or batch orchestration, switch to the protocol-info-router
router skill first.
The user wants to create or recrawl one canonical EarnProtocolInfo record for a DeFi earn/yield/staking protocol. Use the bundled /protocol-info:protocol-info slash command for full crawls.
Canonical output is out/<slug>/record.json. Translated/import artifacts are regenerated by the tool. Version history lives in the nested out/.git repo; do not invent run-id paths.
Your job
Translate the user's natural language into one /protocol-info:protocol-info invocation. Do not shell out to run.sh directly and do not substitute WebFetch / WebSearch for this tool's crawl, analyze, refresh, or i18n workflows.
Full crawl flag mapping
Use full crawl flags when the user asks to create or recrawl a protocol from scratch.
| What the user said | Flag |
|---|
| Protocol's branded display name | --display-name "..." required |
| Custom kebab slug the user provided | --slug <kebab> |
| Extra context (chain, category, focus) | --hints "..." |
| Explicit RootData project id | --rootdata-id <N> |
| Multiple protocols in one request | --batch separator between each group |
| "全部翻译" / "translate all" / "19 种语言" | --i18n all |
| Specific locales listed, e.g. "中日英" | --i18n zh_CN,ja_JP,en_US |
| "不要翻译" / "skip i18n" / no mention | --i18n none |
| >=3 providers, or user asks for speed/parallelism | --parallel min(N_providers, 4) |
| User explicitly says to overwrite dirty existing output | --force-overwrite |
Do not pass a protocol type flag. record.type is inferred by the metadata
subtask from evidence. If the user provides category language such as
"fixed-rate", "simple earn", "staking", "PT/YT", or "vault", keep it only as
plain research context in --hints when it materially helps disambiguate the
protocol.
Logo fields are tool-managed. Do not ask the model to invent logo CDN paths:
providerLogoUrl, members[].avatarUrl, and audits.items[].auditorLogoUrl
are normalized and rehosted under out/protocol-logo/,
out/protocol-member-logo/, and out/audit-logo/. Member avatars are resolved
from RootData project candidates first, then direct RootData person search, then
paid Unavatar from verified social links or handle-like pseudonyms. Audit firm
logos prefer the current/manual value, then local cache/cross-protocol records,
then exact RootData project search; RootData GitHub links can be used as a paid
Unavatar fallback. If no source is found the JSON field remains null.
Never use placeholder text in members[].oneLiner. If a member has no
verifiable prior experience/source-backed bio, write null; values like
Unverified, TBD, N/A, 暂未提供, or "fill this later" are invalid and will
be normalized back to null.
Locale code cheat sheet
bn 孟加拉 · de 德 · en_US 英(美) · es 西 · fr_FR 法 · hi_IN 印地 · id 印尼 · it_IT 意 · ja_JP 日 · ko_KR 韩 · pt 葡 · pt_BR 葡(巴) · ru 俄 · th_TH 泰 · uk_UA 乌 · vi 越 · zh_CN 简中 · zh_HK 繁中(港) · zh_TW 繁中(台)
Clarification rules
Ask ONE short question, then act. Never ask more than one.
- If a protocol name is ambiguous, ask which protocol or slug the user means.
- If locale list is explicit, map literally. If locale list is vague, default to
zh_CN,en_US,ja_JP,ko_KR and say that choice once.
Dispatch examples
"帮我抓一份 Pendle 的 protocol-info, 翻成中日英"
/protocol-info:protocol-info --display-name "Pendle" --i18n zh_CN,ja_JP,en_US
"批量爬 Morpho 和 Aave 的 earn 信息, 不用翻译"
/protocol-info:protocol-info --parallel 2 --i18n none --batch --display-name "Morpho" --batch --display-name "Aave"
After the command returns
The /protocol-info:protocol-info command handles summary/error reporting. Keep the response tight:
- For full crawls, surface the outcome and
out/index.html.
- Only investigate debug artifacts if the user asks or the command failed.
Do not
- Do not reimplement the crawl with raw
WebFetch / WebSearch.
- Do not use this skill for existing-record maintenance; use
protocol-info-maintainer instead.
- Do not pre-validate arguments; the runner reports usage errors.
- Do not assume
ROOTDATA_API_KEY or UNAVATAR_API_KEY is set. Round 1 alone is still useful.