Skip to content
Back to skills

Ccmanager Config

ASecurity

Set up, review, or repair a CCManager config — `.ccmanager.json` at a git repository root, or the global `~/.config/ccmanager/config.json`. Use when someone wants ccmanager to launch a different agent CLI (codex, gemini, cursor-agent, copilot…), add command presets, run a command on session state changes or worktree creation, auto-generate worktree directory paths, change merge/rebase arguments, rebind the return-to-menu key, turn on auto-approval — or when a ccmanager setting "does not seem ...

  • 1,250 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 21, 2026
ai-agentsgobashnodeexpressgitapi

Works with

  • cursor
  • terminal
  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add kbwo/ccmanager --skill ccmanager-config --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ccmanager Config?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ccmanager Config
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kbwo-ccmanager-config/badge)](https://www.skillsdirectory.com/skills/kbwo-ccmanager-config)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ccmanager-config
description: Set up, review, or repair a CCManager config — `.ccmanager.json` at a git repository root, or the global `~/.config/ccmanager/config.json`. Use when someone wants ccmanager to launch a different agent CLI (codex, gemini, cursor-agent, copilot…), add command presets, run a command on session state changes or worktree creation, auto-generate worktree directory paths, change merge/rebase arguments, rebind the return-to-menu key, turn on auto-approval — or when a ccmanager setting "does not seem to do anything".
---

# Configuring CCManager

CCManager (`ccmanager`) is a terminal UI that runs one AI coding agent per git
worktree. Its behaviour comes from two JSON files with **identical shape**:

| File | Scope | Notes |
| --- | --- | --- |
| `<git repository root>/.ccmanager.json` | one repository | commit it to share with the team |
| `~/.config/ccmanager/config.json` (`%APPDATA%\ccmanager\config.json` on Windows) | the user, all repositories | also written by ccmanager's own **Global Configuration** menu |

Per key, the project file wins over the global file. Both are optional.

The reason this skill exists: **CCManager reports nothing when a config is
wrong.** A file that is not valid JSON is discarded whole, and unknown keys are
ignored without a message, so a typo is indistinguishable from a feature that
does not work. Every change made through this skill therefore ends with the
validator run in step 4.

## Procedure

### 1. Decide which file to edit

Ask yourself, and the user if it is genuinely ambiguous:

- Does the setting describe **the repository** (which agent CLI to run, what to
  do after a worktree is created, where worktrees live)? → `.ccmanager.json`,
  committed.
- Does it describe **this person's machine or taste** (notification commands,
  key bindings, personal API/model flags)? → the global `config.json`.

Two traps before you write anything:

- Put `.ccmanager.json` **at the main repository root**, not inside a linked
  worktree. CCManager resolves any worktree back to the main checkout, so a
  config file inside a worktree is never read.
- If ccmanager is started in multi-project mode (the
  `CCMANAGER_MULTI_PROJECT_ROOT` environment variable is set, or `--multi-project`
  is passed), project files are skipped entirely and only the global config
  applies. Say so rather than writing a file that will be ignored.

### 2. Read what is already there

`cat` the target file if it exists, plus the other file in the pair when the
user's request depends on the merged result. Never rewrite a config from
scratch when one exists — you would silently drop settings you were not asked
about.

### 3. Write the config

Look every key up in **`references/config-reference.md`** (in this skill
directory) before writing it: it lists each key with its type, its default, and
what it actually does. Do not invent keys — anything not listed there is
dropped by CCManager without a word.

For the common goals — running codex/gemini/another CLI, several presets,
desktop notifications, per-worktree setup commands, worktree path patterns,
merge arguments, auto-approval — start from a worked example in
**`references/recipes.md`** and adapt it.

Three rules that cause most of the breakage:

1. **Merging happens one key deep.** For each top-level key present in the
   project file, that key's *fields* override the global ones; anything nested
   below a field is replaced wholesale, not merged. In particular a project
   `commandPresets.presets` array replaces the global preset list entirely — so
   list every preset the repository needs, and give `defaultPresetId` the id of
   one of *those* presets.
2. **`args` is argv, one array element per token.** `["--model", "opus"]`, never
   `["--model opus"]`.
3. **A hook without `"enabled": true` never runs.** Both `command` and `enabled`
   are required.

### 4. Validate — always

```bash
node <skill-dir>/scripts/validate-ccmanager-config.mjs path/to/.ccmanager.json
```

It parses the file the way CCManager does, checks the shape against
`schema/ccmanager.schema.json`, flags unknown keys (with a "did you mean"), and
catches the mistakes JSON alone cannot express: a `defaultPresetId` matching no
preset, duplicate preset ids, an `args` entry with spaces in it, a detection
strategy that does not match the command, a shortcut that can never fire, a
disabled hook, a worktree pattern without `{branch}`, a config file sitting in a
linked worktree. It exits non-zero on errors; warnings are advisory.

Report what it printed. If you cannot run it (no Node available), say so
explicitly instead of claiming the config is fine.

### 5. Tell the user how to pick it up

CCManager reads config at start-up and when it reloads. After editing a file by
hand, they should return to the ccmanager menu or restart it; sessions already
running keep the command and detection strategy they were started with.

## Reviewing an existing config ("this setting does nothing")

Work down this list — these are the silent failures, in the order they bite:

1. Run the validator (step 4). Invalid JSON and unknown/misspelled keys are the
   two most common causes and both are invisible in the TUI.
2. Check the file location: main repository root, not a worktree; and
   multi-project mode disabled.
3. Check the *other* file. The project file only overrides keys it actually
   contains; everything else still comes from the global config.
4. For presets: a `defaultPresetId` pointing at a preset that lives in the other
   file silently falls back to the first preset in the list.
5. For a session that reports the wrong status: `detectionStrategy` must match
   the CLI being run — see the table in `references/config-reference.md`.

## Files in this skill

- `references/config-reference.md` — every key: type, default, behaviour, and
  the hook environment variables.
- `references/recipes.md` — copy-and-adapt configurations for the usual goals.
- `schema/ccmanager.schema.json` — JSON Schema for both config files; usable as
  `$schema` in an editor for completion.
- `scripts/validate-ccmanager-config.mjs` — the validator from step 4.

Files in this skill

  • SKILL.md6.1 KB
  • references/config-reference.md10.3 KB
  • references/recipes.md6.3 KB
  • schema/ccmanager.schema.json6.7 KB
  • scripts/validate-ccmanager-config.mjs11.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…