Crypto extract spec
Skill bacharKachouh/crypto-workbench/skills/crypto-extract-spec
npx -y skills add bacharKachouh/crypto-workbench --skill crypto-extract-specAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.8 KB, as published. Nobody here has run it
crypto-extract-spec
Convert reviewed material into implementation-facing specifications.
Gate
Verify extracted/reviews/ contains a review artifact for the current target. If not, tell the user to run crypto-paper-review first.
Steps
Step 1: Read source material
Read the paper, the review artifact, and any supplementary sources identified in the source index.
Step 2: Build notation map
Extract all notation from the paper: symbols, meanings, domains, encodings, conventions, and any conflicts between sources.
Call build_notation_map() from specs.build_notation_map with:
workbench_root=.cryptoworkbenchtarget= current target namecreated_from= path to primary sourcesymbols= list of dicts, each with: symbol, meaning, domain, encoding, notesconventions= list of paper-specific conventionsconflicts= list of notation conflicts between sources
Step 3: Extract pseudocode
Read the paper's algorithms. Normalize pseudocode into explicit steps with clear inputs, outputs, and control flow. Record any steps that are underspecified.
Step 4: Track ambiguities
Identify every ambiguity, underspecified detail, and implementation choice that requires user input. Do not silently resolve them.
Call build_ambiguity_log() from specs.build_ambiguity_log with:
workbench_root=.cryptoworkbenchtarget= current target nametitle= descriptive titlecreated_from= path to primary sourcesummary= overview of ambiguity scopeambiguities= list of dicts, each with: title, description, source_location, impact, resolution_options, status
Step 4.5: Resolve blocking ambiguities (decision gate)
Re-read the ambiguity log. Classify each item as blocking or deferred based on its impact field (scope / correctness / security → blocking; cosmetic / doc-only → deferred).
Surface the classification to the user before escalating, so they can object before you walk through the questions:
"Ambiguity log has N items. I'm treating these as blocking: [list with one-line impact summaries]. I'm deferring these: [list]. OK with that split, or move something?"
Then, only after the split is confirmed:
- Deferred items — leave
status: deferredand move on; the impl spec records them as open items. - Blocking items — walk them one at a time, announcing the count upfront ("3 blocking items — I'll walk them in order"). For each, present description + source location + resolution options and ask for a decision. Record the user's decision back into the ambiguity log (
status: resolved, add aresolutionfield) and into.cryptoworkbench/workbench/decisions.md.
Do not guess on blocking items. If the user wants to defer a blocker, note that explicitly — a deferred blocker becomes a classification constraint (impl spec classification shifts toward "Spec-only / blocked by unresolved ambiguity").
Step 5: Produce implementation spec
Call build_impl_spec() from specs.build_impl_spec with:
workbench_root=.cryptoworkbenchtarget= current target nametitle= descriptive titlecreated_from= path to primary sourceclassification= one of: "Research prototype", "Reference-style implementation", "Library-backed implementation", "Production-oriented integration", "Spec-only / blocked by unresolved ambiguity"summary,data_types,module_boundaries,function_signatures,randomness_requirements,serialization_rules,parameter_constraints,dependencies= your spec contenttest_plan_kat= known-answer test vectorstest_plan_edge_cases= edge case teststest_plan_negative= negative and invalid-input teststest_plan_serialization= serialization round-trip teststest_plan_failure= failure-mode teststest_plan_coverage= coverage goals
Report the extraction summary and recommend crypto-library-map as the next step.
Shared modules
specs.build_notation_map—build_notation_map()specs.build_ambiguity_log—build_ambiguity_log()specs.build_impl_spec—build_impl_spec()
Invocation convention
Shared Python modules ship inside this plugin under ${CLAUDE_PLUGIN_ROOT}/src/. The user's current working directory is their working project — that is where .cryptoworkbench/ lives and where any relative path like workbench_root resolves.
When invoking Python from this skill:
- Add the plugin's
src/to the Python path. Inline form:PYTHONPATH="${CLAUDE_PLUGIN_ROOT}/src" python .... Inside a script:sys.path.insert(0, "${CLAUDE_PLUGIN_ROOT}/src"). - Do not assume the cwd is the plugin repo. The cwd is the user's project.
- Pass
workbench_rootas a path relative to the user's cwd (typically.cryptoworkbench). - For calls with multi-line content (code blocks, long strings), use a heredoc-fed script or a temporary
.pyfile — not inlinepython -cwith shell quoting.