Skip to main content

Declarative hook framework for Claude Code

Project description

captain-hook

PyPI Python Docs License: PolyForm Noncommercial

Declarative hook framework for Claude Code. Write hooks as data, test them inline, and ship them to CI in the same shape they run in production.

Install

No install needed — run everything through uvx:

uvx capt-hook init

uvx fetches captain-hook into a throwaway environment and runs it, so you never add it to pyproject.toml. Every command below works the same way: prefix it with uvx.

First hook

Scaffold a project and drop a hook into .claude/hooks/:

uvx capt-hook init
# .claude/hooks/my_first.py
from captain_hook import Allow, Block, Input, block_command

block_command(
    ["git", "stash"],
    reason="Use the team's VCS workflow for shelving changes",
    hint="Commit a WIP change instead of stashing",
    tests={
        Input(command="git stash"): Block(),
        Input(command="git stash pop"): Block(),
        Input(command="git status"): Allow(),
    },
)

Run the inline tests (from your project root, --hooks defaults to .claude/hooks):

capt-hook test

Wire the hook into Claude Code's settings:

capt-hook generate-settings > .claude/settings.local.json

The next time Claude tries git stash, captain-hook returns a deny with your reason and hint.

Agent skills & plugin

Don't want to write hooks by hand? capt-hook ships two Agent Skillsbootstrapping-hooks mines your repo's docs, CI, and git history into proposed gates and nudges; translating-styleguides turns a STYLEGUIDE.md into enforced rules. uvx capt-hook init installs them into .claude/skills/, or get them as a plugin:

/plugin marketplace add yasyf/captain-hook
/plugin install captain-hook@captain-hook

What problems does this solve?

  • Block dangerous tool calls before they execute (PreToolUse) — force-push, package-manager footguns, raw rm -rf.
  • Drive the agent with feedback that fires on patterns it actually emits — repeated failures, weakened tests, missed conventions.
  • Enforce multi-step workflows with stop-gates and artifact validation, so the agent can't declare "done" without running tests / writing a report / completing a checklist.
  • Keep all of the above testable — every hook ships with inline tests = {...} that capt-hook test runs in CI, so you catch broken hooks the same way you catch broken code.

Docs

Read the docs for the full guide: conditions, primitives, LLM hooks, workflows, state, and real-world patterns.

Working on captain-hook itself? See the development guide.

Project details


Release history Release notifications | RSS feed

This version

0.5.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

capt_hook-0.5.0.tar.gz (92.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

capt_hook-0.5.0-py3-none-any.whl (123.3 kB view details)

Uploaded Python 3

File details

Details for the file capt_hook-0.5.0.tar.gz.

File metadata

  • Download URL: capt_hook-0.5.0.tar.gz
  • Upload date:
  • Size: 92.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for capt_hook-0.5.0.tar.gz
Algorithm Hash digest
SHA256 42e3df1e97dc130f7773bc33fccc778c4d41f0022fc8a502281348993ffe3718
MD5 99339ac91ada15200c5dee04db383597
BLAKE2b-256 6faa68dd77a19f43dabe857e4c65e6a7f6fd137905326572f49a8c849993ee80

See more details on using hashes here.

Provenance

The following attestation bundles were made for capt_hook-0.5.0.tar.gz:

Publisher: release-pypi.yml on yasyf/captain-hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file capt_hook-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: capt_hook-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 123.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for capt_hook-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8900616635b0b52d8d7ece48216ed4bed0425cfca8c80704f83c2e594f09516
MD5 e19d6e991086fc66bae33d0d290e28f7
BLAKE2b-256 b3ae41e51ae5566b7aeb6a484af14eca844f52cea695ff8141bbf3c0e00cfe00

See more details on using hashes here.

Provenance

The following attestation bundles were made for capt_hook-0.5.0-py3-none-any.whl:

Publisher: release-pypi.yml on yasyf/captain-hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page