vmark
The Plain-Text Workspace Where Humans and AI Collaborate Free. Local-first. Format-aware. VMark is the plain-text workspace where humans and AI collaborate.
Natural-Language Programming Manager — score, check, fix, and test NL artifacts across Claude Code, Codex CLI, and Antigravity.
> /plugin marketplace add xiaolai/nlpm> /plugin install nlpm@xiaolai
Natural-Language Programming Manager — score, check, fix, and test NL artifacts across Claude Code, Codex CLI, and Antigravity. Tier-aware scoring with per-tool overlays.
Part of the xiaolai plugin marketplace.
NLPM includes multi-tool validation that checks manifest-vs-disk consistency — the bug class where a SKILL.md exists on disk but is silently missing from plugin.json (and therefore invisible after claude plugin install). Verified across 8+ tools including Anthropic's official plugin-validator and the Linux Foundation's skills-ref. See analysis/ecosystem-gap.md for the research.
NLPM treats natural language artifacts as programs that can be linted. Just as ESLint scores JavaScript and ruff scores Python, NLPM scores the markdown files that drive AI behavior: skills, agents, commands, rules, hooks, prompts, CLAUDE.md, and memory files.
Eight commands, each doing one thing:
| Command | What it does |
|---|---|
/nlpm:ls | Discover and inventory all NL artifacts in a repo |
/nlpm:score | Score artifact quality (100-point scale) |
/nlpm:check | Cross-component consistency checks |
/nlpm:fix | Auto-fix fixable issues |
/nlpm:trend | Track quality score trends over time |
/nlpm:test | Run NL artifact tests against spec files (TDD) |
/nlpm:init | Initialize NLPM for a project |
/nlpm:security-scan | Scan plugins for security risks in executable artifacts |
Slash commands ship as a Claude Code plugin. The scoring rubric covers three ecosystems (Claude Code, Codex CLI, Antigravity) via tier-aware overlays — see analysis/multi-tool-design-2026-05.md. The standalone Python 3.11+ validator (bin/nlpm-check) has no Claude Code dependency and runs in pre-commit hooks or CI on any tool's artifacts.
NLPM also runs as a self-evolving GitHub Actions pipeline that audits real plugin repos, contributes fix PRs, harvests teaching examples from clean ones, and feeds learnings back into its own rule catalog:
auditor/exemplars/ — 62 published so far, covering 31 of the 50 Rules with real-world positive references. See the gallery.auditor-cite-exemplars.yml runs weekly and opens a human-gated PR adding > Real-world example: [<repo>] links to skills/nlpm/rules/SKILL.md, so each rule documents both the bad case (in the rule body) and the good case (in a real repo).auditor/scripts/validate-rule-ids.py re-validates every audit's rule_id against the rubric (type drift) and the rule's title keywords (semantic drift). The 2026-05-13 sweep found 990 mislabeled rule_ids across 128 historical audits; the validator is now wired as a soft-warn telemetry step in every new audit so future drift is caught immediately.auditor/scripts/rule-health.py reports validated_hits per rule (raw hits minus drift hits) and exemplars_count per rule, so the "needs attention" view is calibrated against actual rule violations rather than scorer noise.Two install paths — both reach the same code. Pick one:
Via Anthropic's official community marketplace (curated; updates lag the maintainer's marketplace by up to ~24h):
claude plugin marketplace add anthropics/claude-plugins-community
claude plugin install nlpm@claude-community --scope project # or --scope user
Via the xiaolai marketplace (latest version lands here first):
claude plugin marketplace add xiaolai/claude-plugin-marketplace
# Project scope (recommended)
claude plugin install nlpm@xiaolai --scope project
# Global (all projects)
claude plugin install nlpm@xiaolai --scope user
Install fails with "Plugin not found in marketplace 'xiaolai'"? Your local marketplace clone is stale. Run
claude plugin marketplace update xiaolaiand retry —plugin installdoes not auto-refresh. (The community marketplace doesn't have this caveat.)
In Claude Code:
/nlpm:ls # see what NL artifacts you have
/nlpm:score # score them all
/nlpm:score agents/ # score just agents
/nlpm:score --changed # score only git-changed files
/nlpm:check # check cross-component consistency
/nlpm:fix # auto-fix what's fixable
/nlpm:trend # track score history over time
/nlpm:test # run NL-TDD specs
From CI or a pre-commit hook (no Claude Code required):
curl -fsSL -o /usr/local/bin/nlpm-check \
https://raw.githubusercontent.com/xiaolai/nlpm/main/bin/nlpm-check
chmod +x /usr/local/bin/nlpm-check
nlpm-check . # exit 1 on high-confidence findings
If you author a plugin and want NLPM in your pre-commit hook, CI, or pre-publish gate, use the standalone binary at bin/nlpm-check. It's a single Python 3.11+ file with no external dependencies. It runs the deterministic subset of /nlpm:check — including the manifest-vs-disk consistency check that no other validator (Anthropic's official plugin-validator, Linux Foundation's skills-ref, third-party tools) currently covers.
# One-line install
curl -fsSL -o /usr/local/bin/nlpm-check \
https://raw.githubusercontent.com/xiaolai/nlpm/main/bin/nlpm-check
chmod +x /usr/local/bin/nlpm-check
# Run in your plugin repo
nlpm-check .
Templates ship in templates/:
pre-commit-nlpm.sh — drop-in git pre-commit hookworkflows/nlpm-check.yml — drop-in GitHub Actions workflowSee docs/for-authors.md for the full author guide. See analysis/ecosystem-gap.md for the research on why this check exists and which other validators do (and don't) cover it.
Scores start at 100 and go down. Every issue has a fixed penalty. The score is deterministic: same artifact, same penalties, same number.
| Score | Band | Meaning |
|---|---|---|
| 90-100 | Excellent | Production-ready |
| 80-89 | Good | Minor gaps |
| 70-79 | Adequate | Meets threshold, should improve |
| 60-69 | Weak | Below threshold |
| <60 | Rewrite | Fundamental problems |
Default pass threshold: 70. Configure in .claude/nlpm.local.md.
See skills/nlpm/scoring/SKILL.md for the full penalty tables (the Codex, Antigravity, memory-file and workflow-program tables are in skills/nlpm/scoring/references/, indexed from SKILL.md). See skills/nlpm/rules/SKILL.md for the 50 Rules of Natural Language Programming.
20+ artifact types across one universal floor and three per-tool overlays. The scorer auto-classifies each artifact by its path (see agents/scorer.md step 3 for the tier classifier) and applies the matching rules.
| Tier | Artifacts |
|---|---|
| Universal (Tier 1, open spec at agentskills.io) | SKILL.md, AGENTS.md (canonical universal memory file, per nlpm decision) |
| Claude Code (Tier 2-Claude) | commands/, shared partials, agents/, skills/, hooks/hooks.json, .claude-plugin/plugin.json, .claude-plugin/marketplace.json, .mcp.json, CLAUDE.md, .claude/rules/, .claude/settings.json, .lsp.json, monitors/monitors.json, ~/.claude/projects/*/memory/*.md |
| Codex CLI (Tier 2-Codex) | .agents/skills/<n>/SKILL.md, .codex-plugin/plugin.json, .agents/plugins/marketplace.json, .codex/config.toml (TOML — [mcp_servers.*], [hooks.*], [agents] global settings), .codex/agents/*.toml (subagent definitions), .codex/hooks.json, agents/openai.yaml sidecar, root AGENTS.md (hierarchical) |
| Antigravity (Tier 2-Antigravity, advisory) | .gemini/skills/, .agent/skills/, .gemini/commands/<n>.toml, .gemini/settings.json (with embedded mcpServers + hooks), gemini-extension.json, GEMINI.md |
Write test specs BEFORE writing artifacts:
1. Write spec: .nlpm-test/my-agent.spec.md
2. /nlpm:test -> RED (artifact doesn't exist)
3. Write artifact: agents/my-agent.md
4. /nlpm:test -> check trigger accuracy, output format, score
5. /nlpm:score -> verify quality score
6. Iterate -> fix until GREEN
See skills/nlpm/testing/SKILL.md for the full spec format.
Create .claude/nlpm.local.md (or run /nlpm:init):
---
strictness: standard
score_threshold: 70
rule_overrides:
R09: { min_examples: 2 } # restore the stricter two-example bar
R05: { threshold: 600 } # allow skills up to 600 lines
R23: { budget: 800 } # increase rules budget
---
| Level | Threshold | Effect |
|---|---|---|
| Relaxed | 60 | Only flag seriously broken artifacts |
| Standard | 70 | Flag artifacts that need improvement |
| Strict | 80 | Flag anything below good quality |
NLPM ships a PostToolUse hook that fires when you write or edit files. A shell script (scripts/check-artifact.sh) classifies the file -- if it's an NL artifact, Claude reminds you to run /nlpm:score. Non-NL files produce no output.
This is advisory -- it does not block writes. For blocking enforcement, use a PreToolUse hook (see tdd-guardian for an example).
The Plain-Text Workspace Where Humans and AI Collaborate Free. Local-first. Format-aware. VMark is the plain-text workspace where humans and AI collaborate.
nlpm is a Claude Code plugin with 17 hand-picked skills, indexed on Flowy in the Skill Authoring category. Install it with the command on its page. It includes conventions-antigravity, conventions-claude, conventions-codex. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it