Repo Mirror Sources
netdata/netdata
Inspect Netdata-org source checkouts under NETDATAREPOSDIR, or set up and synchronize that mirror when requested.
Probe the secure-agent setup for restrictions that block legitimate work — SSH agent reachability, port binding, containers, the scratch directory, the signing key, gh outside the sandbox, prek and…
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add apache/magpie --skill isolated-setup-doctor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install apache/magpie isolated-setup-doctor --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .claude/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .claude/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add apache/magpie --skill isolated-setup-doctor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install apache/magpie isolated-setup-doctor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .agents/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .agents/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/magpie --skill isolated-setup-doctor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install apache/magpie isolated-setup-doctor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .cursor/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .cursor/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/apache/magpie.git --path plugins/magpie-setup/skills/isolated-setup-doctor--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add apache/magpie --skill isolated-setup-doctor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install apache/magpie isolated-setup-doctor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .gemini/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .gemini/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install apache/magpie isolated-setup-doctorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add apache/magpie --skill isolated-setup-doctor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .github/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .github/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/magpie --skill isolated-setup-doctor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install apache/magpie isolated-setup-doctor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/magpie.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/magpie-setup/skills/isolated-setup-doctor .opencode/skills/isolated-setup-doctor && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "isolated-setup-doctor" agent skill from https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/isolated-setup-doctor into .opencode/skills/isolated-setup-doctor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isolated-setup-doctor", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
isolated-setup-doctorProbe the secure-agent setup for restrictions that block legitimate work — SSH agent reachability, port binding, containers, the scratch directory, the signing key, gh outside the sandbox, prek and…
Isolated Setup Doctor is an agent skill from apache/magpie. Probe the secure-agent setup for restrictions that block legitimate work — SSH agent reachability, port binding, containers, the scratch directory, the signing key, gh outside the sandbox, prek and uv inside it, the global git hook dir. Names the troubleshooting entry and settings fix for each. Read-only.
Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts (for example `scripts/README.md`, `scripts/probe-1-ssh-agent.sh` and `scripts/probe-2-localhost-bind.sh`).
It sits in DevOps & Cloud. It works with Git. The repository describes itself as: Agent-assisted maintainership and development framework for Apache projects — Triage, Mentoring, Drafting (agent-authored fixes with human review), and Pairing (developer-side… The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d1f8f2c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 10 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
bashghgitpodmanshFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Isolated Setup Doctor loads about 6.1k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 2,965 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
Failure mode: the framework denies `~/.ssh/` wholesale, so with `gpg.format=ssh` every signed commit fails before the hainside sandbox` | Fail | The sandbox's `~/.ssh/` read deny covers the public key; add that one file to `allowRead`. |Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from apache/magpie at commit d1f8f2c, republished under its Apache-2.0 licence (© apache). 2,965 words, ~6,109 tokens.
.claude/skills/isolated-setup-doctor/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.<!-- Placeholder convention (see AGENTS.md#placeholder-convention-used-in-skill-files):
<project-config> → adopting project's `.apache-magpie/` directory -->
Use the operator's explicitly requested runtime when supplied; otherwise use the active session's runtime. An installed executable or configuration directory alone does not select a runtime. For the routing below, treat that selection as the active harness.
When the active harness is Codex, first require the static verification in docs/adapters/codex.md, then run the shared live environment probes inside the active Codex sandbox.
Attribute failures separately to native sandbox/network denial, approval policy, or the POSIX agent-iso layer.
Do not prescribe a .claude settings change for a Codex failure.
Then stop before the Claude-specific branch below.
When the selected runtime is Gemini CLI, follow docs/adapters/gemini.md: verify the profile first, then diagnose the actual tool result in the active Gemini session. Distinguish policy refusal, sandbox expansion, hook or trust failures, and wrapper or authentication problems. Do not require Claude configuration or prescribe Claude settings changes; then stop before the Claude-specific probes below.
When the harness is Claude Code, continue below. If the harness cannot be determined, ask once.
This is the diagnostic layer over the secure agent setup.
verify checks statically that the setup is installed right, catching drift and missing pieces.
This skill checks whether common workflows are functionally blocked by the sandbox as configured, catching over-restrictive allowlists.
(install puts the setup in place; update reports framework drift.)
Run verify first when the install itself is in doubt: fresh machine, recent upgrade, sandbox-state surprise.
Run doctor when the install is known good and a workflow fails in a sandbox-shaped way: agent unreachable, socket error, port permission error.
Every probe maps to a numbered entry in docs/setup/sandbox-troubleshooting.md.
The doctor identifies which entry applies now; it does not re-explain the remediation.
If a fail shows a failure mode not catalogued there, propose appending a new entry per the catalog's Adding a new entry section.
dangerouslyDisableSandbox, and never installs anything.
If a check fails, surface it and point at the catalog entry; do not auto-fix.docker / podman on PATH → docker probe ⊘, not ✗).Could not open a connection to your authentication agent" is.docs/setup/sandbox-troubleshooting.md.
Do not paraphrase the remediation; the catalog is the single source of truth.The probes cover the catalog's failure modes that a sandboxed command can detect on its own; the signing entries that need a live touch or a terminal are verified by setup-isolated-setup-verify check 10 instead.
New probes are added when new entries land in the catalog, so the two stay in lock-step.
Tests whether ssh-agent is reachable from inside the sandbox.
Two failure modes:
SSH_AUTH_SOCK passes through claude-iso's env whitelist but the socket file is not in sandbox.filesystem.allowRead, so the agent's ssh / git push subprocesses cannot even stat(2) it;
or, on macOS, the file is readable but its path is missing from sandbox.network.allowUnixSockets, so connect(2) is denied and the agent looks unreachable while the socket is plainly there.
A signed commit hits the second as No private key found for public key.
Command:
bash <skill-dir>/scripts/probe-1-ssh-agent.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ N identities listed | Pass | ssh-add -l returned the key list. |
✓ agent reachable, no identities | Pass | ssh-add -l returned rc=1 (the documented "no keys" exit). |
✗ socket not stat-able | Fail | Sandbox blocks stat(2) on the socket file. |
✗ agent unreachable | Fail | Sandbox blocks connect(2) to the socket. |
⊘ SSH_AUTH_SOCK not set | Skip | Either the user does not run ssh-agent, or claude-iso's env whitelist dropped it (separate bug — verify). |
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — SSH agent / Yubikey appears unreachable from inside the sandbox.
Tests whether a process inside the sandbox can bind to a loopback port AND then talk to itself over loopback.
The catalog documents the second half failing (egress proxy blocks 127.0.0.1).
Command:
bash <skill-dir>/scripts/probe-2-localhost-bind.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ bound + loopback GET → HTTP 200 | Pass | Both bind and loopback HTTP work. |
✗ bind: [Errno 1] Operation not permitted | Fail | The sandbox refuses listening sockets outright; sandbox.network.allowLocalBinding is unset. Fails before any egress rule is consulted, so allowedDomains changes do not help. |
✗ bind: ... (other errno) | Fail | The sandbox blocks bind(2) on 127.0.0.1 for another reason. Rare; report the literal error. |
✗ bind ok, loopback GET: ... | Fail | Bind works but the sandbox egress proxy refuses 127.0.0.1 as a destination. Common shape. |
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — Test cannot bind to a localhost port.
Tests whether the runtime CLI can talk to the container gateway, not the real daemon socket; the sandbox never gets a route to the daemon itself.
Run it for each of podman / docker on PATH; ⊘ each one not installed (an absent prerequisite, not a sandbox failure).
The remaining checks narrow down which of the three wiring pieces (env var, running gateway, allowed socket) is missing, in the order a fresh install would hit them.
Command:
bash <skill-dir>/scripts/probe-3-container-gateway.shstatus_json comes from the gateway's own read-only status subcommand.
The doctor may call it from inside the sandbox, since it neither binds a socket nor touches the daemon.
gw_src picks the adopter's pinned snapshot (.apache-magpie/tools/container-gateway/src) when present, else the framework repo's own tree (tools/container-gateway/src), so the same probe runs in an adopter checkout and in this framework's own worktree.
The gw_state check runs before the raw socket-file test.
A backend that status does not list under serving never gets a socket file, so testing -S "$sock" first would misreport "gateway not running" for the "running, but this backend's machine/daemon is down" case.
The -S test is a defensive fallback for an already-serving backend whose socket vanished mid-probe, not the primary check.
Interpretation:
| Result | Status | Meaning |
|---|---|---|
✓ <rt> reaches the container gateway at <sock> | Pass | CLI → gateway → daemon all answer. |
✗ … unset — gateway not wired into settings | Fail | The reference env block is missing from project settings. |
✗ gateway socket missing | Fail | The SessionStart hook did not start the gateway, or it exited; check container-gateway.log in the gateway's run directory — <project>/.apache-magpie-local/run/ when adopted, else <git-common-dir>/apache-magpie/run/<worktree-id>/. |
✗ gateway running without a <rt> backend | Fail | status reports the gateway up but serving does not list this CLI's backend — the Podman machine or Docker daemon behind it is not running. Start it from outside the sandbox, then restart the gateway. |
✗ connect … denied | Fail | The gateway socket is not in sandbox.network.allowUnixSockets. |
✗ gateway up, backend down | Fail | Podman machine / Docker not running on the host; start it from your own terminal. |
✗ no response in 15s — <rt> info hung | Fail | _probe_timeout killed a stalled <rt> info call; the backend daemon behind the gateway is likely wedged — restart it from outside the sandbox. |
⊘ <rt> not on PATH | Skip | Runtime not installed; not a sandbox restriction. |
An empty podman machine list from inside the sandbox is a read denial on the machine's directory, not proof that no machine exists.
Decide the machine's real state from outside the sandbox, per the catalog entry below.
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — Docker / Podman command fails with a socket error.
TMPDIR)Tests whether the session has a writable scratch directory.
The sandbox mounts the host /tmp read-only and makes only specific subpaths writable, so a session whose TMPDIR falls back to /tmp has no scratch area at all.
TMPDIR landing on the shared session root rather than a per-project directory is not a finding.
Claude Code sets TMPDIR itself when it builds the sandbox, and that wins over env.TMPDIR from any settings file, so the shared root is expected and no configuration changes it.
Each session still gets a per-project, per-session scratchpad beneath it.
Command:
bash <skill-dir>/scripts/probe-4-scratch-dir.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ per-project + writable | Pass | TMPDIR resolves under this project's path slug and accepts writes. |
✓ writable; shared session root | Pass | The expected value on current Claude Code. Every project on the machine shares this directory, so write through the per-session scratchpad beneath it, or use unique filenames — but there is nothing to fix. |
✗ TMPDIR not set | Fail | Tooling falls back to /tmp, which is read-only inside the sandbox. |
✗ directory missing | Fail | TMPDIR names a path nothing has created yet. |
✗ not writable inside sandbox | Fail | TMPDIR points outside sandbox.filesystem.allowWrite. |
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — Temp files fail with "Read-only file system" under /tmp.
Do not propose env.TMPDIR in a settings file as the fix.
Claude Code overrides it when it builds the sandbox, so the setting is accepted and silently has no effect.
The giveaway is a directory that exists, is named exactly as configured, and stays empty.
The catalog entry above covers what is actually actionable.
gpg.format=ssh)Tests whether the public key git hands to ssh-keygen -Y sign can be opened from inside the sandbox.
Failure mode: the framework denies ~/.ssh/ wholesale, so with gpg.format=ssh every signed commit fails before the hardware key asks for a touch.
The touch overlay, which waits for ssh-keygen to block, never sees it block.
Command:
bash <skill-dir>/scripts/probe-5-signing-key.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ readable inside sandbox | Pass | ssh-keygen will be able to open the public key. |
✓ literal key | Pass | user.signingkey holds the key text itself; no file is involved. |
✗ not readable inside sandbox | Fail | The sandbox's ~/.ssh/ read deny covers the public key; add that one file to allowRead. |
⊘ gpg.format is not ssh | Skip | Signing goes through gpg (or is off); the agent-socket rules behind Probe 1 are what matter. |
⊘ user.signingkey unset | Skip | Misconfigured signing, not a sandbox problem — mention it, do not fail the probe. |
signing-program → ✓ | Pass | git's signing program (the touch overlay's gpg-touch-wrap-* wrapper, or whatever gpg.ssh.program / gpg.program names) can be started from inside the sandbox. Nothing printed when neither key is set: git uses its default ssh-keygen / gpg from PATH. |
signing-program → ✗ | Fail | The program git is configured to sign with is read-denied inside the sandbox — for the overlay wrapper, ~/.claude/scripts/ is. Every sandboxed signed commit fails at once with cannot exec; add the wrapper's two files to allowRead. |
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — Signed commit fails before any touch when git signs with ssh
for the key, and
docs/setup/sandbox-troubleshooting.md — Signed commit fails with "cannot exec" of the touch-overlay wrapper
for the program.
gh runs outside the sandboxTests whether gh can reach GitHub from a sandboxed Bash call, and if not, whether the sandbox.excludedCommands: ["gh *"] exclusion the framework reference relies on is in place.
On macOS a sandboxed gh cannot verify TLS or read the keychain (x509: OSStatus -26276 / HTTP 401), so only the exclusion makes it work.
The exclusion applies only when every segment of a Bash invocation is cd … or gh ….
The probe deliberately runs gh through sh -c so the exclusion cannot apply to it, showing what an un-excluded gh does on this machine.
Command:
bash <skill-dir>/scripts/probe-6-gh-outside-sandbox.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ gh works inside the sandbox | Pass | Platform lets gh verify TLS and read its token inside the sandbox (typical on Linux). |
✓ … "gh *" is in excludedCommands | Pass | The known macOS shape, and the framework's exclusion is present. Calls still fail if they are not cd/gh-only invocations — see the catalog entry. |
✗ … NOT found in excludedCommands | Fail | gh cannot work inside the sandbox on this machine and nothing runs it outside. |
⚠ gh failed for another reason | Warn | Not the catalogued shape (network down, not logged in, …); inspect the message. |
⚠ catch-all "Bash(gh *)" in permissions.ask | Warn | Ask beats allow regardless of specificity, so this rule prompts on every read-only gh call. Replace it with the explicit write-subcommand list from the reference .claude/settings.json. Extra line, printed after the main result. |
⊘ gh not on PATH | Skip | gh not installed; not a sandbox restriction. |
~/.claude/settings.json is usually unreadable from inside the sandbox, so the exclusion check may see only the project-scope files.
If the user keeps the exclusion at user scope, a ✗ here is a false alarm; say so when reporting.
Even with the exclusion present, a gh call is excluded only when every part of the Bash invocation is cd … or gh ….
A pipe, a $(…) substitution, a loop, or any file redirection (> file, even > /dev/null) puts it back in the sandbox.
The redirection case is a Claude Code regression tracked in anthropics/claude-code#95532; the catalog entry shows the gh tofile alias that works around it.
When the user reports a gh failure this probe does not reproduce, ask for the exact command line; the shape is usually the answer.
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — gh fails with TLS OSStatus -26276 or HTTP 401 inside the sandbox.
prek and uv usable inside the sandboxTests whether the dev tools the framework's hooks and Python tools run on are found and can write their cache from a sandboxed Bash call.
They live in ~/.local/bin, which the harness reads only when the worktree's .claude/settings.local.json grants it; the committed project-scope entries are not applied.
Inside the sandbox a read-denied directory looks exactly like an absent one, so the probe reads settings.local.json to tell a missing grant from a tool that is not installed.
Command:
bash <skill-dir>/scripts/probe-7-dev-tools.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ (found: …; ~/.cache writable) | Pass | prek / uv run inside the sandbox and can write their caches. |
✗ (found: …; ~/.cache not writable …) | Fail | The tools start but cannot write their cache or state. |
⚠ (… not found; ~/.local/bin is not in … settings.local.json) | Warn | The grant is missing; the tools are most likely installed but hidden. |
⊘ (… not found; ~/.local/bin is granted …) | Skip | The grant is present and neither tool is installed there; not a sandbox restriction. |
On ✗ or ⚠ → remediation:
docs/setup/sandbox-troubleshooting.md — prek or uv not found, or cannot write its cache, inside the sandbox.
Tests whether git run inside the sandbox can see the hooks a global core.hooksPath points at.
Git treats a hook it cannot see as one that does not exist, so an unreadable hook dir costs every hook — pre-commit and prek included — without an error.
Only a look from inside the sandbox shows it, which is where this probe runs.
Command:
bash <skill-dir>/scripts/probe-8-git-hooks.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ (… readable; hooks visible: …) | Pass | Sandboxed git runs the listed hooks. |
✗ (core.hooksPath … not readable inside sandbox …) | Fail | The hook dir is hidden; every sandboxed commit skips every hook. |
✗ (… readable, but not the target of: …) | Fail | The dir is visible but a hook's symlink target is not — typically hooks symlinked from a sync repo the sandbox does not grant. |
⚠ (… holds none of pre-commit, commit-msg, pre-push, post-checkout) | Warn | core.hooksPath is set to a dir with none of the common hooks; check it is the intended one. |
⊘ (no global core.hooksPath …) | Skip | Per-project scope: hooks live in each repo's .git/hooks, inside the project root. |
On ✗ → remediation:
docs/setup/sandbox-troubleshooting.md — Git hooks silently skipped for commits made inside the sandbox.
Tests whether, with permissions.blockReadsOutsideWorkingDirectories on, the two directories the skills read on every run are working directories: $HOME/.claude/magpie (the fixed path the vetted-ops rules name) and the scratch root /tmp/claude-<uid>.
Without them nothing breaks, but each read there prompts, and a bulk sync multiplies that by its gatherer agents.
The prompt comes before any command runs, so the sandbox-error hint hook never sees it; this probe is the only in-session pointer.
Command:
bash <skill-dir>/scripts/probe-9-working-dirs.shInterpretation:
| Result | Status | Meaning |
|---|---|---|
✓ … are working directories | Pass | Both resolved paths are listed (normally in .claude/settings.local.json, written by sandbox-add-project-root.sh). |
⚠ not a working directory: … | Warn | Each named path is missing; reads under it prompt. |
⚠ … the glob entry … is never matched | Warn | A glob such as /tmp/claude-* is listed as a working directory but does not match; replace it with the resolved path. |
⊘ … blockReadsOutsideWorkingDirectories is off | Skip | No read block, so nothing prompts. |
⊘ HOME is not set | Skip | The paths cannot be resolved; nothing to compare. |
⊘ … user-scope settings unreadable from the sandbox | Skip | The entries are missing from the readable project files, but the read block is usually set in user scope, which the sandbox cannot read; setup-isolated-setup-verify check 15 reads it from outside the sandbox. |
On ⚠ → remediation:
docs/setup/sandbox-troubleshooting.md — Reads of ~/.claude/magpie or /tmp/claude-<uid> ask for approval every time.
If every probe is ✓ or ⊘:
All nine probes pass (or are not applicable). The sandbox is not currently blocking the known failure modes catalogued in
docs/setup/sandbox-troubleshooting.md. If you hit a different sandbox-shaped failure, follow the catalog's Adding a new entry section and (optionally) extend this skill with another probe so future runs catch the same shape automatically.
If any probe is ✗:
setup-isolated-setup-doctor to confirm the probe now passes.If a probe surfaces a fail shape not catalogued in
docs/setup/sandbox-troubleshooting.md:
When the troubleshooting catalogue grows an entry, add a matching probe:
scripts/README.md.
© apache, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 10 other files (scripts) in plugins/magpie-setup/skills/isolated-setup-doctor of apache/magpie.
Open the folder on GitHubat commit d1f8f2c
Isolated Setup Doctor next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Isolated Setup Doctor this skillapache/magpie | 110 | — | ~6.1k | Automated safety check: Warn | Apache-2.0 | |
| Repo Mirror Sourcesnetdata/netdata | 81k | — | ~1.2k | Automated safety check: Notes | GPL-3.0 | |
| CI Failure Triage and RepairChachamaru127/claude-code-harness | 3.2k | 1 repos | ~1.1k | Automated safety check: Notes | MIT | |
| Bfe Rd Workflowbfenetworks/bfe | 6.3k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Ssh Skillbadseal/ssh-skill | 535 | — | ~2.4k | Automated safety check: Notes | None | |
| GreptimeDB Release RunbookGreptimeTeam/greptimedb | 6.7k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 |
netdata/netdata
Inspect Netdata-org source checkouts under NETDATAREPOSDIR, or set up and synchronize that mirror when requested.
Chachamaru127/claude-code-harness
Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.
bfenetworks/bfe
引导用户在 bfe 代码库中完成一次完整的功能研发流程,包括需求对齐、文档修改、代码实现、集成测试与回归验证. An agent skill from bfenetworks/bfe.
badseal/ssh-skill
A skill your agent uses when a task requires SSH or SCP/SFTP behavior, a remote server, server alias/IP/hostname/user@host, bastion or jump-host access, remote command execution, upload/download…
GreptimeTeam/greptimedb
Runbook for publishing a GreptimeDB version: pick the release branch, verify the Cargo version, then tag, create the GitHub release and open the docs note PR.
openclaw/crabbox
Gets you running your repository's tests in a disposable Docker or Podman container on your own machine with Crabbox, with no account and no cloud spend.
apache/magpie
Scan the release distribution area (dist/release/<project/ when releasedistbackend = svnpubsub, or the configured distribution location), identify releases past the project's retention rule, and…
apache/magpie
Read-only audit of GitHub Actions runner compatibility for one repository, a repository set, one Apache project, or the full Apache org.
apache/magpie
Add the Release Manager's public key to the project KEYS file: check it meets the ASF strength floor, draft the KEYS diff, and emit the svn (or backend) commands and keyserver reminder for the RM to…
apache/magpie
Print a human-readable index of every skill installed for this repository, grouped by the family each one declares, with the name to invoke it by and the first sentence of its description.
apache/magpie
Draft a teaching-register comment on a GitHub issue or PR thread on the configured <upstream repo, aimed at a contributor missing context the maintainer would spell out.
apache/magpie
Show how Magpie is adopted in this repo — install method and pin, drift, wired agent targets, installed skill families, symlink health — and change that wiring from the same view.
Works with
Categories
Probe the secure-agent setup for restrictions that block legitimate work — SSH agent reachability, port binding, containers, the scratch directory, the signing key, gh outside the sandbox, prek and…. Isolated Setup Doctor is an agent skill from apache/magpie. Probe the secure-agent setup for restrictions that block legitimate work — SSH agent reachability, port binding, containers, the scratch directory, the signing key, gh outside the sandbox, prek and uv inside it, the global git hook dir.
Isolated Setup Doctor fits situations like: devOps & Cloud work in your project.
Run `npx skills add apache/magpie --skill isolated-setup-doctor -a claude-code`. Or copy the skill folder (plugins/magpie-setup/skills/isolated-setup-doctor in apache/magpie) into .claude/skills/isolated-setup-doctor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add apache/magpie --skill isolated-setup-doctor -a codex`. Or copy the skill folder (plugins/magpie-setup/skills/isolated-setup-doctor in apache/magpie) into .agents/skills/isolated-setup-doctor in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add apache/magpie --skill isolated-setup-doctor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/isolated-setup-doctor, .gemini/skills/isolated-setup-doctor, .github/skills/isolated-setup-doctor and .opencode/skills/isolated-setup-doctor in your project.
Going by SKILL.md and its folder, Isolated Setup Doctor needs a shell for the scripts in its folder and the command-line tools its instructions call (bash, gh, git, podman and sh). Our summary lists: A Bash shell; Docker.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 2 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Isolated Setup Doctor is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Isolated Setup Doctor: Repo Mirror Sources (netdata/netdata, 81k stars), CI Failure Triage and Repair (Chachamaru127/claude-code-harness, 3.2k stars), Bfe Rd Workflow (bfenetworks/bfe, 6.3k stars) and Ssh Skill (badseal/ssh-skill, 535 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
apache (a GitHub organization) maintains it in apache/magpie, which has 110 GitHub stars. The repository holds 47 skills in this directory. The repository was last updated on October 6, 2026.
Source: apache/magpie on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.