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.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add event4u-app/agent-config --skill md-language-check --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Md Language Check?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/event4u-app-md-language-check-agent-config)More formats (shields.io, HTML) on the badges page.
---
model_tier: lite
name: md-language-check
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."
domain: process
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."
execution:
type: assisted
handler: shell
timeout_seconds: 30
allowed_tools: []
command:
- ./scripts-run
- src/scripts/check_md_language
runtime_requires:
bins:
- bash
- node
network: []
workspaces:
- agent-config-maintainer
packs:
- meta
---
# 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`](../../rules/language-and-tone.md) § "`.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-history` is JSONL, not `.md`)
- Inspecting non-`.md` files — 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
```bash
./scripts-run src/scripts/check_md_language <path> [<path> …] [--format json]
```
Exit codes:
- `0` → no German content detected, save proceeds
- `1` → violations found, save is **blocked** until they are resolved
or explicitly suppressed
- `3` → 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 for `EN:`) 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_test` inside 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
1. One-line summary: `clean` or `N violation(s) found`
2. Per violation: `file:line — kind \`match\`` plus the offending line
3. Next action: translate, move into a `DE:`/`EN:` block, add the
per-line ignore marker, or revert the change
## Gotchas
- The checker scans `.md` files only; passing a non-`.md` path 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`](../../rules/language-and-tone.md)
manually before emitting the file.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!