Paul O'Reilly 864960cbbb claude-profile modes: add deep-fable, orch pre-flight gate, ask-minimax re-point
deep-fable.md (new):
- driver: fable (claude-fable-5), same plan-first/spec-first discipline as deep
- escalates_to: opus — Opus named workflows remain available
- status line: [Fable→Opus] deep-fable · <project>: <task> | N% ctx
- on context wipe mentions "Deep Work (Fable)"

deep.md:
- Gnarly-bug consult: bg-model-call -> /ask-minimax skill with Opus fallback
- Async policy: replace bg-model-call bullet with /ask-minimax + Opus-subagent-fallback
- Workflow stance: add SSH key pre-flight check before git push

quick.md:
- Workflow stance: add SSH key pre-flight check before git push

hybrid.md:
- Async policy: replace bg-model-call reference with /ask-minimax + Opus-subagent-fallback

orch.md:
- New section "Pre-flight gate (before the autoloop)" placed before Auto-fire
- Auto-fire step 1 rewritten: run pre-flight gate first, then /loop 2m /orchestrate
- Escalation triggers: add stuck-queue row (5 iterations no change -> stop, report)
- Out of scope: add "Run the autoloop without the pre-flight gate"

context/claude-profile-modes.md:
- Status line: 47 assertions; driver table updated; 6 mode files noted
- Remaining follow-ups: bg-model-call replaced by /ask-minimax; deep-fable noted
2026-06-12 21:34:20 +12:00

small-scripts

A collection of small, standalone utility scripts for daily use. Scripts are symlinked into ~/sbin for PATH availability.

Approach

This project uses spec-driven development (OpenSpec) as a testbed for agent-driven development and refinement:

  1. Every script starts with a spec in specs/
  2. Every script supports --dryrun to preview actions without side effects
  3. Every script has a test in tests/ that validates dryrun behaviour against the spec

Scripts

Script Purpose Status
check-skills Verify Claude Code skill symlinks match source repo Done
claude-profile Claude Code profile + engagement-mode launcher Done
gen-secret Generate bash/YAML/JSON-safe random strings Done
git-status-report Recursive git repo status with diff stats Done
md-to-docx Markdown to DOCX conversion Done
mp3-to-mp4 Convert MP3 to MP4 with a static title card Done
split-wezterm Split WezTerm pane into a rows × cols grid Done
sync-repos Mirror git repos across remotes Done
unreflected-logs Scan projects for unreflected session logs Done
validate-skill Validate SKILL.md files against known Claude Code restrictions Done
semver-ci Compute MAJOR.MINOR.PATCH.BUILD from commit-message tokens, maintain VERSION.md, and (on main) tag/push/create a Gitea release — see docs/semver-ci.md and template at templates/gitea-workflow-version.yml Done
wait-for-release Poll a Gitea repo's releases until a glob pattern matches or a timeout expires (default 600s) Done

Engagement modes (claude-profile)

claude-profile launches Claude Code with both a configuration profile (selecting which ~/.claude-* directory to use) and an engagement mode that bundles a driver model, subagent policy, async tolerance, and workflow stance:

Mode Driver For
chat Haiku No project, just conversation
quick Sonnet Single small focused job, fully synchronous
deep Sonnet (Opus via named workflows) Hard design or debugging, plan + spec enforced
hybrid Haiku (Opus/Sonnet on demand) Long sessions, escalates only when needed
orch Sonnet Decompose work and dispatch container agents

Mode definitions live in data/claude-profile/modes/<name>.md — YAML frontmatter (machine-parsed) plus a markdown body that becomes part of the system prompt.

claude-profile                              # interactive picker
claude-profile oreillyit --mode deep        # explicit profile + mode
claude-profile --preset deep-cluster        # named preset from presets.yaml
claude-profile --dryrun [...]               # show resolved values, do not launch

Copy data/claude-profile/presets.yaml.example to $CLAUDE_CONFIG_DIR/presets.yaml to set up named presets.

Repository Structure

small-scripts/
├── scripts/                  # Executable scripts (symlinked into ~/sbin)
├── specs/                    # OpenSpec files, one per script
├── tests/                    # Test scripts that exercise --dryrun
├── data/                     # Read-only data files used by scripts
│   └── claude-profile/
│       ├── modes/            # Engagement mode definitions
│       └── presets.yaml.example
└── memory/                   # Tiered memory topic files

Quick Start

# Run all tests
./tests/run-all.sh

# Symlink a script into ~/sbin
ln -sf "$(pwd)/scripts/<name>" ~/sbin/<name>

Milestones

# Description Status
M1 Project setup, first script In progress
Description
Spec-driven utility scripts with dryrun support and automated testing
Readme 308 KiB
Languages
Shell 67.4%
Python 32.6%