Camp Commit Decision

SkillDev tools

Choose the correct commit command in a camp, also called a campaign. Use when you are about to commit and need to select `camp commit`, `camp p commit`, `fest commit`, or intentional root pointer sync via `camp refs-sync`.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Camp Commit Decision skill

What this skill tells your AI

The instructions your AI receives, as published by obedience-corp/festival in skills/campaign-commit/SKILL.md and read by ahel’s review.

A camp was previously called a campaign; this skill applies whichever word the user uses.

Decision

  • Project change (submodule, linked project, or worktree): camp p commit -m "msg"
  • Festival task execution: fest commit -m "msg"
  • Camp root files: camp commit -m "msg" (stages all root-level changes; submodule refs excluded by default)
  • Camp root, scoped to specific paths: git add <paths> then camp commit --all=false -m "msg" (commits only what is staged)
  • Intentional root pointer sync: camp refs-sync [submodule...]

Festival Commits Cover the Linked Project

When a festival or sequence has a linked project, fest commit makes up to two commits even when you run it from inside the festival:

  • a project commit staging the project's changes, skipped when the project is clean
  • a camp root commit staging only festival-scoped files, the camp's .campaign/fest/ state, and the submodule pointer

So during festival execution do not run camp p commit first and fest commit after. One fest commit covers both sides. Use --no-root to skip the camp root commit.

A festival with no linked project makes the single camp root commit only.

Deferred Commit Queue

Camp defers its own bookkeeping commits so they do not hold the terminal. The queue is machine-local and disposable; git is the record.

camp jobs                       # what is queued, running, or failed
camp jobs --json                # same, for agents
camp jobs retry all             # requeue everything that failed
camp jobs drop <id>             # give up on a failed job, keeping its content
camp jobs drop --running <id>   # a stalled job, and the worker holding it
camp jobs drain                 # wait for every lane, then exit

Dropping a job never discards work: the content stays uncommitted in the working tree for the next ordinary commit. If camp jobs reports a job as stalled, a commit message writer stopped answering; --running is what ends that wait.

Rules

  • Never run raw git commit anywhere in a camp; staging with git add is fine.
  • Keep submodule commits and root pointer sync as separate, explicit actions.
  • Do not bypass hooks with --no-verify without clear justification.
  • Do not add agent co-author trailers unless explicitly requested.

Signals

GitHub stars
49
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
campaign-commit
Source
github.com/obedience-corp/festival