System Requirements
This repository is a Claude Code configuration, not a standalone application. To use it as intended, you need Claude Code itself plus the local tools, hooks, and plugins that the checked-in configuration expects.
The list below is based on the codebase itself: settings.json, hook scripts, plugin commands, Python modules, tests, and local automation files.
Requirement Matrix
| Component | Why the repository expects it | Required? |
|---|---|---|
| Python 3.10+ | myk-claude-tools declares requires-python = ">=3.10" |
Yes |
uv |
Runs all Python hooks and is the expected Python entrypoint | Yes |
git |
Required by repo-aware CLI flows such as reviews and releases | Yes |
myk-claude-tools |
Required by the myk-github and myk-review slash commands |
Yes for those plugins |
superpowers, pr-review-toolkit, feature-dev plugins |
Power the mandatory 3-agent review loop | Yes |
gh |
Needed for GitHub PR, review, diff, release, and API operations | Required for GitHub workflows |
jq |
Used by the status line and notification hook; checked at session start | Recommended, practically required for stock setup |
gawk |
Checked as part of the expected AI review handler toolchain | Recommended |
prek |
Required for this repo’s pre-commit workflow; direct pre-commit ... is blocked |
Recommended, effectively required here |
mcpl |
Required if you use MCP server discovery and execution | Optional |
acpx |
Required only for the optional myk-acpx plugin |
Optional |
notify-send |
Needed only for the Linux desktop notification hook | Optional, Linux-only |
Core Runtime
The packaged CLI and Python tooling require Python 3.10 or newer, and the repository is wired to run Python through uv.
[project]
name = "myk-claude-tools"
version = "1.7.2"
description = "CLI utilities for Claude Code plugins"
readme = "README.md"
license = "MIT"
requires-python = ">=3.10"
authors = [{ name = "myk-org" }]
keywords = ["claude", "cli", "github", "code-review"]
[project.scripts]
myk-claude-tools = "myk_claude_tools.cli:main"
The checked-in Claude settings run the hook scripts with uv run, so uv is not optional if you want the configuration to work as shipped.
"PreToolUse": [
{
"matcher": "TodoWrite|Bash",
"hooks": [
{
"type": "command",
"command": "uv run ~/.claude/scripts/rule-enforcer.py"
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "uv run ~/.claude/scripts/git-protection.py"
}
]
},
{
"matcher": "Bash",
"hooks": [
{
"type": "prompt",
"prompt": "You are a security gate protecting against catastrophic OS destruction. Analyze: $ARGUMENTS\n\nBLOCK if the command would:\n- Delete system directories: /, /boot, /etc, /usr, /bin, /sbin, /lib, /var, /home\n- Write to disk devices: dd to /dev/sda, /dev/nvme, etc.\n- Format filesystems: mkfs on any device\n- Remove critical files: /etc/fstab, /etc/passwd, /etc/shadow, kernel/initramfs\n- Recursive delete with sudo or as root\n- Chain destructive commands after safe ones using &&, ;, |, ||\n\nASK (requires user confirmation) if:\n- Command uses sudo but is not clearly destructive\n- Deletes files outside system directories but looks risky\n\nALLOW all other commands - this gate only guards against OS destruction.\n\nIMPORTANT: Use your judgment. If a command seems potentially destructive even if not explicitly listed above, ASK the user for confirmation.\n\nRespond with JSON: {\"decision\": \"approve\" or \"block\" or \"ask\", \"reason\": \"brief explanation\"}",
"timeout": 10000
}
]
}
],
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "uv run ~/.claude/scripts/rule-injector.py"
git is also part of the expected baseline. It is not just for cloning the repo; several Python modules call it directly to find branches, roots, tags, and diffs.
Warning: If
uvis missing, the hook system insettings.jsoncannot run as configured.
Startup Checks
The session-start hook is the clearest summary of what this configuration expects to find on your machine.
# CRITICAL: uv - Required for Python hooks
if ! command -v uv &>/dev/null; then
missing_critical+=("[CRITICAL] uv - Required for running Python hooks
Install: https://docs.astral.sh/uv/")
fi
# OPTIONAL: gh - Only check if this is a GitHub repository
if git remote -v 2>/dev/null | grep -q "github.com"; then
if ! command -v gh &>/dev/null; then
missing_optional+=("[OPTIONAL] gh - Required for GitHub operations (PRs, issues, releases)
Install: https://cli.github.com/")
fi
fi
# OPTIONAL: jq - Required for AI review handlers
if ! command -v jq &>/dev/null; then
missing_optional+=("[OPTIONAL] jq - Required for AI review handlers (JSON processing)
Install: https://stedolan.github.io/jq/download/")
fi
# OPTIONAL: gawk - Required for AI review handlers
if ! command -v gawk &>/dev/null; then
missing_optional+=("[OPTIONAL] gawk - Required for AI review handlers (text processing)
Install: brew install gawk (macOS) or apt install gawk (Linux)")
fi
# OPTIONAL: prek - Only check if .pre-commit-config.yaml exists
if [[ -f ".pre-commit-config.yaml" ]]; then
if ! command -v prek &>/dev/null; then
missing_optional+=("[OPTIONAL] prek - Required for pre-commit hooks (detected .pre-commit-config.yaml)
Install: https://github.com/j178/prek")
fi
fi
# OPTIONAL: mcpl - MCP Launchpad (always check)
if ! command -v mcpl &>/dev/null; then
missing_optional+=("[OPTIONAL] mcpl - MCP Launchpad for MCP server access
Install: https://github.com/kenneth-liao/mcp-launchpad")
fi
# CRITICAL: Review plugins - Required for mandatory code review loop
critical_marketplace_plugins=(
pr-review-toolkit
superpowers
feature-dev
)
Two details are worth calling out:
gh,jq,gawk,prek, andmcplare reported as optional by the startup script, but several project features stop working without them.- This repo contains
.pre-commit-config.yaml, so theprekcheck is active here.
Note:
gawkis only explicitly checked by the startup script in this repository. That means it is part of the supported review-processing environment, even though the critical hooks do not hard-fail if it is missing.
uv Instead of Raw Python or pre-commit
The rule-enforcer hook blocks direct Python and direct pre-commit usage. The expected workflow is uv run, uvx, and prek.
def is_forbidden_python_command(command: str) -> bool:
"""Check if command uses python/pip directly instead of uv."""
cmd = command.strip().lower()
# Allow uv/uvx commands
if cmd.startswith(("uv ", "uvx ")):
return False
# Block direct python/pip
forbidden = ("python ", "python3 ", "pip ", "pip3 ")
return cmd.startswith(forbidden)
def is_forbidden_precommit_command(command: str) -> bool:
"""Check if command uses pre-commit directly instead of prek."""
cmd = command.strip().lower()
# Block direct pre-commit commands
return cmd.startswith("pre-commit ")
In practice, that means:
- Use
uv run ...for Python scripts. - Use
uvx ...for Python-based CLI tools. - Use
prek run --all-filesinstead ofpre-commit run --all-files.
tests/test_rule_enforcer.py backs this up: it explicitly allows uv/uvx and prek, and explicitly denies direct pre-commit ... commands.
Warning: If you already use
pre-commitdirectly in other projects, do not assume that will work here. This repo’s hook logic is written to reject that path.
Review Plugins Are Mandatory
This configuration enforces a 3-reviewer loop for code changes. Those reviewers come from official Claude plugins, and the workflow depends on them being installed.
Three plugin agents review code in parallel for comprehensive coverage:
| Agent | Focus |
|---|---|
| `superpowers:code-reviewer` | General code quality and maintainability |
| `pr-review-toolkit:code-reviewer` | Project guidelines and style adherence (CLAUDE.md) |
| `feature-dev:code-reviewer` | Bugs, logic errors, and security vulnerabilities |
**All 3 MUST be invoked in the same assistant turn as 3 parallel Task tool calls (one response containing 3 Task invocations, not sequential messages).**
If you want the configuration to behave the way the rules describe, install:
superpowers@claude-plugins-officialpr-review-toolkit@claude-plugins-officialfeature-dev@claude-plugins-official
The checked-in settings.json also enables a larger set of optional marketplace plugins, including coderabbit, github, code-review, code-simplifier, frontend-design, security-guidance, pyright-lsp, gopls-lsp, jdtls-lsp, lua-lsp, playground, commit-commands, claude-code-setup, and claude-md-management. Those are enhancements, not the hard minimum.
Warning: Skipping the three review plugins breaks the repository’s mandatory review loop, even if everything else is installed.
Shipped Plugins From This Repo
The repository’s marketplace manifest ships three plugins of its own:
myk-githubmyk-reviewmyk-acpx
Those are declared in .claude-plugin/marketplace.json, and settings.json enables them as myk-github@myk-org, myk-review@myk-org, and myk-acpx@myk-org.
If you plan to use the repo’s slash commands, install the relevant plugin packages through Claude Code’s plugin system.
myk-claude-tools Is Required for myk-github and myk-review
The repo’s GitHub and review plugins rely on the packaged myk-claude-tools CLI. The command definitions repeatedly check for it and tell users to install it with uv.
Examples in the command files include:
myk-claude-tools --versionuv tool install myk-claude-tools
That dependency is not theoretical. The myk-github and myk-review commands are designed around myk-claude-tools pr ..., myk-claude-tools reviews ..., myk-claude-tools db ..., and myk-claude-tools release ....
Tip: If you only want the hook behavior and do not plan to use
/myk-github:*or/myk-review:*, you can postpone installingmyk-claude-tools. For the slash commands themselves, it is required.
GitHub CLI (gh) and Authentication
gh is where the repo draws an important line between "startup can continue" and "feature works correctly."
The startup checker only marks gh as optional for GitHub repos, but the actual CLI commands that fetch PRs, diffs, and release metadata fail without it.
def check_dependencies() -> None:
"""Check required dependencies."""
for cmd in ("gh", "git"):
if shutil.which(cmd) is None:
print_stderr(f"Error: '{cmd}' is required but not installed.")
sys.exit(1)
for target_repo in repos_to_try:
cmd = ["gh", "pr", "view", current_branch, "--json", "number", "--jq", ".number"]
if target_repo:
cmd.extend(["-R", target_repo])
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
if result.returncode == 0 and result.stdout.strip():
pr_number = result.stdout.strip()
matched_repo = target_repo
if target_repo:
print_stderr(f"Found PR #{pr_number} on upstream ({target_repo})")
break
except subprocess.TimeoutExpired:
continue
# Fall back to gh repo view for the default repo
try:
result = subprocess.run(
["gh", "repo", "view", "--json", "owner,name", "-q", '.owner.login + "/" + .name'],
Other modules do the same:
myk_claude_tools/pr/diff.pyusesgh apiandgh pr diff.myk_claude_tools/release/info.pytreats bothghandgitas required for release info.- The
myk-githubplugin command definitions usegh pr view,gh repo view, andgh pr create.
That means you need both:
- the
ghbinary installed - a working
ghlogin with access to the repositories you want to operate on
Warning: Installing
ghis not enough by itself. Review, diff, PR, and release flows assumeghcan successfully callgh api,gh pr view, andgh repo viewagainst your GitHub account.
There is one notable exception: scripts/git-protection.py uses gh opportunistically to detect merged PRs, but it tolerates a missing gh and falls back gracefully. tests/test_get_all_reviews.py and tests/test_git_protection.py cover that difference.
jq, notify-send, and the Stock UI Hooks
The repo’s stock status line parses JSON with jq, and the notification hook requires both jq and notify-send.
model_name=$(echo "$input" | jq -r '.model.display_name')
current_dir=$(echo "$input" | jq -r '.workspace.current_dir')
# Get context usage percentage (pre-calculated by Claude Code v2.1.6+)
context_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
# Check for required commands
for cmd in jq notify-send; do
if ! command -v "$cmd" &>/dev/null; then
echo "Error: Required command '$cmd' not found" >&2
exit 1
fi
done
For a stock Linux setup, install both.
On non-Linux systems, or if you do not want desktop notifications, you can treat notify-send as optional and adjust the hook to match your platform.
Note:
jqis labeled optional in the startup script, but it is a practical day-one dependency if you keep the checked-in status line and notifier enabled.
mcpl for MCP Servers
If you use MCP-backed workflows, this repo expects mcpl as the command-line entrypoint.
| Command | Purpose |
|----------------------------------------------|-----------------------------------------------------|
| `mcpl search "<query>"` | Search all tools (shows required params, 5 results) |
| `mcpl search "<query>" --limit N` | Search with more results |
| `mcpl list` | List all MCP servers |
| `mcpl list <server>` | List tools for a server (shows required params) |
| `mcpl inspect <server> <tool>` | Get full schema |
| `mcpl inspect <server> <tool> --example` | Get schema + example call |
| `mcpl call <server> <tool> '{}'` | Execute tool (no arguments) |
| `mcpl call <server> <tool> '{"param": "v"}'` | Execute tool with arguments |
| `mcpl verify` | Test all server connections |
settings.json also explicitly allows Bash(mcpl:*).
If you never use MCP servers, you can skip mcpl. If you do use them, install it before relying on MCP-related rules or commands.
Optional acpx Support
myk-acpx is shipped and enabled in settings.json, but its own command file treats acpx as optional and prompts users to install it only when needed.
### Step 1: Prerequisites Check
#### 1a: Check acpx
```bash
acpx --version
If not found, ask the user via AskUserQuestion:
"acpx is not installed. It provides structured access to multiple coding agents (Codex, Cursor, Gemini, etc.) via the Agent Client Protocol.
Install it now?"
Options:
- Yes (Recommended) — Install globally with
npm install -g acpx@latest - No — Abort
If user selects Yes, run:
npm install -g acpx@latest
Verify installation:
acpx --version
If you want `/myk-acpx:prompt`, you need:
- `acpx`
- the underlying target agent CLI you want `acpx` to wrap, such as Cursor, Codex, Gemini, or Copilot
If you do not use `myk-acpx`, you can skip this entire dependency chain.
## Local Validation Model
This repository does not define GitHub Actions workflows under `.github/workflows/`. Its automation model is local-first:
- Claude hooks are defined in `settings.json`
- test execution is defined in `tox.toml`
- pre-commit hooks are defined in `.pre-commit-config.yaml`
- the supported wrapper for pre-commit is `prek`
`tox.toml` shows the expected test command:
```1:7:tox.toml
skipsdist = true
envlist = ["unittests"]
[env.unittests]
description = "Run pytest tests"
deps = ["uv"]
commands = [["uv", "run", "--group", "tests", "pytest", "tests"]]
That means you do not need to provision CI runners just to use the repo. You do need the local CLI toolchain that those hooks and test commands expect.
Note: In this repo, "CI/CD requirements" mostly translate to local hook and validation requirements, not hosted workflow requirements.
Quick Verification Checklist
Run the commands below after installing the toolchain you need:
uv --version
myk-claude-tools --version
gh repo view --json nameWithOwner -q .nameWithOwner
prek run --all-files
mcpl verify
acpx --version
uv run --group tests pytest tests
Use the ones that match the features you plan to use:
- Always verify
uv. - Verify
myk-claude-toolsif you plan to usemyk-githubormyk-review. - Verify
ghagainst a real repository if you plan to use PR, review, or release features. - Verify
prekin this repository, because.pre-commit-config.yamlis present. - Verify
mcplonly if you use MCP integrations. - Verify
acpxonly if you usemyk-acpx.
Tip:
~/.claude/scripts/session-start-check.shis the fastest way to surface missing critical and optional requirements in one pass.