ccppccpp home
Browse the documentation

General

Introduction

ccpp is a command-line tool and a Claude Code marketplace. Here is how the two fit together.

Claude Code runs an agent loop on your machine: it reads files, edits them, runs shell commands and decides when a task is done. Claude Code also exposes hooks, programs it runs at fixed points of that loop (before a tool call, after it, at the end of a turn…). ccpp uses those hooks.

The parts

PartWhat it is
ccppA single binary. Core commands (doctor, about, account, update, marketplace) plus one command per plugin, such as ccpp cpo.
PluginA feature set with its own command (ccpp cpo …) and its own Claude Code plugin.
MarketplaceThe repository is a Claude Code marketplace named ccpp. Installing cpo@ccpp registers the hooks of the CPO plugin.
~/.ccpp/Your ccpp home: config.yml, user policies, your ccpp.dev credentials. $CCPP_HOME moves it.

What happens during a session

  1. Claude Code fires a hook, for instance PreToolUse before a Bash call.
  2. The Claude Code plugin runs ccpp <plugin> hook with the hook input on stdin.
  3. The plugin decides (allow, refuse, ask the user, add context for Claude) and answers on stdout in the format Claude Code expects for that hook.

The decision is made by code and files you can read, not by a model. For CPO, the files are policies, and the same input always gives the same answer.

Plugins

PluginCommandPurpose
CPOccpp cpoClaude Policy Objects: rules checked on every file write, shell command, tool call and end of turn.

Output conventions

Every ccpp command prints Markdown by default, so Claude and people can read it. Add --json for a machine-readable answer, for scripts and CI:

ccpp doctor --json
ccpp cpo list --json

Errors follow the same rule: Markdown on stderr, or a JSON error object with --json, and exit code 1.

Edit this page on GitHub