aboutsummaryrefslogtreecommitdiff
path: root/.ai/workflows/INDEX.org
Commit message (Collapse)AuthorAgeFilesLines
* feat(workflows): add inbox-zero for routing the roam inbox by projectCraig Jennings17 hours1-0/+2
| | | | | | | | The global roam inbox (~/org/roam/inbox.org) is one shared capture file every project can see, and nothing routed its items to the project that owns them. inbox-zero claims the items prefixed for the current project, files them into that project's todo.org per the process-inbox discipline, and removes them from the shared inbox. Foreign-prefixed and unowned items stay. Every scan reports the total item count plus how many appear related to this project. This v1 is single-destination: it routes by explicit <project>: prefix only. The domain-aware mode that would guess every item's owner and empty the whole inbox in one run is deferred until the multi-project need is concrete. Wired into both session ends so each project touches the inbox twice a session: startup surfaces a read-only count and offer, wrap-up Step 3 sweeps the claimed set before the cleanup scripts so imported tasks ride the wrap commit. INDEX carries the trigger phrases.
* chore: delete the page-signal pager wrapperCraig Jennings39 hours1-2/+0
| | | | Remove the page-signal CLI wrapper, its workflow, and the references in INDEX.org, broadcast.org, and mcp/README.org. The signal MCP server stays. It's the two-way path and a separate capability. The pager number had deregistered and the send-only wrapper isn't worth re-registering.
* feat(workflows): session-harvest monthly promotion-mining passCraig Jennings3 days1-0/+2
| | | | | | session-harvest runs a monthly pass over recent session summaries across every AI project and proposes promotion candidates in four lanes: patterns catalog, KB facts, rule refinements, workflow learnings. Capture already happens continuously. This adds the batched review cadence that turns it into curated promotion. The window filter reads each session filename's date prefix instead of mtime. Clones and syncs reset mtime, which let 2025 sessions pass a recency filter. The run also aggregates the KB receipt lines from session summaries, so it doubles as the 30-day KB metrics readout.
* feat(workflows): rewrite daily-prep to the strict three-section templateCraig Jennings3 days1-3/+3
| | | | | | | | From the template spec Craig wrote 2026-06-10 plus four refinements from his review of the first new-format prep. The doc is now exactly Heads-Up, Day's Priorities, and Meetings / Focus Blocks. Two run modes replace full-prep and standup-only: Create ends with a mandatory priorities review gate (disagreement there signals todo.org staleness), and Update refreshes a day when the world moves. Both run a triage-intake first when none ran in the last hour. It retires the separate Standup Briefs and Upcoming Deadlines sections, the Anchor Tasks handoff, and the thin-link convention. Priorities entries now mirror their todo.org task heading and carry links and context in the body. Briefs nest under the standup they're reported in, with Blockers: None explicit. Meetings carry what to contribute and get, likely questions with answers, linked prep docs, and day-before prep blocks for unanswered questions. Focus blocks are linked menus, created the day before and marked free. The spec and the decisions handoff land in docs/design/.
* feat(workflows): promote meeting-prep to a general templateCraig Jennings4 days1-0/+3
| | | | | | Meeting-prep was project-only. I generalized its project-specific references (transcript-home path, issue tracker, knowledge file, worked-example doc) to neutral terms and moved it into claude-templates so any project's .ai/ picks it up. The pre-wire supporting doc travels beside it as meeting-prep.pre-wire.org. I added the workflow entry and trigger phrases to INDEX.org. I flipped daily-prep's two conditional meeting-prep references, and its trailing changelog claim, to direct links now that the workflow ships as a template.
* docs(create-workflow): document the supporting-document conventionCraig Jennings4 days1-1/+1
| | | | A workflow that outgrows its inline content stores the overflow in a sibling <workflow>.<suffix>.org, linked inline. This reuses the engine.plugin dot-glob, so the drift-check and discovery glob already treat the file as owned rather than an orphan. It also travels with the workflow on promotion. I extended the INDEX drift-check note to name supporting docs alongside source plugins.
* feat(workflows): generalize broadcast into announcement + situational modesCraig Jennings5 days1-2/+3
| | | | cross-project-broadcast handled tooling and rule announcements but had no shape for the situational case: a life or work event I want every project's agent to know, said once so none is missing context when I next talk to them. I renamed it to broadcast (helper and test alongside) and split it into two modes over the same fan-out plumbing. Announcement keeps the rigid capability template. Situational carries a general-not-comprehensive summary plus a fixed receiving-agent contract: record it in notes.org, hold it time-boxed or standing, apply on the project's own judgment, ask follow-ups at startup. The broadcasting agent does no per-project relevance analysis. Each receiving agent decides what the event means for its own work.
* feat(workflows): add spec-create, the author leg of the spec trioCraig Jennings5 days1-0/+2
| | | | spec-create is the front of the spec-create → spec-review → spec-response trio: the author writes a short design spec before non-trivial code, shaped to pass spec-review's readiness gate. It runs a when-to-spec proportionality gate first, then problem-first framing, design with forced alternatives and inline mini-ADR decisions, implementation phases with acceptance criteria and a readiness-dimensions menu, a terseness pass, and a hand-off self-check against the review rubric.
* feat: add rename-ai-artifact tool and rename the drill-deck family to flashcardCraig Jennings14 days1-2/+4
| | | | | | | | | | Renaming an .ai artifact by hand is the kind of mechanical job that gets done incompletely: the canonical copy moves but the mirror doesn't, a reference in the INDEX is missed, a trigger phrase points at the old name. I'd also assumed a rename was costly because references scatter, when the index update is trivial and the drift check already guards it. So I built the discipline into a script instead of re-deriving it each time. scripts/rename-ai-artifact.sh takes old and new basenames, moves the file in both the canonical and mirror trees, and rewrites every reference repo-wide on a token boundary so renaming "foo" can't corrupt "foobar" or "foo-bar". It rewrites the underscore module-name variant too (a hyphenated script imported as foo_bar via importlib), leaves the archived session records under sessions/ alone because they're history, and runs workflow-integrity + sync-check at the end to prove no drift. rename-artifact.org documents it and indexes the triggers. Then I used the tool to do the rename that prompted it: the org-drill deck workflow and its helpers are now flashcard-named, since "flashcard" is the word you'd actually search for. The renamed set is flashcard-review.org plus flashcard-stats.py, flashcard-sync, flashcard-to-anki.py, and flashcard-diff-ids.py, with their tests, every reference, and the INDEX entry updated. The deck is still an org-drill deck under the hood, so the ":drill:" tag handling and the "drill deck" trigger phrases stay. I added "review/update the flashcards" alongside them. Tests: 9 bats for the rename tool (including the prefix-collision and history-preservation edges), and the renamed script suites all pass under make test.
* feat(workflows): add monitor-inbox workflow + inbox-status scriptCraig Jennings2026-05-311-0/+2
| | | | | | Handoffs that arrive mid-session used to sit unseen until the next startup or a manual check. Today's burst of cross-project handoffs made that gap obvious. I added monitor-inbox.org, the cadence-and-decision layer over process-inbox: check the inbox at every task boundary, decide act-now (just do it) versus file (ask, with filing as option 1), and reply to the sender. An opt-in background-monitor /loop recipe covers unattended watching. inbox-status (with bats tests) is the cheap check the cadence calls. It lists unprocessed handoffs and exits nonzero when any are pending, using the same artifact exclusions as the wrap-up sanity check. protocols.org gets a short cadence note so the habit fires every session, and INDEX.org lists the new workflow. The act-vs-file rule (act-now is silent, filing asks with file as option 1, ambiguity asks) is the decision protocol we settled today.
* chore: sync .ai mirror with canonical (drill-deck-review)Craig Jennings2026-05-301-0/+2
|
* feat(signal): page-signal CLI wrapper + workflows + cross-project broadcast ↵Craig Jennings2026-05-291-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | helper Three coupled additions ship together. claude-templates/bin/page-signal is a bash wrapper around signal-cli send. It defaults to --note-to-self for safety. The wrapper supports --file for attachments, --to <+number> for outbound (explicit per call, no defaults, no batch), --quiet, and --json. Exit codes: 0 sent, 1 signal-cli failure, 2 usage error, 3 signal-cli not installed. claude-templates/.ai/workflows/page-signal.org carries the discrimination rules and safety rails. When desktop notify covers it, don't reach for Signal. Long-running task completion is the canonical case. Outbound to other contacts requires explicit Craig instruction per send. A known-limitation note covers the current notification gap. signal-cli registered on Craig's primary number means messages don't fire notifications until the pending Google Voice registration lands. claude-templates/.ai/workflows/cross-project-broadcast.org and its helper cross-project-broadcast.py fan out a single message file to every AI project's inbox in one operation. Discovery is fingerprint-based: any directory under ~/code, ~/projects, ~/.emacs.d with both .ai/protocols.org and a top-level inbox/ is broadcastable. Senders are auto-excluded. Verified discovery against 23 broadcastable targets. Makefile's install target gains a general bin/ loop. The previous version hardcoded bin/ai. The new version iterates over every executable under claude-templates/bin/ and symlinks each into ~/.local/bin/. install-hooks (existing Claude hook installer) is unchanged. install-githooks (sync-check pre-commit hook setup, added earlier today) is unchanged. The bin/ loop now picks up bin/page-signal automatically. INDEX entries for both new workflows landed under Tools and meta. No bats tests on the new scripts. page-signal was smoke-tested with a live send. The send succeeded. The notification gap is covered by the workflow's known-limitation note. cross-project-broadcast.py was smoke-tested via --list against the live project set. Tests can be added when the broadcast pattern proves out across multiple use cases.
* feat(workflows): add process-inbox.org with value-gate disciplineCraig Jennings2026-05-281-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Generic process-inbox workflow at claude-templates/.ai/workflows/ and mirror. Owns inbox discipline across every project: items are ideas to evaluate, not orders to execute, and earn a place in todo.org or git history only when they pass a three-question value gate. The gate (Phase B): - Advances an existing TODO (look up by topic). - Improves how the project works (architecture, workflows, tooling, rule hygiene). - Serves the project's stated mission (read from notes.org Project-Specific Context). One yes accepts. Three nos reject. Per-source rejection flow (Phase D): - From Craig: state in chat, wait for override. - From another project: write a response via inbox-send naming which gate question failed plus any reconsideration condition. Silent rejection on a handoff is worse than no reply. - From a script or automated system: just delete. Phase B.1 gates filing on priority-scheme presence. If todo.org has a scheme at the top, file with cookie + mandatory type tag + optional effort/autonomy tags. If not, surface a one-sentence nudge to adopt one (or to skip grading and flag the gap in the commit). Phase D within accepts splits implement-now / fold-into-existing / file-as-TODO so the inbox doesn't default to inflating todo.org for every item that passes the gate. Phase E stamps :LAST_INBOX_PROCESS: in notes.org Workflow State if the section exists. startup.org Phase C step 2 now delegates here instead of inlining the inbox-processing language. INDEX entry under Tasks and planning lists the full set of trigger phrases.
* feat(workflows): promote no-approvals.org to template, merge pearl framingCraig Jennings2026-05-281-0/+2
| | | | | | | | | | | | | | | | | | | | | | | Pearl independently built its own no-approvals workflow (handoff in this morning's inbox) and asked rulesets to take the best from both. That's cross-project signal that the workflow earns a place at the template tier. Promoted from =.ai/project-workflows/= to =claude-templates/.ai/workflows/= with a mirror under =.ai/workflows/=. INDEX entry added under "Tools and meta" listing the full set of trigger phrases. Merged from pearl's draft: the prominent "What's Suspended" / "What Stays On" split (same content as the prior "Contract" section, easier to scan), wider trigger phrases (the project-only version had fewer), the mode-resets-when-Craig-switches-topics guard, an explicit destructive-action carve-out as its own bullet rather than buried in the "real question" section, and a subagent-review-gate callout. Kept from the rulesets version: the Session Log update emphasis between items, the real-question include/exclude lists, and the don't-auto-wrap-up guard. A History section at the bottom records the merge for future archaeology.
* refactor(workflows): split triage-intake into engine + source pluginsCraig Jennings2026-05-261-3/+4
| | | | | | | | The triage-intake workflow had every source baked into one file, so adding or changing a source meant editing the workflow itself. I replaced it with a source-agnostic engine plus per-source plugins named triage-intake.<source>.org. The engine carries the anchor/sentinel logic, the four-bucket model, the Phase A-D orchestration, the todo.org persistence convention, and the exit criteria. Each source's scan, classify, render, and action knowledge moved into its own plugin. Four general plugins ship in the template: personal-gmail, personal-calendar, cmail, and github-prs. Project-specific sources live in the project's .ai/project-workflows/ and are never synced. Phase 0 globs both directories so a project source can't silently drop out of the sweep. I taught INDEX.org and the startup workflow-discovery drift check the namespace. A file matching <engine>.*.org is a plugin of that engine, not an orphan, and gets no trigger entry of its own. A "run the triage-intake workflow" request routes to the engine, never to a plugin.
* feat(workflows): add spec-review and spec-response workflow pairCraig Jennings2026-05-231-0/+7
| | | | | | | | These two workflows form a reviewer side and an author side for taking a design spec to implementation-ready. spec-review judges a spec against a readiness gate, reads the code before critiquing, evaluates across dimensions, assigns a rubric (Ready / Ready-with-caveats / Not-ready / Needs-research), and writes a <spec>-review.org file when it isn't ready. spec-response consumes that file: it decides accept / modify / reject for every recommendation, weaves the accepts into the spec body, records the modifies and rejects with reasons in a "Review dispositions" section, and reconciles tensions when coupled specs get reviewed together. The review file is the contract between them. Both were validated by a real run on 2026-05-23 before landing here. I then reviewed them against established practice and tightened five things. The readiness gate now covers security/privacy and observability, since a spec shouldn't pass with those undefined. Phase 1 is a fast triage and Phase 3 is the authoritative gate after the code read. Finding severity maps to blocking power. A rejection goes back to the reviewer instead of standing as a unilateral call. And the response loop has an explicit termination condition. I added both to INDEX.org under a new "Specs and design" section with trigger phrases, cross-linked as a pair, and kept the canonical and mirror copies identical.
* feat(workflows): add task-audit content-reconciliation workflowCraig Jennings2026-05-221-0/+2
| | | | A task audit reconciles each open task's recorded content against reality (sessions, email, chat, ticketing, calendar, recordings) and fixes the stale facts. That's distinct from task-review, which grooms relevance and priority. The two compose: review keeps the list lean, and audit keeps the survivors factually honest. Registered it in the workflow INDEX with its trigger phrases.
* feat(workflows): add task-review list-hygiene habitCraig Jennings2026-05-201-0/+2
| | | | | | | | | | The new task-review.org workflow is the daily habit that retires the old date-coverage scan. It surfaces the oldest-unreviewed top-level tasks, walks them one at a time, and records each outcome — keep, re-grade, kill, mark DOING, or edit — stamping :LAST_REVIEWED: as it goes. It's a pure Claude workflow, no elisp. open-tasks.org displays the list; this one changes it. task-review-staleness.sh gains a --list mode that emits the N oldest-unreviewed tasks (line, review date, heading), oldest first, so the workflow walks a deterministic batch instead of eyeballing todo.org. Never-reviewed and unparseable-date tasks sort oldest. Seven new bats cases cover ordering, the count limit, exclusions, and output format; count mode is unchanged. startup.org gains the matching nudge. Phase A counts tasks unreviewed for >7 days and Phase C surfaces one line when that count is non-zero, pointing at the workflow. It lives in the template startup.org rather than the project-only startup-extras layer, so every project picks it up the same way it picks up the wrap-up health check. The INDEX entry is added with the "task review" triggers the rename freed up.
* refactor(workflows): rename task-review.org to open-tasks.orgCraig Jennings2026-05-201-2/+2
| | | | | | | | The list-and-pick-next workflow was named task-review.org, but "task review" better describes a list-hygiene habit that re-grades and prunes tasks, not one that just displays them. I'm freeing the task-review.org name (and the "task review" trigger) for that habit, which lands next. This workflow goes back to open-tasks.org — the name it carried before it merged with whats-next.org. Its content and INDEX entry drop the "task review" trigger and point at task-review.org for the hygiene habit. Behavior is unchanged; only the name and the routing phrases move. The rename touches both the canonical workflow and the project mirror.
* chore(ai): sync triage-intake workflow from claude-templatesCraig Jennings2026-05-111-0/+2
| | | | New on-demand triage-intake workflow. It scans every inbox source (the three mail accounts, Slack, Linear, open PRs, both calendars, recent todo.org edits), surfaces what moved, runs the Linear Dev-Review sweep, and marks all unread INBOX mail plus every touched Slack conversation read. Also registered in INDEX.org, and the stale triage-intake reference dropped from wrap-it-up.org.
* docs(workflows): add clean-todo workflowCraig Jennings2026-05-111-0/+2
| | | | clean-todo is the manual entry point for tidying todo.org: it runs the hygiene pass, then --archive-done (relocate completed level-2 subtrees into "Resolved"), then summarizes what changed and leaves the diff uncommitted for review. The wrap-up flow already does both passes at session end; clean-todo runs them on demand. It's listed in INDEX.org under the usual trigger phrases.
* chore(ai): initialize project notes and Claude tooling surfacesCraig Jennings2026-05-061-0/+75
Replace the seed notes.org with project-specific context (layout, install modes, task tracker location, recent inflection point). Bring in the synced template surfaces (protocols, workflows, scripts, references, retrospectives, someday-maybe) as tracked content for this content/documentation project.