{
  "schemaVersion": "1.0",
  "item": {
    "slug": "vocabulary-builder",
    "name": "Vocabulary Builder",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/winlinvip/vocabulary-builder",
    "canonicalUrl": "https://clawhub.ai/winlinvip/vocabulary-builder",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/vocabulary-builder",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=vocabulary-builder",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/vocabulary-builder"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/vocabulary-builder",
    "agentPageUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Vocabulary Builder",
        "body": "This skill reads and writes the following files (paths relative to workspace):\n\nVocabulary tracker: memory/vocabulary.md — all word data lives here\nAudio clips directory: docs/tts-fr/ — read-only; user places pronunciation audio files here\n\nEnsure these paths exist or create them before first use."
      },
      {
        "title": "Reading Workflow",
        "body": "When the user wants to read/practice reading a book:\n\nAsk what book they're reading\nCheck the vocabulary tracker for words from that book — read the END of the Active Words section (use tail or read the last entries) to find the actual last word. Note: memory_search may return partial/ranked results, so also verify by reading the file directly when checking the latest entry.\nTell them the last word added + page number so they know where to continue\nAsk if they want to: practice pending words, or keep reading and add new ones"
      },
      {
        "title": "Adding New Words",
        "body": "When the user gives a new word:\n\nGive pronunciation (IPA, American English)\nGive meaning — clear, simple\nGive synonyms — similar words they might know\nAdd to tracker immediately unless the user says not to add it\nShow the word card after adding\n\nIf the user says they are focusing on pronunciation, ask which words they confuse (for example: seem / same / sim). In pronunciation-focused mode:\n\nTreat the set as a single comparison entry if the user's goal is sound comparison, not three separate vocabulary items\nShow each word's pronunciation separately in the reply and in the word card\nRecord the entry with a combined title like ### seem / same / sim\nUse the Meaning field to explain how to pronounce the words and what sound difference to notice, not the usual vocabulary meaning\nKeep the pronunciation explanation short, practical, and contrast-focused\nIf the user does not provide a sentence, generate very very simple context lines for each word\nUse the shared book/page/context the user gives\n\nAdd to the ## Active Words section, at the END (before --- separator for Long-Term Review)."
      },
      {
        "title": "Word Entry Format",
        "body": "### [word]\n- **Type:** noun/verb/adj/adv\n- **Learned:** YYYY-MM-DD HH:MM TZ\n- **Book:** [source name]\n- **Page:** [number]\n- **Pronunciation:** /IPA/\n- **Meaning:** [explanation]\n- **Synonyms:** [similar words]\n- **Context:** \"[sentence from source]\"\n- **Practice History:**\n  - YYYY-MM-DD HH:MM TZ: Step N ✓/✗ (notes)"
      },
      {
        "title": "Pronunciation Comparison Entry Format",
        "body": "### [word 1] / [word 2] / [word 3]\n- **Type:** pronunciation comparison set\n- **Learned:** YYYY-MM-DD HH:MM TZ\n- **Book:** [source name]\n- **Page:** [number]\n- **Pronunciation:**\n  - **[word 1]** — /IPA/\n  - **[word 2]** — /IPA/\n  - **[word 3]** — /IPA/\n- **Meaning:** Short pronunciation guidance explaining the sound difference (for example: `[word 1]` has /iː/, `[word 2]` has /eɪ/, `[word 3]` has /ɪ/)\n- **Synonyms:** pronunciation set, minimal comparison set\n- **Context:**\n  - **[word 1]:** \"[very simple sentence]\"\n  - **[word 2]:** \"[very simple sentence]\"\n  - **[word 3]:** \"[very simple sentence]\"\n- **Practice History:**"
      },
      {
        "title": "French Words",
        "body": "Context: French sentence only\nEnglish Translation: Separate field with English translation\nDo NOT mix French and English in the same field\nUser places audio clips in docs/tts-fr/ → add Audio field with the file path"
      },
      {
        "title": "3-Step Learning Process",
        "body": "Run all 3 steps in one conversation flow (not spread across hours):\n\nStep 1: Show the plain word + review count (e.g. \"reviewed 0 times\" or \"reviewed 3 times\") → ask \"Do you know the pronunciation?\" → user types word to confirm\nStep 2: Ask \"What does it mean?\" → check if correct/close enough\nStep 3: Ask user to write a sentence using the word\n\nTrust-based pronunciation — no voice/ASR check. User types word to confirm."
      },
      {
        "title": "Pronunciation-Focused Practice",
        "body": "If the user wants pronunciation practice instead of meaning-first vocabulary study:\n\nAsk which words they confuse\nShow the pronunciation for each word clearly\nHighlight the key sound contrast briefly\nExplain how to say the sounds (mouth shape, long/short vowel, tongue or lip position when useful) instead of focusing on dictionary meaning\nRecord the set as one pronunciation comparison entry when that is more useful than separate entries\nUse very simple example sentences in the Context field, one short line per word when possible\nDo not force the normal meaning-first 3-step flow for a pure pronunciation comparison request"
      },
      {
        "title": "Spaced Repetition Schedule",
        "body": "After completing all 3 steps, review at:\n\nNext day → 3 days → 1 week → 2 weeks → 1 month → 3 months\nAfter 3-month review: word is mastered"
      },
      {
        "title": "Word Progression",
        "body": "Words move through three sections in the tracker:\n\nActive Words — currently learning\nLong-Term Review Words — completed all steps, in spaced review\nMastered Words — passed all reviews through 3 months"
      },
      {
        "title": "Quiz Rules",
        "body": "One word per quiz — no rapid-fire\nNo spam: If no reply to previous quiz today → don't send new one\nReset next day: New day = can send quiz even if yesterday's unanswered\nSleep hours: No messages 11 PM – 7 AM (user's timezone)\nPriority: due for review > newer words (incomplete steps) > refresher"
      },
      {
        "title": "Random Word Selection",
        "body": "Count each word's total practice history entries (all steps and reviews combined)\nSort all words by review count ascending (least reviewed first)\nTake the group with the minimum review count\nWithin that group, randomize: count words (N), use (current_timestamp_ms % N) + 1 to pick position\nNever pick the same word twice in a row. Check Quiz State for the last quizzed word and skip it.\n\nAlways show review count when quizzing: e.g. \"(reviewed 0 times)\" or \"(reviewed 3 times)\"."
      },
      {
        "title": "On-Demand Quizzes",
        "body": "User can request specific quizzes anytime — these override normal priority and spam rules:\n\n\"Quiz me\" → random word\n\"Quiz me on [word]\" → specific word\n\"Quiz me on words from [book]\" → random from that book\n\"Quiz me on words from this week\" → last 7 days\n\"Quiz me on [book] page [N] to [M]\" → page range\n\"Give me 3 quizzes\" → run 3 words in a row\n\nOn-demand refresher: If no words are due/pending, pick random word from all learned words. Still record quiz date."
      },
      {
        "title": "Quiz State Tracking",
        "body": "Keep a ## Quiz State section at the top of the tracker file:\n\n## Quiz State\n- **Pending quiz:** [word] ([review type], [step] sent)\n- **Last quiz sent:** YYYY-MM-DD HH:MM TZ\n\nUpdate after each quiz interaction."
      },
      {
        "title": "Cron Setup",
        "body": "When the user asks to set up a scheduled vocabulary quiz:\n\nAsk for: frequency (default: every 1h), delivery channel + target\nJob name: vocabulary-quiz-{agentName} (e.g. vocabulary-quiz-english)\nCreate a cron job with these settings:\n\nSession: isolated\nTimeout: 120 seconds\nMessage: instruct the agent to use the vocabulary-builder skill to run a quiz\n\n\nQuiz constraints (include in the cron message):\n\nCheck Quiz State — skip if pending quiz unanswered today\nRespect sleep hours: no messages 11PM–7AM (user's timezone)"
      },
      {
        "title": "References",
        "body": "Video: Why I Stopped Using Flashcards and Started Using AI"
      }
    ],
    "body": "Vocabulary Builder\n\nThis skill reads and writes the following files (paths relative to workspace):\n\nVocabulary tracker: memory/vocabulary.md — all word data lives here\nAudio clips directory: docs/tts-fr/ — read-only; user places pronunciation audio files here\n\nEnsure these paths exist or create them before first use.\n\nReading Workflow\n\nWhen the user wants to read/practice reading a book:\n\nAsk what book they're reading\nCheck the vocabulary tracker for words from that book — read the END of the Active Words section (use tail or read the last entries) to find the actual last word. Note: memory_search may return partial/ranked results, so also verify by reading the file directly when checking the latest entry.\nTell them the last word added + page number so they know where to continue\nAsk if they want to: practice pending words, or keep reading and add new ones\nAdding New Words\n\nWhen the user gives a new word:\n\nGive pronunciation (IPA, American English)\nGive meaning — clear, simple\nGive synonyms — similar words they might know\nAdd to tracker immediately unless the user says not to add it\nShow the word card after adding\n\nIf the user says they are focusing on pronunciation, ask which words they confuse (for example: seem / same / sim). In pronunciation-focused mode:\n\nTreat the set as a single comparison entry if the user's goal is sound comparison, not three separate vocabulary items\nShow each word's pronunciation separately in the reply and in the word card\nRecord the entry with a combined title like ### seem / same / sim\nUse the Meaning field to explain how to pronounce the words and what sound difference to notice, not the usual vocabulary meaning\nKeep the pronunciation explanation short, practical, and contrast-focused\nIf the user does not provide a sentence, generate very very simple context lines for each word\nUse the shared book/page/context the user gives\n\nAdd to the ## Active Words section, at the END (before --- separator for Long-Term Review).\n\nWord Entry Format\n### [word]\n- **Type:** noun/verb/adj/adv\n- **Learned:** YYYY-MM-DD HH:MM TZ\n- **Book:** [source name]\n- **Page:** [number]\n- **Pronunciation:** /IPA/\n- **Meaning:** [explanation]\n- **Synonyms:** [similar words]\n- **Context:** \"[sentence from source]\"\n- **Practice History:**\n  - YYYY-MM-DD HH:MM TZ: Step N ✓/✗ (notes)\n\nPronunciation Comparison Entry Format\n### [word 1] / [word 2] / [word 3]\n- **Type:** pronunciation comparison set\n- **Learned:** YYYY-MM-DD HH:MM TZ\n- **Book:** [source name]\n- **Page:** [number]\n- **Pronunciation:**\n  - **[word 1]** — /IPA/\n  - **[word 2]** — /IPA/\n  - **[word 3]** — /IPA/\n- **Meaning:** Short pronunciation guidance explaining the sound difference (for example: `[word 1]` has /iː/, `[word 2]` has /eɪ/, `[word 3]` has /ɪ/)\n- **Synonyms:** pronunciation set, minimal comparison set\n- **Context:**\n  - **[word 1]:** \"[very simple sentence]\"\n  - **[word 2]:** \"[very simple sentence]\"\n  - **[word 3]:** \"[very simple sentence]\"\n- **Practice History:**\n\nFrench Words\nContext: French sentence only\nEnglish Translation: Separate field with English translation\nDo NOT mix French and English in the same field\nUser places audio clips in docs/tts-fr/ → add Audio field with the file path\n3-Step Learning Process\n\nRun all 3 steps in one conversation flow (not spread across hours):\n\nStep 1: Show the plain word + review count (e.g. \"reviewed 0 times\" or \"reviewed 3 times\") → ask \"Do you know the pronunciation?\" → user types word to confirm\nStep 2: Ask \"What does it mean?\" → check if correct/close enough\nStep 3: Ask user to write a sentence using the word\n\nTrust-based pronunciation — no voice/ASR check. User types word to confirm.\n\nPronunciation-Focused Practice\n\nIf the user wants pronunciation practice instead of meaning-first vocabulary study:\n\nAsk which words they confuse\nShow the pronunciation for each word clearly\nHighlight the key sound contrast briefly\nExplain how to say the sounds (mouth shape, long/short vowel, tongue or lip position when useful) instead of focusing on dictionary meaning\nRecord the set as one pronunciation comparison entry when that is more useful than separate entries\nUse very simple example sentences in the Context field, one short line per word when possible\nDo not force the normal meaning-first 3-step flow for a pure pronunciation comparison request\nSpaced Repetition Schedule\n\nAfter completing all 3 steps, review at:\n\nNext day → 3 days → 1 week → 2 weeks → 1 month → 3 months\nAfter 3-month review: word is mastered\nWord Progression\n\nWords move through three sections in the tracker:\n\nActive Words — currently learning\nLong-Term Review Words — completed all steps, in spaced review\nMastered Words — passed all reviews through 3 months\nQuiz Rules\nOne word per quiz — no rapid-fire\nNo spam: If no reply to previous quiz today → don't send new one\nReset next day: New day = can send quiz even if yesterday's unanswered\nSleep hours: No messages 11 PM – 7 AM (user's timezone)\nPriority: due for review > newer words (incomplete steps) > refresher\nRandom Word Selection\nCount each word's total practice history entries (all steps and reviews combined)\nSort all words by review count ascending (least reviewed first)\nTake the group with the minimum review count\nWithin that group, randomize: count words (N), use (current_timestamp_ms % N) + 1 to pick position\nNever pick the same word twice in a row. Check Quiz State for the last quizzed word and skip it.\n\nAlways show review count when quizzing: e.g. \"(reviewed 0 times)\" or \"(reviewed 3 times)\".\n\nOn-Demand Quizzes\n\nUser can request specific quizzes anytime — these override normal priority and spam rules:\n\n\"Quiz me\" → random word\n\"Quiz me on [word]\" → specific word\n\"Quiz me on words from [book]\" → random from that book\n\"Quiz me on words from this week\" → last 7 days\n\"Quiz me on [book] page [N] to [M]\" → page range\n\"Give me 3 quizzes\" → run 3 words in a row\n\nOn-demand refresher: If no words are due/pending, pick random word from all learned words. Still record quiz date.\n\nQuiz State Tracking\n\nKeep a ## Quiz State section at the top of the tracker file:\n\n## Quiz State\n- **Pending quiz:** [word] ([review type], [step] sent)\n- **Last quiz sent:** YYYY-MM-DD HH:MM TZ\n\n\nUpdate after each quiz interaction.\n\nCron Setup\n\nWhen the user asks to set up a scheduled vocabulary quiz:\n\nAsk for: frequency (default: every 1h), delivery channel + target\nJob name: vocabulary-quiz-{agentName} (e.g. vocabulary-quiz-english)\nCreate a cron job with these settings:\nSession: isolated\nTimeout: 120 seconds\nMessage: instruct the agent to use the vocabulary-builder skill to run a quiz\nQuiz constraints (include in the cron message):\nCheck Quiz State — skip if pending quiz unanswered today\nRespect sleep hours: no messages 11PM–7AM (user's timezone)\nReferences\nVideo: Why I Stopped Using Flashcards and Started Using AI"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/winlinvip/vocabulary-builder",
    "publisherUrl": "https://clawhub.ai/winlinvip/vocabulary-builder",
    "owner": "winlinvip",
    "version": "1.1.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/vocabulary-builder",
    "downloadUrl": "https://openagent3.xyz/downloads/vocabulary-builder",
    "agentUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vocabulary-builder/agent.md"
  }
}