Workflow skills for Claude Code and Codex.
Claude Code:
/plugin marketplace add killallgit/killall-skills
/plugin install killall-skills@killallgit
Codex:
codex plugin marketplace add killallgit/killall-skills
codex plugin add killall-skills@killallgit
killall-skills installs every skill. To install one, use its name instead,
for example git-janitor@killallgit. Pick either the bundle or individual
skills, not both.
Any host, skills only, through the skills CLI:
npx skills add killallgit/killall-skills
Claude Code runs a skill as /name; Codex runs it as $name.
/ship opens a PR, waits for CodeRabbit, fixes its findings, merges, syncs
main, and runs the git janitor. A rate-limited or skipped CodeRabbit review is
restarted with an @coderabbitai review comment; if it still does not review,
ship stops and asks you. It calls the wait-for-action and git-janitor
skills, so install the bundle or those two alongside ship.
.claude-plugin/marketplace.json is generated from each skill's SKILL.md
frontmatter and marketplace.config.json; Claude Code and Codex both read it.
After adding, renaming, or editing a skill description:
task manifests
CI fails when the committed file is out of date.
A skill can ship hooks in skills/<name>/hooks/hooks.json; the generator inlines
them into that skill's entry and into the killall-skills bundle.
To release, run one of these from anywhere in the checkout. The release runs in
a temporary worktree off origin/main, so your checkout is never switched. It
runs the tests and generate_manifests.py --check first, and on a failed push
it removes the tag it created:
task tag:patch
task tag:minor
task tag:major
It bumps version in marketplace.config.json, regenerates the manifest,
commits, tags vX.Y.Z, and pushes the commit and tag together. The release is
built from origin/main, so uncommitted changes in your checkout are ignored
and never released.
Agent definitions and project setup live in killall-agents.
In Claude Code, /git-janitor cleans the current repository. Pass a path to
target another repository, or add audit-only to inspect without removing
anything. The plugin-qualified command is /killall-skills:git-janitor.
For a separate conversation context, mention @agent-killall-agents:git-janitor
in Claude Code with the repository path and any scope limits. This requires
the separate agents plugin. The agent uses the same skill and returns a cleanup receipt.
Its context is separate; it operates on the repository's actual worktrees.
/independent-review gets the current branch reviewed by something that did
not write it. It opens a PR if the branch has none, then waits for CodeRabbit
and resolves its comments. When CodeRabbit is not installed, rate limited, or
skipped, it dispatches a local review agent with fresh context (never the
current session) and resolves that agent's findings instead. It reports what
was fixed and declined, and leaves the PR open. Other skills, such as
finish-up, can run it too.
/finish-up wraps up work that is ready to land. A branch with no PR gets one,
waits for CI, and goes through independent-review first. For each PR it confirms CI
passed and that any required review is done (CodeRabbit or a human), then
squash-merges. It finds the beads, Jira tickets, and GitHub issues the PR
relates to and updates them: closed when the PR closes them, commented when it
only mentions them. It prints one [+], [-], or [x] line per step, stops
at the first failed step, and ends by asking [y/n] whether to remove the branch and
worktree. It calls the wait-for-action and independent-review skills. User-invoked only.
/end-session closes out a session. It fetches, fast-forwards local branches,
and rebases the session branch onto the default branch. Work that already
landed or was superseded is discarded with its worktree. Otherwise it asks
once whether a PR is required, opens one if so, and archives the session.
User-invoked only.
/session-eject saves the session's work before usage runs out. It tells
running subagents to wrap up and waits for their reports, then commits and
pushes every changed worktree. An open PR gets a comment on what landed and
what is left; a branch without one gets a draft PR titled
[ejected session]: <short desc>. /session-eject now skips the wait and
commits, pushes, and opens the draft PR at once. Work on the default branch
moves to an eject/ branch first. It ends by printing a handoff paragraph to
paste into a fresh agent so it can resume. User-invoked only.