Mirror the English fix from #131 into the translated docs. The precedence
table in 02-memory and the v2.1.119 /config notes still encoded the old,
incorrect order (user above project/local).
- vi/02-memory: table rows -> local(3) -> project(4) -> user(5, lowest)
- ja/02-memory: table rows reordered + /config note policy/local/project
- ja/10-cli: /config note chain -> policy -> local -> project -> user
- uk/02-memory: table rows reordered
Correct order per https://code.claude.com/docs/en/settings:
Managed -> CLI args -> Local -> Project -> User (lowest).
zh is missing the whole settings section (structural port), tracked
separately in #132.
Refs #132
- 10-cli/README.md: policy → local → project → user (was project → local → policy → user)
- 02-memory/README.md: reorder table levels 3/4/5 to local → project → user
- 02-memory/README.md: update note text to match corrected order
* docs: sync to Claude Code v2.1.156 and Claude Opus 4.8
Model bump Opus 4.7 -> Opus 4.8 and version sync v2.1.150 -> v2.1.156.
- Rewrite effort-ladder claims for Opus 4.8 (default `high`; `xhigh` on
4.8/4.7; `max` on 4.8/4.7/4.6 and Sonnet 4.6; Haiku has no effort).
- Replace soon-removed CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE with the
`/model claude-opus-4-6[1m]` + `/fast on` path; note Opus 4.8 fast mode.
- Bump lineup tables to Opus 4.8; fix Haiku 4.5 context (1M -> 200K).
- Sweep Compatible Models + version/date footers to 2.1.156 / May 29, 2026
across 23 English docs (incl. 2.1.138/2.1.145 stragglers).
- Re-document `/simplify` as a distinct cleanup-only command (v2.1.154).
- Add Dynamic Workflows + `/workflows`, MessageDisplay hook (count 29->30),
disallowed-tools frontmatter, `/reload-skills` + SessionStart outputs,
`/model` default-save inversion, lean system prompt, status-line
COLUMNS/LINES, and the ultracode `/effort` note.
* docs(cli): drop unverified fast-mode dollar pricing, keep verified rate/speed multipliers
* fix(i18n): re-point translations to code-review-specialist rename
The English code-review skill was renamed to code-review-specialist in #127
to avoid shadowing the new built-in /code-review command. Mirror that rename
across the uk, vi, ja, zh locales: rename each 03-skills/code-review/ directory
to code-review-specialist/, update the i18n-source markers in the moved ja
files, and fix path references in INDEX.md, QUICK_REFERENCE.md, and the vi
TRANSLATION_QUEUE.md.
* chore: ignore .asm-improver and .gitissue tooling state
* fix(i18n): re-point remaining code-review install paths to code-review-specialist
Follow-up to #123 — that PR fixed module README logo paths but missed
root-level translated files (README, INDEX, CATALOG, CONTRIBUTING,
STYLE_GUIDE, etc.) which had the same broken-path pattern: they used
`resources/logos/...` (root-relative) but live one directory deep, so
they resolved to `{lang}/resources/logos/...` and 404'd.
Fix: `resources/logos/...` → `../resources/logos/...` in the top
`<picture>` block of each translated root-level file.
For STYLE_GUIDE files, the in-code-fence `<picture>` example was left
as `resources/logos/...` to mirror the English source — it documents
the canonical pattern, not the path the file itself uses.
Files: zh/ (×9), uk/ (×4), vi/ (×2). ja/STYLE_GUIDE.md was already
correct.
Bumps tutorial coverage from v2.1.138 → v2.1.143. Highlights:
- /goal and /scroll-speed slash commands (v2.1.139)
- claude agents Agent View (Research Preview) with 9 dispatch flags
- claude plugin details and marketplace context-cost projection
- Hook exec form (args), continueOnBlock on PostToolUse, terminalSequence
- Stop hook 8-block safety cap + override env var
- Fast Mode default flipped to Opus 4.7 (v2.1.142)
- PowerShell tool default-on for Bedrock/Vertex/Foundry on Windows
- API-key auth disables Remote Control, /schedule, claude.ai MCP, notifications
- worktree.bgIsolation setting
- CLAUDE_PROJECT_DIR for MCP stdio servers
- Subagent OTEL headers + case-insensitive subagent_type matching
- Root-level SKILL.md plugin pattern; Routines marketing name note
Also bumps stale "28 hook events" counts in CATALOG/README to 29 and
refreshes the metadata footer (Last Updated, Claude Code Version,
Sources) on every modified file.
* feat(scripts): add static website generator from markdown sources (#85)
Generate an elegant, mobile-friendly static site from the existing
tutorial markdown files. The markdown remains the single source of
truth — `scripts/build_website.py` reads from the same `.md` files the
EPUB builder uses, rewrites cross-references to site URLs, and rewrites
references to non-markdown repo files (`.json`, `.sh`, `.py`) to
GitHub blob URLs so users can jump to the source on github.com.
Highlights:
- Reuses the chapter ordering convention from `build_epub.py`
- Anchor algorithm mirrors `check_cross_references.heading_to_anchor`
for parity with the validator
- Mermaid renders client-side via `mermaid.js` (no pre-render step)
- Tailwind CSS via CDN; light/dark theme toggle; sidebar nav; in-page
TOC; prev/next page navigation; mobile responsive
- 27 unit + smoke tests covering anchors, link rewriting (including
`<source srcset>` inside `<picture>`), Mermaid handling, and a full
end-to-end build
- GitHub Pages deploy workflow at `.github/workflows/pages.yml`
Closes#85
* fix(website): use relative URLs in sidebar nav and avoid INDEX.html collision
Two bugs found by local browser dogfooding:
1. **Sidebar nav broke from deep pages.** `build_navigation` emitted raw
`output_url` values (site-root-relative) which made every sidebar link
404 from any page below the root. Moved the call inside the per-page
render loop so each page gets nav links computed relative to its own
URL — `01-slash-commands/index.html` from the root, `../01-slash-commands/...`
from a depth-1 page, `../../01-slash-commands/...` from depth-2.
2. **`INDEX.md` overwrote `index.html`.** On case-insensitive filesystems
(macOS/Windows), `INDEX.html` and `index.html` are the same file, so
`INDEX.md` clobbered the rendered `README.md`. Added `_disambiguate_url`
that detects case-insensitive collisions and suffixes the colliding
page with its source stem (`INDEX-index.html`).
Added 2 tests; full suite stays at 83 passed.
* fix(scripts): skip URLs with port in localhost/127.0.0.1 skip list
`check_links.is_skipped()` did an exact-match comparison against the
host, so `http://localhost:8080` (used in scripts/README.md as a preview
example) was not skipped and CI's link check tried to fetch it, which
fails on the GitHub runner. Strip the port before comparing.
* chore(scripts): drop vestigial mypy ignore_errors for build_website
The override silenced all mypy errors for build_website, making the
"mypy: clean" claim technically vacuous. Removing it shows mypy is
actually clean — 0 issues on build_website after type annotations
were added during PR review.
* feat(website): self-host Tailwind, Mermaid, and Inter fonts
Drop all third-party CDN dependencies from rendered pages. The site
previously loaded Tailwind from cdn.tailwindcss.com (Play CDN — JIT
compile in browser, marked not-for-production), Mermaid from
cdn.jsdelivr.net, and Inter/JetBrains Mono from fonts.googleapis.com.
Replace with a vendored toolchain:
- scripts/vendor_assets.py downloads the Tailwind standalone CLI
(Go binary, no Node toolchain), Mermaid's UMD bundle, and Google
Fonts CSS + WOFF2 files. Cached under scripts/.vendor-cache/
(gitignored), refetched only when missing.
- Tailwind compiles a per-build site/assets/tailwind.css with only
the utility classes actually used by the rendered HTML.
- Mermaid and font files land in site/assets/vendor/ and load via
relative URLs.
- Tailwind config + entry CSS live in scripts/website_templates/
alongside the Jinja template.
- build_website grows a skip_vendor flag so the smoke test runs
offline.
- pre-commit mypy hook gets types-Markdown so it can resolve the
same imports as the project venv.
Verification: 86/86 pytest pass, ruff/mypy/bandit clean, full
build produces a working site with zero external requests (verified
in a headless browser — no console errors, no failed network calls,
Mermaid diagrams render).
* fix(website): use tree URLs for repo directory links (#85)
* fix(website): include additional top-level docs (#85)
Catches mechanical rendering bugs that look fine in a diff but render
wrong on GitHub / in the EPUB build: inner backticks inside inline-code
spans (PR #114), unescaped pipes in table cells (PR #115), stray
`$ARGUMENTS` outside code, and unmatched fences.
Scope: `**/README.md` across tutorial modules + translations (ja, uk,
vi, zh). Excludes dev tooling dirs (`.claude`, `.venv`, `openspec`, …).
Rule registry: each rule is `(Path, content) -> list[str]`. Adding a
new rule = one function + one registry entry + one test fixture.
- scripts/check_markdown_rendering.py: 4 rules, CommonMark-aware code-
span consumption, blockquote-fence-aware masking
- scripts/tests/test_check_markdown_rendering.py: 20 unit tests,
positive + negative per rule, currency-false-positive guard
- .pre-commit-config.yaml: new global `markdown-rendering` hook
Escape backticks across en/ja/uk/vi/zh slash-commands and skills modules so the literal `!`command`` syntax renders correctly instead of breaking the inline-code span.
Documents the v2.1.131 → v2.1.138 sync (PR #117) in the same format
as the v2.1.131 entry. Pattern caught during release-manager review;
the original sync PR did not include a CHANGELOG update.
Sync covers v2.1.128, v2.1.129, and v2.1.131 (May 2026). Highlights:
gateway /v1/models discovery is now opt-in (CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY),
added --plugin-url flag, disableRemoteControl setting, /mcp tool-count display,
expanded skillOverrides values, /context viz no longer leaks into conversation,
Ctrl+R cross-project default. Also reconciles slash-command count to 60+ and
fixes the skill-count entry in CATALOG.
The lesson-quiz skill had two issues:
1. Correct answers were always placed as the first option, making quizzes
trivially solvable
2. No feedback was given after each round — users had to wait until all
5 rounds were complete to see any results
Add a CRITICAL shuffle instruction requiring randomized option order for
each question, and update round flow to show immediate per-question
feedback after each round.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The code-review skill had templates/ and scripts/ directories alongside
SKILL.md, but SKILL.md never referenced them. Since Claude Code only
loads SKILL.md when a skill is invoked, the supporting files were
effectively invisible. This adds a Reference Files section that
instructs Claude to read and use each supporting file.
Closes#43
Co-authored-by: Paperclip <noreply@paperclip.ing>
- Replace fictional `/think` example with official `ultrathink` keyword
- Fix Q4 options: `/think` → `/effort max`, `--thinking` → `ultrathink`
- Fix Q5: correct the answer that "ultrathink" DOES trigger deep reasoning
- Sync changes across English, Ukrainian, and Vietnamese translations
Background: `/think` is not a valid slash command in Claude Code (verified
against official commands reference at code.claude.com/docs/en/commands).
The correct way to trigger deep reasoning for a single response is to
include "ultrathink" in the prompt.
Sources:
- https://code.claude.com/docs/en/commands (no /think command exists)
- https://code.claude.com/docs/en/model-config (ultrathink is valid keyword)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
The lesson quiz Q2 had `#` prefix as the correct answer for adding
memory rules, but the lesson README explicitly states this was
discontinued. Update answer to `/memory` or conversational request,
and fix a residual `#` prefix reference in the README's "Quick
update workflow" section.
Closes#106
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Remove the specific 21,800+ stars and 2,585+ forks numbers across en/zh/ja
READMEs. They go stale within a day of every commit. The Star History chart
already conveys current scale, and the trust bullets read fine without exact
counts.
- Backfill CHANGELOG.md with v2.4.0 entry summarizing the
v2.1.112 → v2.1.119 sync work
- Refresh SECURITY.md footer (Last Updated April 27, 2026;
Next Review April 2027)
- Fix model ID in 09-advanced-features/config-examples.json:
claude-opus-4 → claude-opus-4-7 (3 occurrences) for
consistency with documented model IDs
- Remove RELEASE_NOTES.md stub that duplicated and contradicted
CHANGELOG.md
Closes#99
- Replace shell-interpolated JSON build with the argv-based Python pattern
from session-end.sh, so notes containing quotes or backslashes don't
produce invalid JSON.
- Add mkdir/cp/chmod install block before the Configuration section so
the path in settings.json resolves to a real file.
Lesson 10 stated CLI > User > Project, contradicting Lesson 04 (CLI >
Project > User) and the official Claude Code docs. Project-level agents
override user-level agents when their names collide.
- Fix priority order in 10-cli/README.md (lines 437-439)
- Add cross-link to Lesson 04 for the full priority table
- Update matching quiz question Q7 in lesson-quiz question-bank
Closes#98
* feat(hooks): add SessionEnd progress logger and local progress tracker
Adds a SessionEnd hook that prompts for modules studied at session end
and appends a record to ~/.claude-howto-progress.json — outside the repo
so progress survives git pull without being overwritten.
Also adds local-progress/index.html: a self-contained visual tracker
with checkboxes for all 10 modules, per-module notes, an overall progress
bar, and Export/Import to sync with a local JSON backup file.
Key patterns demonstrated:
- SessionEnd vs Stop (fires once on exit, not after every response)
- /dev/tty for interactive input in hooks (stdin carries the JSON payload)
- $CLAUDE_PROJECT_DIR for portable paths (never hardcode /Users/...)
- Guard clause to prevent global hook running in unrelated projects
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix(hooks): address PR review — bash 3.2 compat, JSON escaping, textarea XSS
- Replace pipeline+while with IFS for-loop (bash 3.2 compatible)
- Pass NOTES as Python arg to avoid broken JSON on quotes/backslashes
- Set textarea.value instead of innerHTML to prevent XSS from imported JSON
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Per official docs (https://code.claude.com/docs/en/model-config#adjust-effort-level),
the `max` effort level is supported on Opus 4.7, Opus 4.6, and Sonnet 4.6 — not
Opus 4.7 only. Only `xhigh` is Opus 4.7 exclusive.
Updates 5 occurrences in 09-advanced-features/README.md to reflect the actual
support matrix:
- Opus 4.7: low, medium, high, xhigh, max
- Opus 4.6 / Sonnet 4.6: low, medium, high, max
uk/ and vi/ locales need a separate translation sync (still reference Opus 4.6
era only and lack xhigh entirely).
Split the "Skill" participant into two distinct entities to better
illustrate the three-level loading architecture:
- Skill Instructions (Level 2): SKILL.md body
- Skill Resources (Level 3): Bundled files (templates, scripts, etc.)
Also fixed inaccurate "bash: read" notation - Claude uses the Read
tool, not bash commands.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* test(scripts): cover repo-root boundary in check_cross_references
Locks in the boundary behavior added in #91: links resolving outside
the repo root are silently skipped, in-repo broken links still error,
and valid in-repo links still pass.
* test(scripts): cover missing-README detection in numbered lesson dirs
`(file_path.parent / link_path).resolve()` could silently follow a
crafted `../../outside/path` link that escapes the repository root.
Paths that resolve outside the repo root are now skipped rather than
checked for existence.
Co-authored-by: Claude Code <noreply@anthropic.com>
All 6 packages were fully unpinned, allowing a compromised upstream
release to silently introduce malicious code on `pip install`. Pin to
current stable versions to ensure reproducible, auditable builds.
Co-authored-by: Claude Code <noreply@anthropic.com>
`diff` is not a valid Claude Code tool name — the agent would silently
lose its diff capability at runtime. Use `bash` to invoke diff instead.
Applies to all four locales: en (07-plugins), vi, zh, uk.
Co-authored-by: Claude Code <noreply@anthropic.com>
Sync all English tutorials with Claude Code v2.1.112 and the new Opus 4.7
model (claude-opus-4-7). Introduces the xhigh effort level (new default on
Opus 4.7), two new built-in slash commands (/ultrareview,
/less-permission-prompts), auto mode without --enable-auto-mode for Max
subscribers on Opus 4.7, PowerShell tool on Windows, Auto-match-terminal
theme, and plan files named after prompts. All 18 EN doc footers bumped to
Claude Code v2.1.112.
Version callouts in README.md, zh/README.md, and uk/README.md updated to
v2.1.112. Changelog entry prepended.
Repo version now tracks Claude Code version (2.3.0 → 2.1.112 is intentional
per new convention).
* docs: sync to Claude Code v2.1.110 with TUI, push notifications, session recap, and new commands
- 01-slash-commands: add /tui, /focus, /recap, /undo, /proactive to command table and recent changes
- 07-plugins: document monitors manifest key for background monitor support (v2.1.105)
- 09-advanced-features: add TUI mode, push notifications, session recap, ENABLE_PROMPT_CACHING_1H
- 10-cli: add --exclude-dynamic-system-prompt-sections flag and CLAUDE_CODE_PERFORCE_MODE env var
- CATALOG.md: update command counts (55+→60+, 63+→68+), add 5 new command rows
- All 12 files: bump footer to April 16, 2026 / Claude Code Version 2.1.110
* fix(catalog): correct version tags for /proactive, /recap, /undo commands
/proactive was added in v2.1.105, /recap and /undo in v2.1.108 — not v2.1.110.
Only /tui and /focus were introduced in v2.1.110.
The pre-tool-check.sh example had three bugs rooted in the same
misunderstanding of the Claude Code PreToolUse hook protocol
(stdin/stdout/stderr + exit code contract):
1. Substring matching on `rm -rf /`
The pattern was unanchored, so grep treated it as a substring and
falsely blocked any command containing `rm -rf /` — including benign
calls like `rm -rf /tmp/build` or `rm -rf /var/cache/foo`. Fixed by
anchoring the slash to a whitespace-or-end-of-line boundary.
2. WARN tier was dead code
The warning layer printed to stderr and then `exit 0`. Claude Code
silently discards stderr on exit 0, so the warnings were never seen
by Claude, the user, or any log. Fixed by adding an audit log file
at `$CLAUDE_PROJECT_DIR/.claude/hooks/audit.log` that records every
invocation with its decision (BLOCK/WARN/ALLOW). The audit log is
now the reliable observability mechanism for the WARN tier.
3. BLOCK reasons printed to stdout instead of stderr
On `exit 2`, Claude Code reads stderr to surface the block reason
to Claude. The echoes before `exit 2` defaulted to stdout, so
Claude Code reported `"No stderr output"` and Claude had to read
the hook source file to infer why a command was blocked. Fixed by
explicitly redirecting the block-reason echoes to stderr with `>&2`.
Also escaped the regex metacharacters in the fork-bomb pattern
`:(){:|:&};:` so it matches literally under `grep -E`, and updated the
header docstring to document the stdout/stderr/exit-code convention so
future readers don't make the same mistakes.
Verified with 6 smoke tests covering: benign command (ALLOW), warn-tier
relative path, substring edge case (`rm -rf /tmp/...` no longer falsely
blocked), exact root match (`rm -rf /`, `rm -rf / ; echo` still blocked),
fork-bomb literal, and `git push --force` (WARN only). stdout is empty
in all cases; all reasons correctly routed to stderr or the audit log.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: sync to Claude Code v2.1.101 with new feature coverage
Bumps all English docs from v2.1.97 to v2.1.101, adds mandatory Sources
footer block (previously missing), and documents three new features
shipped between v2.1.98 and v2.1.101:
- /team-onboarding (v2.1.101) — new built-in command for generating
teammate ramp-up guides. Added to 01-slash-commands and CATALOG.
- /ultraplan (v2.1.91+, cloud-env auto-creation in v2.1.101) — full
section in 09-advanced-features covering launch methods, status
indicators, and execution options. Replaces prior 3-line stub.
- Monitor tool (v2.1.98) — full section in 09-advanced-features with
stream-filter and poll-emit patterns and the grep --line-buffered
warning. Added to resources.md feature table.
Vietnamese and Chinese translations are not touched in this sync.
* fix(docs): address review feedback on v2.1.101 sync
- Correct /team-onboarding availability date (April 10 → April 11, 2026)
- Fix uninitialized \$last variable in Monitor poll-and-emit example
- Update CATALOG.md New Features heading to April 2026 and add Monitor
Tool, /team-onboarding, and Ultraplan auto-create entries
- Replace 3KB stub README with full 31KB translation matching original structure
- Fix apostrophe anchor mismatch in 04-subagents (U+02BC vs U+0027)
- Fix duplicate heading in 06-hooks (Prompt-хуки → Хуки на основі промптів)
Ref: luongnv89/claude-howto#63