eliasoulkadi/shokunin/kami
Claude Code and agent skill by eliasoulkadi/shokunin
- community
Checking that the SKILL.md file is still in the repository.
Generate PDFs, resumes, CVs, letters, slide decks, portfolios, one-pagers, white papers, and professional documents. Use when user asks to create a PDF, make a resume, write a letter, design slides, format a document, typeset a report, build a portfolio, make a presentation, or create a one-pager. Warm parchment, ink-blue accent, serif-led hierarchy. CN uses TsangerJinKai02, EN uses Charter, JA uses YuMincho (best-effort). Triggers on Chinese: "做 PDF / 排版 / 一页纸 / 白皮书 / 作品集 / 简历 / PPT / slides". Do NOT use for code formatting, data charts, or wireframes.
Install
npx vskill@latest install eliasoulkadi/shokunin/kamiSKILL.md
Note: Full Kami distribution includes ~30+ auxiliary files (CHEATSHEET.md, scripts/, references/, assets/diagrams/*.html). The core SKILL.md works standalone; scripts/build.py is required for PDF generation. Check the Shokunin ecosystem root for these.
kami · 紙
紙 · かみ - the paper your deliverables land on.
Good content deserves good paper. One design language across eight document types: warm parchment canvas, ink-blue accent, serif-led hierarchy, tight editorial rhythm.
Part of Kaku · Waza · Kami - Kaku writes code, Waza drills habits, Kami delivers documents.
Workflow
Step 0 · Load brand profile (if exists)
Check ~/.config/kami/brand.md (preferred) or ~/.kami/brand.md (legacy fallback). If found, read references/brand-profile.md for the full four-layer application spec (placeholder substitution, session defaults, visual customization, habit notes) and its six guardrails. If no profile exists, continue without interruption.
Key rule: explicit prompt > editorial judgment > habit notes > frontmatter defaults > built-in defaults. Profile fills gaps silently; it never overrides the current conversation.
Step 1 · Decide the language
Match the user's language. Chinese -> *.html / slides-weasy.html. English -> *-en.html / slides-weasy-en.html. Japanese -> CJK path (.html / slides-weasy.html) as best-effort, JP Mincho first, visual QA before shipping. Reference docs are shared English specs.
When ambiguous (e.g. a one-word command like "resume"), ask a one-liner rather than guess.
| User language | HTML templates | Slides (PDF default) | Slides (PPTX fallback) | |
|---|---|---|---|---|
| Chinese (primary) | *.html | slides-weasy.html | slides.py | |
| English | *-en.html | slides-weasy-en.html | slides-en.py | |
| Japanese (best-effort) | *.html | slides-weasy.html | slides.py | |
| Other languages (best-effort) | choose CJK or EN path by script coverage, then verify manually | choose slides-weasy.html or slides-weasy-en.html, then verify manually | use slides.py / slides-en.py only if PPTX is required |
Default to the WeasyPrint HTML path; fall back to PPTX (slides*.py) only when the user explicitly needs an editable deck.
Always use CHEATSHEET.md and references/*.md for design, writing, production, and diagram guidance.
Step 1.5 · Intent extraction (silent checklist)
Before choosing a template, verify these four dimensions are clear. Do not ask unless 2+ are missing and cannot be inferred from context.
| Dimension | What to extract | Example | |
|---|---|---|---|
| Purpose | Why this document exists | Persuade investor vs. align internal team vs. close a candidate | |
| Audience | Who reads it, what they already know | Technical CTO (skip basics) vs. non-technical board (explain terms) | |
| Constraint | Hard limits on length, format, tone, or delivery | "One page max", "formal English", "print-ready A4" | |
| Success | What outcome counts as success | They schedule a meeting / they approve the budget / they understand the architecture |
Rules:
- If the conversation already answered a dimension, skip it silently.
- If a dimension can be inferred from the document type (e.g. resume purpose is always "get an interview"), skip it.
- If 2+ dimensions are genuinely unclear, ask in a single compact question (max 2 sub-questions).
- Never ask all four as a checklist. This is a background verification, not a form.
Step 2 · Pick the document type
| User says | Document | CN template | EN template | |
|---|---|---|---|---|
| "one-pager / 方案 / 执行摘要 / exec summary" | One-Pager | one-pager.html | one-pager-en.html | |
| "white paper / 白皮书 / 长文 / 年度总结 / technical report" | Long Doc | long-doc.html | long-doc-en.html | |
| "formal letter / 信件 / 辞职信 / 推荐信 / memo" | Letter | letter.html | letter-en.html | |
| "portfolio / 作品集 / case studies" | Portfolio | portfolio.html | portfolio-en.html | |
| "resume / CV / 简历 / 履歴書" | Resume | resume.html | resume-en.html | |
| "slides / PPT / deck / 演示" | Slides | slides-weasy.html | slides-weasy-en.html | |
| "个股研报 / equity report / 估值分析 / investment memo / 股票分析" | Equity Report | equity-report.html | equity-report-en.html | |
| "更新日志 / changelog / release notes / 版本记录" | Changelog | changelog.html | changelog-en.html |
Changelog vs. release notes: The changelog template above is for styled document output. GitHub release notes are a separate deliverable; use/writewith Release Note Template Mode.
Slides: default toslides-weasy.html/slides-weasy-en.html(WeasyPrint HTML -> PDF). Useslides.py/slides-en.pyonly when the user explicitly requires an editable PPTX file.
Deck recipe: read design.md Section 8 before drafting slides.
If unsure, ask a one-liner about the scenario rather than guess.
Diagrams (primitives, not a separate template type)
When the user asks for a diagram inside a long-doc / portfolio / slide (not a standalone document), route to assets/diagrams/ rather than a template:
| User says | Diagram | Template | |
|---|---|---|---|
| "架构图 / architecture / 系统图 / components diagram" | Architecture | assets/diagrams/architecture.html | |
| "流程图 / flowchart / 决策流 / branching logic" | Flowchart | assets/diagrams/flowchart.html | |
| "象限图 / quadrant / 优先级矩阵 / 2x2 matrix" | Quadrant | assets/diagrams/quadrant.html | |
| "柱状图 / bar chart / 分类对比 / grouped bars" | Bar Chart | assets/diagrams/bar-chart.html | |
| "折线图 / line chart / 趋势 / 股价 / time series" | Line Chart | assets/diagrams/line-chart.html | |
| "环形图 / donut / pie / 占比 / 分布结构" | Donut Chart | assets/diagrams/donut-chart.html | |
| "状态机 / state machine / 状态图 / lifecycle" | State Machine | assets/diagrams/state-machine.html | |
| "时间线 / timeline / 里程碑 / milestones / roadmap" | Timeline | assets/diagrams/timeline.html | |
| "泳道图 / swimlane / 跨角色流程 / cross-team flow" | Swimlane | assets/diagrams/swimlane.html | |
| "树状图 / tree / hierarchy / 层级 / 组织架构" | Tree | assets/diagrams/tree.html | |
| "分层图 / layer stack / 分层架构 / OSI / stack" | Layer Stack | assets/diagrams/layer-stack.html | |
| "维恩图 / venn / 交集 / overlap / 集合关系" | Venn | assets/diagrams/venn.html | |
| "K 线 / candlestick / OHLC / 股价走势 / price history" | Candlestick | assets/diagrams/candlestick.html | |
| "瀑布图 / waterfall / 收入桥 / revenue bridge / decomposition" | Waterfall | assets/diagrams/waterfall.html |
Read references/diagrams.md before drawing - it has the selection guide, kami token map, and the AI-slop anti-pattern table. Extract the <svg> block from the template and drop it into a <figure> inside long-doc / portfolio.
Before drawing, always ask: would a well-written paragraph teach the reader less than this diagram? If no, don't draw.
Auto-select charts from data. When content contains numerical data, choose the chart type and embed it without waiting for the user to specify. Decision tree (first match wins):
| Data shape | Chart | |
|---|---|---|
| Has open/high/low/close fields, or per-day price | Candlestick | |
| Has + and - contributions that sum to a total (bridge, waterfall, P&L) | Waterfall | |
| One series, values sum to ~100%, items <= 6 | Donut | |
| One series, values sum to ~100%, items >= 7 | Horizontal bar | |
| Two or more series across time (months, quarters, years) | Line | |
| One series across time, large count changes dominate (not rate) | Bar | |
| Multiple categories, same time snapshot, 2+ series | Grouped bar | |
| 2x2 strategic or priority positioning | Quadrant | |
| Hierarchical data with depth >= 2 | Tree | |
| Process with decision branches | Flowchart | |
| Cross-team or cross-role process with >= 3 actors | Swimlane | |
| Set overlaps or shared attributes between 2-3 groups | Venn | |
| Category comparison, single series, no time axis | Bar |
When data fits multiple types, prefer the one that shows variance most clearly. Always embed inside a <figure> with a caption that states the insight, not just the data range.
Step 2.1 · Source and material pass
Run this before distilling or filling content when the document depends on facts or materials outside the user's draft. Skip it only for personal drafts where the user already supplied everything needed.
Source check
Trigger when the document mentions a specific company, product, person, release date, version, funding round, metric, market fact, technical spec, or any current fact likely to change.
- Use primary sources before writing: user-provided material, official site, docs, filings, press release, app store page, or repo release
- Keep a short note of source names and dates for facts that drive the document
- If sources conflict or a fact cannot be checked quickly, ask the user instead of choosing silently
- Avoid current-sounding claims such as "latest", "recent", "new", version numbers, launch dates, or financial figures unless they are checked
Material check
Trigger when the document is about a company, product, project, venue, or personal brand.
Confirm the materials that make the subject recognizable before layout:
| Need | Required when | Accept | |
|---|---|---|---|
| Logo | Any branded document | User file or official SVG/PNG | |
| Product image | Physical product / venue / object | Official image, user image, or marked gap | |
| UI screenshot | App / SaaS / website / tool | Current screenshot, official product image, or user capture | |
| Brand colors | Branded one-pager / portfolio / deck | Official value, extracted asset value, or keep kami ink-blue | |
| Fonts | Only if brand typography matters | Official font, close system fallback, or kami default |
If a required item is missing, use a compact gap table and ask once. Do not replace missing material with generic imagery, approximate logo drawings, or invented values.
Materials status block
After the material check, output a structured status block before continuing. This is a one-shot transparency display, not a question:
Use OK, MISSING, or not required. If a required item is missing and no user input arrived, ask once with the gap table; otherwise continue silently.
Step 2.5 · Distill raw content (if applicable)
Auto-detect whether to distill. Do not ask the user; judge from the input:
| Skip distill (fill directly) | Run distill | |
|---|---|---|
| Content has explicit section labels matching template structure | Raw prose without section structure | |
| Metrics already quantified with units in place | Numbers scattered or implied, not extracted | |
| User wrote "use this as-is" / "直接用这个" / "原封不动" | User pasted multi-source dump (chat / email thread / multiple docs) | |
| Content count matches template (e.g. 4 metrics for 4 metric cards) | Content count mismatches template (too many or too few items) | |
| One coherent voice with consistent claims | Conflicting claims or duplicate facts across sources |
When in doubt, run distill. Distill is cheap; rebuilding a misaligned doc is not.
When the user hands over raw material (meeting notes, brain dump, existing doc in different format, chat transcript, scattered points):
- Extract: pull out every factual claim, number, date, name, source, material reference, and action item
- Classify: map each extract to the target template's sections (see
references/writing.mdfor section structure per doc type) - Gap-check: list what the template needs but the raw content doesn't have - include missing facts, missing proof, and missing materials
- Ask once: share the gap table with the user. Do not guess to fill gaps.
Example gap-check:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.pack/skills/kami/SKILL.md
Popularity
- Repository stars
- 91
- Repository forks
- 10
- 7-day trend score
- 23
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/eliasoulkadi/shokunin/kami)