md-language-check
Use BEFORE saving any .md under .augment/, dist/agent-src*/, or agents/ — scans umlauts, German function words, and German phrases outside DE:/EN: anchor blocks. Hard gate per language-and-tone.
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 19
- Forks
- 1
01 前言 Front Matter
- name
- md-language-check
- packs
- [ "meta" ]
- scope
- { "write": [], "verification_reason": "the declared command is a read-only checker: grep -c 'writeFileSync|mkdirSync|appendFileSync' src/scripts/check_md_language.ts returns 0. Absence of a write is not something a command can prove." }
- domain
- process
- execution
- { "type": "assisted", "command": [ "./scripts-run", "src/scripts/check_md_language" ], "handler": "shell", "allowed_tools": [], "timeout_seconds": 30 }
- model_tier
- lite
- workspaces
- [ "agent-config-maintainer" ]
- description
- Use BEFORE saving any .md under .augment/, dist/agent-src*/, or agents/ — scans umlauts, German function words, and German phrases outside DE:/EN: anchor blocks. Hard gate per language-and-tone.
- runtime_requires
- { "bins": [ "bash", "node" ], "network": [] }
03 SKILL.md 正文
md-language-check
When to use
Fire this skill before writing or saving any .md file under:
src/(source of truth — skills, rules, commands, guidelines, templates, contexts)dist/agent-src/(condensed projection).augment/(local agent projection)agents/(project-specific roadmaps, contexts, sessions)
Per language-and-tone § ".md files
are ALWAYS English" and § Detection heuristic, every .md file in those
trees must be English. Bilingual content lives only in labeled
DE: … · EN: … anchor blocks.
Do NOT use when:
- Editing project content outside the trees listed above (READMEs of consumer projects, application docs that follow a different policy)
- Reviewing chat history files (
agents/runtime/.agent-chat-historyis JSONL, not.md) - Inspecting non-
.mdfiles — the checker rejects them with a warning
Procedure
1. Identify the file(s) about to be saved
Collect the absolute or repo-relative path of every .md file the
agent is about to create or modify in this turn. Multiple files in
one turn → pass them all to a single invocation.
2. Run the checker
./scripts-run src/scripts/check_md_language <path> [<path> …] [--format json]
Exit codes:
0→ no German content detected, save proceeds1→ violations found, save is blocked until they are resolved or explicitly suppressed3→ internal error (unreadable file, decode failure)
3. Resolve findings
For every violation:
| Kind | Likely cause | Fix |
|---|---|---|
umlaut |
German prose leaked into body text | Translate the sentence to English |
de_word |
German function word in unquoted prose | Translate; or move into a DE: … · EN: … block if intentional bilingual anchor |
If the line is meta-documentation that must quote German tokens
(e.g. the detection heuristic in language-and-tone.md itself),
append <!-- md-language-check: ignore --> at the end of that single
line — never as a wholesale silencer.
4. Re-run and confirm
After every fix, re-run the checker on the same paths. Save only
proceeds on exit 0.
Allowed escape hatches
- Labeled anchor block — lines starting with
DE:/- DE:/* DE:(and the same forEN:) are skipped automatically. Use this for intent-based opt-in / opt-out anchors. - Fenced code blocks —
\`` … ```` content is exempt, so shell snippets, JSON fixtures, and quoted user input in code blocks pass through untouched. - Inline code — backtick spans are stripped before scanning;
identifiers like
für_testinside backticks do not flag. - Per-line marker — append
<!-- md-language-check: ignore -->to a line that genuinely needs to quote a German token in body prose (rare; reserved for the rules that document the heuristic).
Output format
- One-line summary:
cleanorN violation(s) found - Per violation:
file:line — kind \match`` plus the offending line - Next action: translate, move into a
DE:/EN:block, add the per-line ignore marker, or revert the change
Gotchas
- The checker scans
.mdfiles only; passing a non-.mdpath emits a warning and skips it - The detection word list is intentionally short and conservative — a clean run is necessary but not sufficient; the agent still owns the final language judgement
- Frontmatter (
--- … ---at file head) is exempt; descriptions and YAML keys can use international characters where the schema allows
Do NOT
- Do NOT silence the checker by deleting trigger words from
src/scripts/check_md_language.ts; extend the allow-list (anchor blocks, ignore marker) instead - Do NOT add the ignore marker to body prose just to push a save through; the marker is for meta-documentation that quotes tokens, not a generic mute
- Do NOT skip the gate "because the file is small" —
language-and-tone§ Detection heuristic applies to every save under the four trees
Cloud Behavior
On cloud surfaces (Claude.ai Web, Skills API) the checker script is
not shipped, so this skill is inert — the agent applies the
heuristic from language-and-tone
manually before emitting the file.
04 同仓库更多 Skills
unknown-key-fixture
Declares a key the schema does not know.
portable-fixture
Declares only semantics the MCP-lite carrier transports whole.
non-portable-fixture
Declares a runtime semantic the carrier drops.
candidate-zero-width
A candidate whose prose carries an invisible joiner.
candidate-disclosure-suppression
A candidate whose prose tells the agent to withhold from the user.
candidate-dangerous-frontmatter
A candidate claiming an unscoped tool grant and a permission bypass.