| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Todo-format.md gets a "Completion — depth-based" section that
codifies what was implicit before: top-level (* and **) DONE tasks
stay task-shaped (DONE + CLOSED line), sub-tasks (*** and deeper)
flip to dated event-log entries, and VERIFY is the documented
exception (always dated-rewrite regardless of depth). The section
includes worked examples and the rationale for depth-based over
keyword-based.
The cj-comments skill's completion section now references the
canonical rule instead of restating the depth-based rules inline.
The three-bullet recap in the skill stays as a quick scan, but the
details and examples live in one place.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rounds of simplification on the cj-comments skill: converged on
source-block-only in org files, dropped the non-org parsing entirely,
factored out the mechanical parts into helper scripts (added separately
in another repo), and codified the VERIFY placement + completion rules
in a canonical rule file so the conventions stop being implicit.
Skill (.claude/commands/respond-to-cj-comments.md):
- Drop the file-type comment-marker table and the non-org multi-line
continuation rule. The skill now recognizes only the org source-block
form (#+begin_src cj: ... #+end_src). Craig's yasnippet keeps typing
cost flat.
- Defensive parsing for legacy inline cj annotations in older org files
(back-compat).
- Prefer the new helper scripts: step 1 calls cj-scan for structured
detection; step 4 sub-step 6 calls cj-remove-block for validated
removal. Both have explicit fallback paths to grep+Read / Edit.
- Completion rules now split by keyword: TODO/DOING at *,** stay
task-shaped (DONE + CLOSED); deeper TODO/DOING flip to dated headings;
VERIFY at any depth flips to a dated heading with body replacement.
- New VERIFY-answer pattern: when a cj's parent_heading_chain ends with
VERIFY, the cj is the answer to that VERIFY. Lift its body into the
dated rewrite (or execute the instruction first if indirect), then
delete the cj.
- New placement rule for new VERIFYs: sibling of the trigger heading,
not a child. Climb to *** when the trigger is buried at ****+. This
is the active force that keeps todo.org flat.
- Rename "cj: comment" to "cj comment" in prose; preserve the literal
cj: token in code examples and grep targets.
Canonical rule (claude-rules/todo-format.md):
- New "VERIFY tasks" section with four subsections: Placement (** or
*** only), Creating a new VERIFY (sibling of trigger), Completion
(dated rewrite + body replacement at any depth), Don't leave stale
placeholders.
- Worked before/after examples for both top-level and first-level
VERIFYs.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A new /lint-org command at .claude/commands/lint-org.md orchestrates
the elisp script: invokes it, parses the stdout plist stream, walks
each judgment item with the user via inline numbered options (per
interaction.md, no popup), and reports pre/post-pass deltas. Two
modes: interactive (default, walks judgments now) and mechanical-only
(defers them to a follow-ups file via --followups-file).
The spec at .ai/specs/lint-org-skill-spec.md is the design doc that
motivated this work, captured from yesterday's manual 55→1 lint pass
on todo.org.
todo.org gains a [#A] entry pointing at the spec.
|
| |
|
|
| |
Phase 3 commit-decomposition guidance + Phase 4 step 3 both now default to a single feat(scope): X with tests commit per sub-task rather than separate test: + feat: commits. Test + the code under test belong together for review — a reviewer sees the contract and the satisfaction in one diff instead of paging back and forth. Split into separate commits only when the test work is its own substantial review surface (characterization tests, fixture infrastructure, a new harness) or when the failing test serves as a deliberate bug-report artifact in a fix: narrative.
|
| |
|
|
|
|
|
|
| |
child-priority-sync spec
Skill update: refer to processed items as "cj comments" in chat replies, summaries, and todo.org entries — never write the literal token in my output. The reason is search hygiene: Craig greps his files for the token to find pending annotations, and noise from my replies clutters that.
Spec drop into inbox/: child-priority-sync-todo-cleanup.md captures the implementation recommendation for adding --sync-child-priority to todo-cleanup.el plus four open questions (sync direction, opt-out mechanism for deliberately-lower children, auto-apply vs --check, no-priority-parent edge case) Craig needs to answer before wiring it in.
|
| |
|
|
| |
A well-named VERIFY heading carries the question on its own. The empty cj: <fill-in> placeholder underneath is noise — Craig adds his own cj: annotation (inline or src-block) when he's ready to answer, and that arrival is the signal to come back and process the response.
|
| |
|
|
| |
The skill now recognizes #+begin_src cj: ... #+end_src as a valid cj: comment shape, matching the multi-line paragraph pattern Craig uses in todo.org for longer instructions. Removal at cleanup deletes both fences plus the body.
|
| |
|
|
| |
Renamed the org TODO keyword STALLED to VERIFY in respond-to-cj-comments.md (skill) and daily-prep.org (workflow). VERIFY reads as the next step rather than as a stuck state; the meaning is unchanged — items needing Craig's input.
|
| |
|
|
| |
Coaching guidance was buried under Inline Comment Voice at the bottom of the skill, where it read as a tone afterthought rather than the skill's purpose. This change threads it through Intent, Strengths, the Important-issue shape, Critical Rules, and Anti-Patterns so each step reads as mentoring with audit as the method.
|
| | |
|
| |
|
|
| |
Only third-level and deeper tasks get the dated-heading rewrite. Top and second-level stay task-shaped so they remain visible in the agenda.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
New `claude-rules/cross-project.md` codifies the per-project `.ai/` scope
boundary. Stop-and-ask when a request targets another project's files,
inline numbered options, handoff-file convention when the user opts to
do it from here.
`/respond-to-cj-comments` gains a section-0 preflight (boundary check
before reading the target file) and a section-7 handoff step (writes
the carry-forward file in the target project's `inbox/` when the
boundary crossing was approved).
|
| |
|
|
|
|
|
|
| |
When the run leaves something needing Craig's input (a blocker, an open question, a draft awaiting sign-off), the skill now files a STALLED task in todo.org under the relevant parent — phrased so Craig can answer inline with a cj: comment — rather than writing a long summary to /tmp and opening it in emacsclient. The STALLED task lives next to the work, surfaces in his agenda, and gets resolved inline. The chat summary still gets written as the FYI recap; the STALLED task is the durable home for action items.
Also documents the DONE→dated-heading convention: when a cj:-handled TODO completes, rewrite the heading itself into a "** YYYY-MM-DD Day @ HH:MM:SS -ZZZZ <desc>" event-log entry rather than advancing to DONE. This is Craig's standing convention for todo.org and his daily-prep docs — finished tasks turn into a dated log automatically.
The description block at the top of the file got a small rewrite to match: STALLED-task language replaces the /tmp-summary phrasing, and the DONE→dated-heading rule is mentioned in the org-mode-handling clause.
|
| |
|
|
|
|
| |
notification/UI toggles
Working copy had drifted permissions.defaultMode to "auto"; reset to "bypassPermissions" to match HEAD. Other tweaks: awaySummaryEnabled false, terminalProgressBarEnabled false, inputNeededNotifEnabled true, skipAutoPermissionPrompt true, skillListingBudgetFraction moved to top.
|
| |
|
|
|
|
|
|
| |
Phase 0 was a single eligibility gate. Two gaps: the skill cut new branches from whatever HEAD happened to be, and trusted the ticket's premise without checking the tree.
Two new sub-sections fix both before any state change. 0.2 fetches and fast-forwards the base branch, surfacing dirty or diverged state instead of auto-resolving. 0.3 reads the source, not git log, to confirm the problem the ticket describes still exists, with three dispositions for "the problem isn't there" findings: close, dig harder, or proceed with reduced confidence flagged at the Justify gate.
Two matching anti-patterns added: skipping the reconcile, and taking the ticket's word for it.
|
| |
|
|
|
|
|
|
|
|
| |
I switched the three publish subflows in commits.md (commit messages, PR descriptions, PR review comments) from "run humanizer; apply five personal-style passes in order" to a single "run /voice personal" invocation. The new skill walks 39 patterns in one editorial review and absorbs the five passes wholesale, plus four more personal-style additions (felt-experience cut, fragment-in-prose rewrite, terse cut, public-artifact scope flag) and six universal good-writing patterns. The numbered steps in each subflow collapse from 5 to 4 (commits) and 9 to 8 (PRs) since the dedicated personal-style step folds into the voice invocation.
The Multi-pass gate paragraph becomes a Single-skill gate. The mid-flow "all the passes" prompt now means re-run the full 39-pattern walk in personal mode rather than reapplying six discrete steps.
I also updated respond-to-cj-comments.md to invoke /voice personal for public writing and /voice general for the lighter pass on internal notes when wanted, and updated start-work.md's Phase 7 summary to match.
The humanizer skill itself stays in place for now. The next commit removes it.
|
| |
|
|
| |
Default 1% of context maps to ~8K chars (the floor). The current skill listing totals ~10K chars and overflows on small-context models, triggering the truncation warning. Bumping to 5% leaves headroom even with the model-invocable skills' full descriptions present, and the file-based skill descriptions are now <=1000 chars each.
|
| |
|
|
| |
Add disable-model-invocation: true to the user-triggered slash commands so the harness drops their descriptions from the model's preloaded skill listing while keeping /<name> routing intact. Skills meant for model recommendation (add-tests, debug, five-whys, frontend-design, humanizer, pairwise-tests, playwright-js, playwright-py, root-cause-trace) are unchanged.
|
| |
|
|
|
|
|
| |
Removed the PreToolUse → Bash hook entry from settings.json. The hook
script stays in hooks/ for other machines that may want it. The local
~/.claude/hooks/destructive-bash-confirm.py symlink was also removed
on this machine.
|
| |
|
|
|
|
|
|
| |
The conversion commit ran sed -i to strip the name: line, but the staged
version from git mv was captured before the sed ran. Result: the commit
shipped the original frontmatter, and the sed cleanup was sitting in the
working tree. This commit lands the cleanup that should have been in
aa69245.
|
| |
|
|
|
|
|
|
| |
I converted 16 user-invoked skills to commands. Skills cost ~150-300 tokens each per session for descriptions the model uses to auto-route. Commands cost nothing until you type the slash. These 16 are workflows I always trigger deliberately. The auto-routing wasn't earning its keep. This reclaims ~4-5k tokens per session.
Nine skills stayed where auto-routing genuinely helps: debug, root-cause-trace, five-whys, add-tests, frontend-design, humanizer, playwright-js, playwright-py, and pairwise-tests. Pairwise-tests stays a skill because its helper files don't fit a single-file command shape.
For arch-decide, I preserved the upstream MIT LICENSE alongside the command at .claude/commands/arch-decide.LICENSE so attribution stays intact.
|
|
|
I moved Claude Code's user-level config into this repo so it travels with rulesets across machines instead of being machine-specific. The three pieces are settings.json, .mcp.json, and commands/refactor.md.
I extended make install, uninstall, and list to handle the new .claude/ directory. The wildcard for CLAUDE_CONFIG matches both `*.json` and `.*.json` because make's glob skips dotfiles by default. Without the dot variant, .mcp.json wouldn't get picked up.
I also added settings.local.json to .gitignore. That file is per-machine by convention and shouldn't ever land in the shared repo.
|