Personal Claude Code plugins and skills.
/plugin marketplace add parmaster/claude-dlc
/plugin install <plugin-name>@parmaster-claude-dlc
Installed plugins stay pinned to their version. To pick up a newer one:
/plugin marketplace update parmaster-claude-dlc # refresh the catalog first
/plugin install <plugin-name>@parmaster-claude-dlc # re-running install is the upgrade
/reload-plugins
Skip the marketplace update step and install just says "already installed". To automate this, enable auto-update under /plugin → Marketplaces → parmaster-claude-dlc.
Every step is optional, drop in at any point:
flowchart TD
OV(["planning:oversight"])
BS(["brainstorm"])
PL(["planning:plan"])
RP(["planning:review-plan"])
RD(["revdiff:revdiff"])
IM["implement"]
DPR(["planning:pr"])
OV -.->|optional, multi-plan epics| PL
BS -.->|optional warmup| PL
PL -.->|optional| RP
PL -.->|optional| RD
PL --> IM
RP --> IM
RD --> IM
IM -.->|manual, when you want one| DPR
Custom status line (robbyrussell-style).
/plugin install statusline@parmaster-claude-dlc
Shows: current dir, git branch + dirty state (✗), model name, context %, 5h/7d usage rates with reset time.
After install, run claude --init-only once to trigger the setup hook — it writes statusLine into ~/.claude/settings.json. Then relaunch Claude normally.
Codex uses its native footer renderer. From this repository, run:
bash plugins/statusline/scripts/setup-codex.shRestart Codex after setup. The footer shows the current directory, Git branch, model and reasoning effort, context use, five-hour use, and weekly use. Codex controls the colors and labels; its native footer does not expose the Claude line's prompt symbol, dirty-tree marker, custom context color, or reset time.
Plans, plan reviews, a backlog, and PRs. Handing work to a fresh session goes through the agterm plugin below.
/plugin install planning@parmaster-claude-dlc
| Skill | What it does |
|---|---|
oversight |
Scopes a multi-plan epic: groups tickets into iterations, checks each against INVEST, sets an epic-level Definition of Done. Tracks progress in docs/plans/wbs-<epic>.md and can spawn a session per iteration through agterm:spawn-session. Meant to be revisited over the epic's lifetime. |
plan |
Writes docs/plans/YYYY-MM-DD-<name>.md at the level of intent: goal, decisions, constraints, traps (code that doesn't do what its name says, leftover state), and a Definition of Done where each item names its proof. No code — the implementer picks it. Test order follows the kind of change: a bug fix starts with a failing test that reproduces it, a refactor pins behavior with tests first. Sized to read and think through in about ten minutes; past ~150 lines it suggests splitting the change. Stops after writing the file. |
review-plan |
One review pass via a read-only plan-review subagent: does the DoD prove the intent, do the decisions hold up against the code, is a trap missing, is scope right. "Nothing to flag" is a normal result. Findings are "Should fix" or "Consider"; you pick which to apply. |
backlog |
Keeps deferred work in docs/backlog/<slug>.md, one file per item, triaged worth: yes/later/no. Lists items, walks them one at a time (--all) or opens one (<slug>) to fix or drop; a fix deletes the file in the same commit. --dashboard opens a searchable HTML page of the whole backlog. plan and review-plan feed it. Adapted from cc-thingz. |
pr |
Opens a draft PR from the plan file, or amends the description if a PR already exists. |
Without the agterm plugin, oversight prints the iteration prompt for you to paste into a session you open yourself.
Tip: to keep a long-lived oversight session's prompt cache warm between check-ins, run /loop 50m keepalive ping — no action, one-word ack in it.
Dialogue skills: one opens up an idea, the other narrows down an explanation.
/plugin install brainstorm@parmaster-claude-dlc
| Skill | What it does |
|---|---|
brainstorm |
Turns ideas into designs through one-at-a-time questions and incremental validation. |
converge |
The reverse of brainstorm: run it when an explanation gets too long to follow. The agent says what the task is in one sentence. Then you ask questions, and it answers each in one sentence. It does no work until you say go. |
Writing style for technical communication.
/plugin install style@parmaster-claude-dlc
| Skill | What it does |
|---|---|
writing-style |
Direct, brief style for PRs, tickets, issue comments, and commit messages. No AI-speak. |
/plugin install git-tools@parmaster-claude-dlc
| Skill | What it does |
|---|---|
squash-rebase |
Rebases onto main after a parent branch was squash-merged. Finds the cut point, shows what gets dropped vs replayed, and asks before running git rebase --onto. |
Helpers for agterm: open things in an overlay (a panel floating over the current session that closes on q (glow), Cmd-W or its close button), and hand a plan or a task off to a fresh session.
/plugin install agterm@parmaster-claude-dlc
| Skill | What it does |
|---|---|
overlay |
Opens a markdown file in glow, a local HTML file, or a URL. "Open the latest plan in glow" picks the newest file in docs/plans/, then docs/plans/completed/. Also triggers on "open in an overlay", "show <file.html> in agterm", "open in an overlay", or /agterm:overlay [file|url]. HTML files and URLs open with JavaScript off unless --js is added. |
handoff |
Sends a plan from docs/plans/ to a fresh agterm session on Claude or Codex. Explicit-only: /agterm:handoff [plan-file]. |
spawn-session |
Sends an arbitrary task to a fresh agterm session on Claude or Codex. Also triggers from natural language ("spawn a new session for this"). |
Claude hand-off sessions start in auto mode, or accept-edits when an org setting turns auto mode off. Hand-off sessions are flagged (agtermctl session flag on) so in-flight work shows up in agterm's flagged view.
A Claude session started by handoff or spawn-session knows which session started it: its prompt ends with a plain "Spawned from Claude session ." line (the name comes from ListAgents). The line carries no instruction, so the new session messages the parent only when you tell it to. Codex sessions don't get the footer.
A PreToolUse hook (approve-overlay) approves the overlay skill's own script calls, so it works in auto mode with no permission rule in settings. The hook approves only a single plain call of the plugin's overlay.sh with md, html or url, and stays silent for anything else. The script only ever runs agtermctl session overlay open|result against $AGTERM_SESSION_ID, and fails with a clear message outside agterm or when an overlay is already open. It can't run arbitrary programs; use agterm's own agterm skill for that.
Two custom commands for agterm's ~/.config/agterm/keymap.conf that open an overlay straight from a key, without going through Claude. Paste the ones you want, change the chords to taste, then run agtermctl keymap reload. Each is a single line.
Backlog Dashboard builds the planning plugin's backlog dashboard for the session's repo and opens it. It needs the planning plugin from this marketplace, git and jq. In a folder with no backlog it shows the reason as a short message.
command "Backlog Dashboard" cmd+shift+b cd "$AGT_SESSION_PWD" && f=$(bash ~/.claude/plugins/marketplaces/parmaster-claude-dlc/plugins/planning/scripts/backlog-dashboard.sh 2>&1) && { agtermctl session overlay open --html "$f" --cwd "$(dirname "$f")" --navigation --js --size-percent 90 --target "$AGT_SESSION_ID" --socket "$AGT_SOCKET"; exit; }; agtermctl session hud "${f:-Backlog Dashboard failed}" --hide-after 4 --target "$AGT_SESSION_ID" --socket "$AGT_SOCKET"
Glow Selection opens the selected file path in glow. With nothing selected it uses the clipboard.
command "Glow Selection" cmd+shift+g f=$AGT_SELECTION; [ -n "$f" ] || f=$(pbpaste); f=$(printf %s "$f" | head -1 | sed 's/^[[:space:]`]*//; s/[[:space:]`]*$//' | cut -c1-200); cd "$AGT_SESSION_PWD" && [ -f "$f" ] && { agtermctl session overlay open "zsh -lc 'glow -p \"\$1\"' glow $(printf %q "$f")" --cwd "$AGT_SESSION_PWD" --size-percent 90 --target "$AGT_SESSION_ID" --socket "$AGT_SOCKET"; exit; }; agtermctl session hud "Glow Selection: no such file: $f" --hide-after 4 --target "$AGT_SESSION_ID" --socket "$AGT_SOCKET"
Shared global CLAUDE.md rules, synced across machines.
/plugin install global-rules@parmaster-claude-dlc
Run claude --init-only once after install. The setup hook is additive and idempotent, and never overrides values you've set. It:
- adds an
@importline to~/.claude/CLAUDE.mdpointing at the plugin's rules - sets
CLAUDE_AFK_TIMEOUT_MSto 24h soAskUserQuestiondialogs don't auto-submit after 60s - denies
ScheduleWakeup(a bare/loopwith no interval then runs once;/loop <interval>still works) - sets
bashOutputMaxChars: 4000so large Bash output is saved to a file and previewed instead of flooding context - replaces the spinner's whimsical verbs ("Kerfuffling…") with
Thinking/Processing/Working - sets
attributionto{"commit": "", "pr": ""}so Claude Code doesn't add a Co-Authored-By trailer or PR attribution line
The rules cover plan-first workflow, git hygiene, tests and lint before commit, short and readable replies (with rules borrowed from ASD-STE100, Simplified Technical English), asking rich questions through huddle when it's installed, and memory and Atlassian MCP discipline.
| Hook | Effect |
|---|---|
block-root-find |
Denies find rooted at / or at a home dir (~, $HOME, /Users/<name>). Scope the search to a project directory. |
block-coauthor |
Denies git commit / gh pr create / gh pr edit with a Co-Authored-By line or a claude.ai session link (Claude-Session: trailer). |
block-comment-refs |
Denies Edit/Write when a new comment line in a code file points somewhere instead of explaining: a ticket ID, a Jira/Confluence/PR link, a commit SHA, a slice marker, or a path to a docs/plans/docs/specs doc. Standard names (UTF-8, SHA-256, RFC-7231…), Markdown and existing comments pass. |
style-reminder |
Adds a short reminder of the reply rules to every prompt: answer first, one idea per sentence, no noun stacks, keep the small words. Rules loaded at session start fade as the context grows; this keeps them near the end. About 60 tokens a prompt. Measured results are in tools/readability.md. |
Keeps Claude's Bash calls small and readable. It does three things:
- One command per call. With auto mode off, every Bash call that isn't on the allowlist asks for permission. Claude often glues several commands into one call, and no allow rule can match that.
block-chainedmakes Claude send one command per call, so your allow rules match. It does nothing in auto mode. - Quoted paths.
block-escaped-spacemakes Claude put the path in double quotes to avoid asking permissions to run backslash-escaped space, likeApplication\ Support. - Edits as diffs. Claude sometimes edits files through a python heredoc or
sed -i. To approve that, you have to decode a script to find the one line it changes.block-inline-editsends Claude to the Edit tool instead, so you see a diff. It runs in every mode, auto mode too, so the transcript shows readable diffs.
/plugin install strict-bash@parmaster-claude-dlc
Run claude --init-only once after install. The setup hook adds head, tail, grep, wc, sort, uniq and jq to permissions.allow in ~/.claude/settings.json. It only adds what's missing and never touches your other rules. It never adds xargs, sh or bash: anything piped into those can run any command.
| Hook | Effect |
|---|---|
block-chained |
Denies a Bash call that chains commands: &&, ||, ;, a background &, a newline between commands, $(...), backticks, <(...), loops and if/case blocks, ( ... ) / { ... } groups. The denial tells Claude to run each command as its own call. |
block-inline-edit |
Denies file edits through an inline python/node/ruby script or sed -i / perl -i, and points to the Edit tool instead. perl -i on docs/plans/ is allowed (checkbox ticking). |
block-escaped-space |
Denies a Bash call with a backslash-escaped space or tab outside quotes, and tells Claude to double-quote the path. Backslashes inside quotes pass. |
session-start |
Tells Claude the one-command-per-call rule when a session starts, resumes or is compacted, so it doesn't learn it from a denial, and to write paths out literally: a command with $VAR in it, like $TMPDIR/x.log, always prompts. It also says to double-quote a path with spaces. Also sets NO_COLOR=1 for Bash commands only (your terminal and Claude's own UI keep their colors), so Claude doesn't pipe output through sed to strip color codes. sed stays off the allowlist because it can write files. |
Pipes stay allowed. Claude Code checks each side of a pipe against your allow rules, so make test 2>&1 | tail -5 runs without a prompt once make test is allowed. Operators inside quotes or heredoc bodies are just text and pass. So does the "$(cat <<'EOF' ... EOF)" form Claude uses for multi-line commit messages. block-chained does nothing when the session is in bypassPermissions or auto mode.
Stops Claude from creating git worktrees. All work stays in the checkout you have open. Install it if a worktree only costs you:
- You never run two writing sessions in one repo, so you don't need the isolation.
- A worktree is a different folder, so the edits don't show in your open editor window.
- Your allow rules for the repo don't match the new folder, so with auto mode off every command prompts.
/plugin install no-worktrees@parmaster-claude-dlc
| Hook | Effect |
|---|---|
block-worktree-create |
Fails a worktree that Claude Code creates inside a session, such as for a subagent with isolation: "worktree". Claude sees the reason and carries on in the checkout. |
block-worktree-tools |
Denies the EnterWorktree tool and a Bash git worktree add, with or without global options such as -C <dir>. git worktree list, remove and prune stay allowed, so you can still clean up an old worktree. A mention inside quotes, like a commit message or a grep pattern, passes. |
The block runs in every permission mode. It covers what Claude does inside a session. Starting one with claude --worktree still works, because a plugin's hook does not fire for that flag. To allow worktrees again, disable the plugin in /plugin and run /reload-plugins.
claude --plugin-dir plugins/<name> # load a plugin straight from the working tree
/reload-plugins # pick up edits without restarting
To test the marketplace catalog itself, edit .claude-plugin/marketplace.json and re-run /plugin marketplace add parmaster/claude-dlc.