flashcard-forge
Convert any text — PDF excerpts, lecture notes, articles, textbook chapters — into spaced-repetition flashcards. Generates Anki-importable CSV with Q&A and cloze-deletion modes using regex-based extraction and sentence analysis.
Rank
62
Safety
84
Downloads
2.7k
Updated
Oct 9, 2026
Version
0.1.2
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 2.7K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 2.7K downloadsadoption · observed Oct 9, 2026
- Latest release
- 0.1.2release · observed Aug 14, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:flashcard-forge- Install using `clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:flashcard-forge` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/voronindenis5/flashcard-forge before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-flashcard-forge/snapshot"
Documentation
CLAWHUB
77,545 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: flashcard-forge
description: >
Convert any text — PDF excerpts, lecture notes, articles, textbook chapters —
into spaced-repetition flashcards. Generates Anki-importable CSV with Q&A and
cloze-deletion modes using regex-based extraction and sentence analysis.
version: 1.0.0
author: Denis Voronin
license: MIT
tags:
- education
- flashcards
- anki
- spaced-repetition
- study
- text-processing
---
# Flashcard Forge
> Turn walls of text into decks you'll actually review.
`Flashcard Forge` is a skill that transforms study material (PDFs, lecture
notes, articles, textbook chapters) into spaced-repetition flashcards. It
extracts key facts, definitions, and Q&A pairs using regex patterns and
sentence-structure analysis, then exports Anki-importable CSV files.
## When to Use
Activate this skill when you need to:
- Convert a textbook chapter or lecture transcript into flashcards
- Extract definitions, key facts, or Q&A from a body of text
- Generate cloze (fill-in-the-blank) cards for memorization
- Produce Anki-importable CSV from raw notes
- Study for an exam by turning reading material into active recall cards
## Modes
### Q&A Mode (`--mode qa`)
Extracts question-answer pairs and definition pairs:
- **Definition patterns**: "X is defined as Y", "X refers to Y", "X means Y"
- **Explicit questions**: sentences containing "What/Why/How/When/Where" markers
- **List patterns**: "There are N types of X: A, B, C"
- **Cause/effect**: "X causes Y", "X results in Y"
- **Comparison**: "Unlike X, Y does Z"
### Cloze Mode (`--mode cloze`)
Generates fill-in-the-blank cards by identifying key terms in each sentence and
masking them:
- Nouns and proper nouns are candidates for clozing
- Numbers, dates, and named entities are high-priority cloze targets
- Each card uses Anki's `{{c1::...}}` cloze syntax
### Auto Mode (`--mode auto`, default)
Runs both modes and merges results, deduplicating by question text.
## Quick Reference
| Need | Command |
| --------------------------- | --------------------------------------------------------------- |
| Q&A cards from a text file | `python3 scripts/flashcard_forge.py notes.txt` |
| Cloze cards | `python3 scripts/flashcard_forge.py notes.txt --mode cloze` |
| Anki CSV output | `python3 scripts/flashcard_forge.py notes.txt -o deck.csv` |
| Custom cloze count | `python3 scripts/flashcard_forge.py notes.txt --max-cloze 3` |
| Min sentence length filter | `python3 scripts/flashcard_forge.py notes.txt --min-length 20` |
| JSON output | `python3 scripts/flashcard_forge.py notes.txt --format json` |
## How It Works
1. **Read & clean** — load the text, normalize whitespace, strip markdown
artifacts.
2. **Segment** — split into sentences using punctuation-aware tokenization.
3. **Extract** — apply regex patterns (see `referencREADME.md
# Flashcard Forge
> Turn walls of text into decks you'll actually review.
A [Hermes Agent](https://hermes-agent.nousresearch.com/docs) / OpenClaw skill
that converts study material — PDF excerpts, lecture notes, articles, textbook
chapters — into **Anki-importable flashcards** using regex-based extraction and
sentence analysis.
## Why
Students spend hours manually making flashcards from reading material. Most of
that work is mechanical: find the definitions, extract the key facts, format
them as Q&A or cloze cards. Flashcard Forge automates the extraction so you can
focus on reviewing, not transcribing.
## What's Included
- **`SKILL.md`** — core skill: modes, quick-reference table, how-it-works.
- **`references/`**
- `extraction-patterns.md` — catalog of regex patterns the extractor uses.
- `anki-import.md` — step-by-step guide to importing CSV into Anki.
- `study-strategies.md` — best practices for flashcard-based learning.
- **`scripts/flashcard_forge.py`** — the main script (stdlib only, no deps).
- **`scripts/sample_text.txt`** — example input demonstrating all pattern types.
## Quick Start
```bash
# Generate Q&A flashcards (default mode)
python3 scripts/flashcard_forge.py notes.txt -o deck.csv
# Generate cloze (fill-in-the-blank) cards
python3 scripts/flashcard_forge.py notes.txt --mode cloze -o cloze.csv
# Auto mode: both Q&A and cloze, deduplicated
python3 scripts/flashcard_forge.py notes.txt --mode auto -o deck.csv
# Cap output to 50 cards, filter short sentences
python3 scripts/flashcard_forge.py notes.txt --max-cards 50 --min-length 25
# JSON output for programmatic use
python3 scripts/flashcard_forge.py notes.txt --format json -o deck.json
```
Example CSV output:
```
Front;Back
"What is photosynthesis?";"The process by which plants convert light energy into chemical energy"
"Mitochondria";"The powerhouse of the cell, responsible for ATP production"
```
Example cloze output:
```
Text;Extra
"The powerhouse of the cell is the {{c1::mitochondria}}";""
"Photosynthesis occurs in the {{c1::chloroplasts}} of plant cells";""
```
## Modes
| Mode | Card Type | Best For |
| ------- | ---------- | --------------------------------- |
| `qa` | Basic Q&A | Definitions, explicit questions |
| `cloze` | Cloze | Fill-in-the-blank memorization |
| `auto` | Both | General use (default) |
## Anki Import
1. Open Anki → File → Import
2. Select the CSV file
3. Set type to **Basic** (for qa) or **Cloze** (for cloze)
4. Ensure field separator is semicolon (`;`)
5. Click Import
See `references/anki-import.md` for detailed instructions with screenshots.
## Installation (Hermes Agent)
Copy or symlink this directory into your skills folder:
```bash
cp -r flashcard-forge ~/.hermes/skills/
```
Hermes auto-discovers skills with a valid `SKILL.md`. See the
[skills docs](https://hermes-agent.nousresearch.com/docs) for details.
## Requirements
- Python 3.8+ (stdlib only — no pip_meta.json
{
"ownerId": "kn75wwn4x6djaf28jbykeamazd81gtdp",
"slug": "flashcard-forge",
"version": "0.1.2",
"publishedAt": 1786688362104
}references/anki-import.md
# Anki Import Guide
Flashcard Forge outputs CSV files designed for direct import into
[Anki](https://apps.ankiweb.net/). This guide walks through the import process
for both Q&A (Basic) and cloze card types.
## CSV Format
### Q&A CSV (Basic cards)
```
Front;Back
"What is photosynthesis?";"The process by which plants convert light into chemical energy"
"Mitochondria";"The powerhouse of the cell, responsible for ATP production"
```
- **Separator**: semicolon (`;`)
- **Header row**: `Front;Back`
- **Fields are quoted** to handle commas and newlines within card text
### Cloze CSV (Cloze cards)
```
Text;Extra
"The powerhouse of the cell is the {{c1::mitochondria}}";""
"DNA stands for {{c1::deoxyribonucleic acid}}";""
```
- **Separator**: semicolon (`;`)
- **Header row**: `Text;Extra`
- Cloze deletions use `{{c1::...}}` syntax
- The `Extra` field is for additional context (often empty)
## Importing Q&A Cards (Basic)
1. **Open Anki** and select or create a deck.
2. Go to **File → Import...** (or press `Ctrl+I` / `Cmd+I`).
3. Select your `.csv` file.
4. In the import dialog:
- **Type**: Basic
- **Deck**: choose your target deck
- **Field separator**: semicolon (`;`) — Anki usually auto-detects
5. Verify the field mapping: column 1 → Front, column 2 → Back.
6. Click **Import**.
### Importing Cloze Cards
1. **Ensure you have a Cloze note type.** Anki includes one by default. If you
don't see it, go to Tools → Manage Note Types → Add → Cloze.
2. Go to **File → Import...**
3. Select your cloze `.csv` file.
4. In the import dialog:
- **Type**: Cloze
- **Deck**: choose your target deck
- **Field separator**: semicolon (`;`)
5. Verify the field mapping: column 1 → Text, column 2 → Extra.
6. Click **Import**.
> **Important:** Cloze cards with no `{{c1::...}}` deletion will fail to import.
> Flashcard Forge guarantees at least one cloze per card.
## Common Import Issues
### "The first field of this note type must be unique"
This happens if Anki detects duplicate front text. Options:
- Enable "Allow HTML in fields" is **not** the fix — instead, update existing
cards on import.
- Or, pre-deduplicate your CSV. Flashcard Forge deduplicates within a single
run; if you're merging multiple runs, dedup manually.
### Garbled characters
Ensure the CSV is UTF-8 encoded. Flashcard Forge always writes UTF-8. If you
opened and re-saved the file in Excel, it may have changed the encoding —
re-export from the script instead.
### Wrong delimiter detected
If Anki shows all data in one column, the delimiter wasn't auto-detected. In
the import dialog, manually set the field separator to semicolon.
### Cloze cards show as blank
The note type must be **Cloze**, not Basic. If you imported cloze CSV as Basic
cards, delete them and re-import with the correct type.
## Bulk Import Tips
- **Large decks**: Import in batches of 200-500 cards to avoid performance
issues.
- **Tags**: Add tags during import (e.g., `biology`, `chapter-3`) for eareferences/extraction-patterns.md
# Extraction Patterns
This document catalogs the regex patterns Flashcard Forge uses to extract
flashcard-worthy content from text. Each pattern targets a specific sentence
structure common in educational material.
## Definition Patterns
These extract "term → definition" pairs, producing cards with the term as the
front and the definition as the back.
### "X is Y"
```regex
\b([A-Z][a-z]+(?:\s+\w+){0,4})\s+is\s+(?:a|an|the)\s+(.+?)[.]
```
Matches:
- "Photosynthesis is a process by which plants make food."
- "Mitosis is a type of cell division."
### "X is defined as Y"
```regex
\b(.+?)\s+is\s+defined\s+as\s+(.+?)[.]
```
### "X refers to Y" / "X means Y"
```regex
\b(.+?)\s+(?:refers\s+to|means)\s+(.+?)[.]
```
### "X: Y" (colon definitions)
```regex
^([A-Z][^:]{2,40}):\s+(.+?)[.]?$
```
Matches:
- "Photosynthesis: The process by which plants convert light to energy."
## Q&A Patterns
### Explicit question markers
```regex
\b(What|Why|How|When|Where|Who|Which)\s+.+?\?\s*(.+?)[.]?
```
Matches embedded questions and their answers:
- "What is DNA? It is the genetic material in cells."
### "The question is..." / "The answer is..."
```regex
\bThe\s+(?:question|answer)\s+is\s+(.+?)[.]
```
## List Patterns
### "There are N types of X: A, B, C"
```regex
\bThere\s+are\s+(\w+)\s+(types|kinds|categories|forms)\s+of\s+(.+?):\s*(.+?)[.]
```
Produces one card per list item with the category as context.
### Numbered/enumerated items
```regex
^(?:\d+[.)]\s+|[-*]\s+)(.+)$
```
## Cause/Effect Patterns
```regex
\b(.+?)\s+(?:causes|leads\s+to|results\s+in|produces|triggers)\s+(.+?)[.]
```
Matches:
- "Smoking causes lung cancer."
- "Insulin deficiency results in diabetes."
## Comparison Patterns
```regex
\b(?:Unlike|Whereas|While|In\s+contrast\s+to)\s+(.+?),\s+(.+?)\s+(.+?)[.]
```
Matches:
- "Unlike prokaryotes, eukaryotes have a nucleus."
## Cloze Targets
For cloze mode, the following are high-priority candidates for masking:
| Category | Pattern |
| ---------------- | ------------------------------------------ |
| Proper nouns | `\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\b` |
| Numbers/Dates | `\b\d{1,4}(?:\s?(?:BCE|CE|AD|BC))?\b` |
| Years | `\b(?:1[5-9]\d{2}|20\d{2})\b` |
| Percentages | `\b\d+(?:\.\d+)?\s?%\b` |
| Chemical formulas| `\b[A-Z][a-z]?\d*(?:[A-Z][a-z]?\d*)+\b` |
| Key terms (all-caps acronyms) | `\b[A-Z]{2,}\b` |
## Scoring Heuristics
Each extracted candidate is scored for information density:
| Signal | Points |
| ------------------------ | ------ |
| Contains a number | +2 |
| Contains a definition | +3 |
| Contains a comparison | +2 |
| Sentence length 15-40 | +1 |
| Sentence length > 50 | -1 |
| Contains a list | +2 |
| Contains cause/effect | +2 |
Candidates scoring below a threshold (default: 2) are discarded.
## Tuning
Alactivepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/voronindenis5/skills/flashcard-forge",
"sourceUrl": "https://clawhub.ai/voronindenis5/skills/flashcard-forge",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T12:05:53.269Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-flashcard-forge/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-flashcard-forge/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T12:05:53.269Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2.7K downloads",
"href": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceUrl": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T12:05:53.269Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.1.2",
"href": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceUrl": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-14T06:19:22.104Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-flashcard-forge/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-flashcard-forge/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.1.2",
"description": "- Removed the documentation file skill-card.md. - No code or functional changes; this update is limited to documentation cleanup.",
"href": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceUrl": "https://clawhub.ai/voronindenis5/flashcard-forge",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-14T06:19:22.104Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
