Files
small-scripts/README.md

88 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |
|--------|---------|--------|
| `agent-subscriptions` | Show Anthropic and MiniMax subscription usage, reset times, and Anthropic plan/inferred renewal (`--output json` for machines) | Done |
| `check-skills` | Verify Claude Code skill symlinks match source repo | Done |
| `claude-profile` | Claude Code profile + engagement-mode launcher | Done |
| `claude-tmux` | Spawn a detached tmux Claude Code session with Remote Control, named after a project (wraps `claude-profile`) | Done |
| `gen-secret` | Generate bash/YAML/JSON-safe random strings | Done |
| `git-identity` | Switch git user.name/email from a saved identity menu (`~/.git-identities`) | Done |
| `git-status-report` | Recursive git repo status with diff stats | Done |
| `md-to-docx` | Markdown to DOCX conversion | Done |
| `mm-worktree-task` | Launch a MiniMax M3 implementation sub-session in an isolated git worktree, prompt assembled from a planner work item | Done |
| `review-loop-run` | Launch/track detached MiniMax reviews of `/review-loop` artefacts (verify, plan, spec, tests, code) from per-kind prompt templates; `counts` gates on CRITICAL/HIGH | 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`](docs/semver-ci.md) and template at [`templates/gitea-workflow-version.yml`](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 |
| `wait-for-version` | Poll a Gitea repo's Actions runs until the named CI workflow completes on HEAD of main, then print the latest release tag — solves the push-then-update race condition for semver dependencies | 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.
```bash
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
```bash
# 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 |