@codixus/mt
v0.3.13
Published
Cross-platform skill manager + dev shortcut CLI
Downloads
1,358
Maintainers
Readme
@codixus/mt
Cross-platform skill manager + dev shortcut CLI for Claude Code, Codex, Gemini CLI, Cursor and other AI coding agents.
Install
npm i -g @codixus/mt
# or
bun add -g @codixus/mtRequires Bun ≥1.0 (the CLI ships as .ts and runs through bun).
Skill manager
Subscribe to skill repos (public or private), install only what you need, sync across machines.
mt login # save GitHub PAT to ~/.mt/auth.json (chmod 600)
mt add anthropics/skills --path "skills/frontend-design" # cherry-pick a single skill
mt add me/private-skills --path "skills/*" --exclude "cxs-*" # subscribe to a whole repo with filters
mt sync # fetch + reconcile skills + shortcuts (idempotent)
mt list # show configured + installed
mt remove <name> # remove + reconcile orphans
mt skills disable <name> # exclude one skill from a repo subscription, delete its files now
mt skills enable <name> # clear the disable flag and sync it back inTwo scopes, auto-detected by cwd:
- Global (
~/.mt/): installs to~/.claude/,~/.codex/,~/.gemini/, etc. - Local (
<project>/.mt/): installs only to that project's.claude/etc.
Use --global or --local to override detection.
Per-name overrides live in skills.json's skills map, keyed by skill/command/agent leaf name:
{
"entries": [{ "name": "codixus", "repo": "codixus/skills", "path": "skills/*" }],
"skills": {
"cxs-app-audit": { "enabled": false },
"mtc": { "alias": "mt-commit" }
}
}enabled: false excludes that name from every future mt sync (whether it comes from a glob subscription or not) and deletes any previously-synced copy immediately; alias materialises a new short name as a copy of an existing leaf. mt skills disable/mt skills enable manage the enabled flag for you; alias entries are still hand-edited directly in skills.json.
Shell shortcuts
Cross-platform alias manager (bash, zsh, fish, PowerShell 7+).
mt shortcuts add b "bun install"
mt shortcuts add bt "bun test"
mt shortcuts add mkcd "mkdir -p {1} && cd {1}"
mt shortcuts sync # one-time: wires up your rc file
exec zsh
b foo # → bun install foo
mkcd test/dir # → mkdir -p test/dir && cd test/dirTemplated args use {N} / {@} placeholders; mt translates per shell.
Built-in utilities
mt kp 3000 5173 # kill processes on ports (cross-platform)
mt sv ./public -p 8080 # serve directory as static web server
mt open . # cross-platform Finder/Explorer/xdg-open
mt awake # block system/display sleep + screensaver until Ctrl+C
mt rimraf node_modules dist
mt compress *.png # lossless image compress in-place (with .bak)
mt convert webp *.png # batch format conversion (lossless quality 100)Supported image formats: PNG, JPG/JPEG, WebP, AVIF.
Linter
mt lint is a generic project linter — works in any project, not skill-specific. ~35 rules covering things ESLint doesn't: secrets (AWS/JWT/Stripe/GitHub PATs), AI-slop phrases, Turkish diacritics, typography (smart quotes, em-dash, mojibake), design tokens (off-scale px/rem, raw hex, magic z-index), markdown structure, cross-platform footguns, and i18n locale sync.
mt lint # lint staged files
mt lint --all # lint all tracked files
mt lint --fix # apply safe auto-fixes
mt lint init # write .mt/lint.json (auto-detects project type)
mt lint list-rules # show all rules + severity
mt lint explain <ruleId> # show rule detail
mt lint install-hook # install pre-commit hookAgent hooks (Claude Code + Codex)
Built-in hooks ship with mt and are merged into both ~/.claude/settings.json (Claude Code) and ~/.codex/hooks.json (Codex) on mt sync. Pick which ones you want via ~/.mt/hooks.json (include / exclude over predefined ids).
mt setup --profile mt --global # writes ~/.mt/hooks.json with include: ["*"]
mt hooks list # show built-in hooks + enabled state
mt hooks enable <id> # turn a hook on
mt hooks disable <id> # turn a hook off
mt hooks sync # reconcile both hook files nowShipped hooks:
| id | what it does |
|---|---|
| block-claude-coauthor | Blocks a Claude/Anthropic co-author trailer, a Generated with/by/using Claude Code trailer, or an @anthropic.com email — in git Bash calls and in file content (Write/Edit/MultiEdit on Claude Code, apply_patch added lines on Codex), closing the bypass of writing the trailer into a file and git commit -F-ing it. |
| block-em-en-dash | Blocks new content containing an em-dash or en-dash (AI-typography tell) — Write/Edit/MultiEdit on Claude Code, apply_patch added lines on Codex. The hook self-exempts edits to its own source under hooks/pretooluse/block-em-en-dash.{ts,partial.json,partial.codex.json}; for other files that legitimately contain those characters, run mt hooks disable block-em-en-dash first. |
| protect-hooks | Blocks Write/Edit/MultiEdit (Claude Code) and apply_patch (Codex) edits whose target is a managed hook source (hooks/pretooluse/*.{ts,partial.json,partial.codex.json}, hooks/lib/*.ts, hooks/registry.json, and anything under ~/.agents/hooks/), so the agent can't weaken or disable the guards by editing their source. To change a hook, run mt hooks disable <id> first, edit, then mt hooks sync. Covers file-tool edits only — not Bash sed/redirection, nor the merged settings.json/hooks.json. |
| inject-mt-start | SessionStart hook (fires on startup/clear/compact): injects the mt-start development-workflow skill into context, plus the workspace docs/MEMORY.md when present. Reads the installed skill at ~/.agents/skills/mt-start/SKILL.md (single source of truth, no duplication) and stays silent when it is absent. MEMORY.md path resolves from $MT_DOCS, then $WS/docs, then ~/Documents/Coding/docs. |
The merge is idempotent: managed handlers are matched by absolute script path under ~/.agents/hooks/, so user-added entries in either file are preserved untouched. Hooks are global only.
Codex note: Codex requires reviewing and trusting non-managed hooks before they run, keyed to the exact hook definition — after a sync adds or changes hooks, run /hooks inside Codex to trust them. Per-hook Codex variants live next to the Claude partials as *.partial.codex.json (the Claude partial is reused when no variant exists).
Skill authoring
If you maintain a skills repo, these helpers operate on the repo's skills/, commands/, and agents/ folders:
mt skills validate # check SKILL.md frontmatter + structure
mt skills new <name> # scaffold a new skill (SKILL.md template)
mt skills list # list skills + commands in this repoSelf-update
mt upgrade # re-install @codixus/mt@latest via your package managerConfiguration
mt uses a .mt/ config folder (npm-style global vs local).
| File | Purpose | Scope |
|---|---|---|
| skills.json | skill subscriptions + cherry-picks | global + local |
| shortcuts.json | shell aliases | global only |
| hooks.json | Claude Code hook include/exclude | global only |
| lint.json | lint rules + ignore patterns | global + local |
| manifest.json | mt's record of installed files (don't edit) | global + local |
| auth.json | GitHub token (chmod 600) | global only |
Auth chain (in order): ~/.mt/auth.json → $MT_GITHUB_TOKEN → $GITHUB_TOKEN → gh auth token. mt never embeds tokens; it delegates to whatever auth you already have.
License
MIT.
