os-shortcuts: new plugin + /wrap session-close skill (ADR-028)
User-invoked QOL commands plugin; domain boundary vs hook-injection plugins recorded in ADR-028. First resident /os-shortcuts:wrap encodes the session-close ritual (commit per repo conventions, doc sweep, handoff) from the 2026-07-09 workflow audit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QBAYNm4AmczQaEHfXwai5a
This commit is contained in:
parent
537d6215b1
commit
d6f316008d
|
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
id: "0028"
|
||||||
|
date: 2026-07-12
|
||||||
|
status: Accepted
|
||||||
|
supersedes:
|
||||||
|
superseded-by:
|
||||||
|
affected-paths: [plugins/os-shortcuts/]
|
||||||
|
affected-components: [os-shortcuts, os-context, os-orchestration]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 0028 — os-shortcuts plugin for user-invoked QOL commands, bounded against hook-injection plugins
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The 2026-07-09 AI-workflow audit found ritual instructions the user re-types constantly — the session-close paragraph (commit per repo conventions, sweep affected docs, write a handoff) appeared 20+ times. These need a home in the cc-os plugin family. Injection-style plugins (os-orchestration, the planned os-context) are the wrong vehicle: SessionEnd hooks fire after the model's last turn and cannot inject actionable instructions, Stop hooks fire every turn and are noisy, and session-close is inherently user-timed. cc-os needed a decided boundary for where user-typed shortcut commands live versus automatic context injection.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Create a new plugin `os-shortcuts` (plugins/os-shortcuts/) holding user-invoked QOL commands — the 'keybindings' of cc-os. Domain boundary: os-shortcuts = commands the user explicitly types (skills only, never hooks); os-context/os-orchestration = automatic hook-injected context. First resident is `/os-shortcuts:wrap`, encoding the session-close ritual (git review → conventional commits → doc/todo sweep deferring to project CLAUDE.md → Done/In-flight/Next handoff). Future shortcuts (e.g. a possible /readonly) accumulate here rather than spawning per-command plugins.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Easier: repeated ritual prompts collapse to one slash command; new shortcuts have an obvious home; the hooks-vs-commands boundary is explicit, keeping os-context's injection budget separate from on-demand behavior. Harder: one more globally installed plugin to cache-refresh and keep in sync; the wrap ritual's quality now depends on each project's CLAUDE.md documenting its own commit/doc conventions.
|
||||||
|
|
||||||
|
## Alternatives rejected
|
||||||
|
|
||||||
|
1) SessionEnd/Stop hook automation — rejected: SessionEnd cannot inject model-visible instructions (fires after the last turn) and Stop hooks fire every turn (noise); see vault note reference/claude-code-hook-lifecycle-injection-capability.md. 2) Put /wrap inside an existing plugin (os-status or os-context) — rejected: wrong domains; os-status is deterministic session checks, os-context is automatic injection, and mixing user-typed commands into either blurs the boundary this ADR fixes. 3) Keep re-typing the paragraph / rely on memory files — rejected: the audit shows it leaks (20+ repeats) and memory injection is not reliably surfaced at session close.
|
||||||
|
|
@ -34,4 +34,5 @@ One file per decision, `NNNN-kebab-title.md`, created via `/os-adr:create`.
|
||||||
| 0025 | [Standard Ruby structure for cc-os plugins (lib/ + single-dispatcher bin/, fail-soft, installed-gem-only dependencies)](0025-standard-ruby-structure-for-cc-os-plugins-lib-single-dispatcher-bin-fail-soft-installed-gem-only-dependencies.md) | Accepted | 2026-07-10 |
|
| 0025 | [Standard Ruby structure for cc-os plugins (lib/ + single-dispatcher bin/, fail-soft, installed-gem-only dependencies)](0025-standard-ruby-structure-for-cc-os-plugins-lib-single-dispatcher-bin-fail-soft-installed-gem-only-dependencies.md) | Accepted | 2026-07-10 |
|
||||||
| 0026 | [Unified project setup/update command: `/os-status:fix` remediates what the os-status checks flag](0026-unified-project-setup-update-command-os-status-fix-remediates-what-the-os-status-checks-flag.md) | Accepted | 2026-07-12 |
|
| 0026 | [Unified project setup/update command: `/os-status:fix` remediates what the os-status checks flag](0026-unified-project-setup-update-command-os-status-fix-remediates-what-the-os-status-checks-flag.md) | Accepted | 2026-07-12 |
|
||||||
| 0027 | [All cc-os per-project state lives under `.cc-os/<plugin>/`](0027-all-cc-os-per-project-state-lives-under-cc-os-plugin.md) | Accepted | 2026-07-12 |
|
| 0027 | [All cc-os per-project state lives under `.cc-os/<plugin>/`](0027-all-cc-os-per-project-state-lives-under-cc-os-plugin.md) | Accepted | 2026-07-12 |
|
||||||
|
| 0028 | [os-shortcuts plugin for user-invoked QOL commands, bounded against hook-injection plugins](0028-os-shortcuts-plugin-for-user-invoked-qol-commands-bounded-against-hook-injection-plugins.md) | Accepted | 2026-07-12 |
|
||||||
<!-- adr-index:end -->
|
<!-- adr-index:end -->
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# cc-os implementation status & changelog
|
# cc-os implementation status & changelog
|
||||||
|
|
||||||
_Last updated: 2026-07-10. This is the append-only implementation-status record moved out of
|
_Last updated: 2026-07-12. This is the append-only implementation-status record moved out of
|
||||||
`CLAUDE.md` (2026-07-08, task B1 of
|
`CLAUDE.md` (2026-07-08, task B1 of
|
||||||
[system-prompt-profiles-tasks.md](plans/system-prompt-profiles-tasks.md)). CLAUDE.md keeps
|
[system-prompt-profiles-tasks.md](plans/system-prompt-profiles-tasks.md)). CLAUDE.md keeps
|
||||||
orientation only; when a build step completes, record it HERE (plus
|
orientation only; when a build step completes, record it HERE (plus
|
||||||
|
|
@ -219,6 +219,16 @@ decisions go through `/os-adr:create`. CLAUDE.md updated (docs/adr/ layout entry
|
||||||
trigger-phrased decisions convention, os-adr rollout line). Remaining os-adr rollout: pilot
|
trigger-phrased decisions convention, os-adr rollout line). Remaining os-adr rollout: pilot
|
||||||
projects one at a time, then wider.
|
projects one at a time, then wider.
|
||||||
|
|
||||||
|
**os-shortcuts plugin + `/wrap` shipped (2026-07-12, ADR-028, Planka card):** new plugin
|
||||||
|
`plugins/os-shortcuts/` for user-invoked QOL commands — the "keybindings" of cc-os; domain
|
||||||
|
boundary vs automatic hook injection (os-orchestration / future os-context) recorded in
|
||||||
|
ADR-028; skills only, no hooks. First resident `/os-shortcuts:wrap` encodes the session-close
|
||||||
|
ritual from the 2026-07-09 workflow audit (typed 20+ times): git review → commits per repo
|
||||||
|
conventions → doc/todo sweep deferring to project CLAUDE.md → Done/In-flight/Next handoff.
|
||||||
|
Registered in the local-plugins marketplace, enabled in settings.json, installed via
|
||||||
|
`claude plugin install os-shortcuts@local-plugins`. Sonnet-delegated build. `/readonly`
|
||||||
|
remains a separate open card (decide vs plan mode first).
|
||||||
|
|
||||||
**Remaining optional items:** additional project onboarding (one at a time, per ADR-013); bulk
|
**Remaining optional items:** additional project onboarding (one at a time, per ADR-013); bulk
|
||||||
vault migration. All required build steps complete as of 2026-06-15.
|
vault migration. All required build steps complete as of 2026-06-15.
|
||||||
|
|
||||||
|
|
@ -619,6 +629,17 @@ symlinked into `~/.claude/plugins/os-backlog`; PRD Forgejo issue #9, slices #10
|
||||||
installed 0.2.0 gem post-migration — see "os-backlog migrated to planka-api 0.2.0" and
|
installed 0.2.0 gem post-migration — see "os-backlog migrated to planka-api 0.2.0" and
|
||||||
"os-backlog live verification (0.2.0)" timeline entries above.
|
"os-backlog live verification (0.2.0)" timeline entries above.
|
||||||
|
|
||||||
|
### os-shortcuts (plugin)
|
||||||
|
|
||||||
|
Global plugin: user-invoked QOL shortcut commands (ADR-028). Skills only — never hooks;
|
||||||
|
automatic injection belongs to os-orchestration / the planned os-context.
|
||||||
|
|
||||||
|
- Skills: `/os-shortcuts:wrap` — session-close ritual (git review, commits per repo
|
||||||
|
conventions, doc/todo sweep deferring to project CLAUDE.md, handoff summary). Shipped
|
||||||
|
2026-07-12.
|
||||||
|
- Expected future residents: additional shortcuts as audit findings warrant (`/readonly`
|
||||||
|
card is open — decide vs plan mode before implementing).
|
||||||
|
|
||||||
## Operational procedures
|
## Operational procedures
|
||||||
|
|
||||||
### Renaming or moving a local plugin
|
### Renaming or moving a local plugin
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"name": "os-shortcuts",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "User-invoked QOL shortcut commands for the cc-os plugin family — the 'keybindings' of cc-os, ritual multi-step sequences invoked on demand (not automatic hook injection). Starts with /os-shortcuts:wrap (session-close ritual); expect more shortcuts to accumulate here."
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
---
|
||||||
|
description: Session-close ritual — review changes, commit, sweep affected docs/todos, and produce a handoff summary. Trigger on "wrap up", "close out this session", "wrap", end-of-session. Invoked by /os-shortcuts:wrap.
|
||||||
|
---
|
||||||
|
|
||||||
|
# wrap
|
||||||
|
|
||||||
|
The session-close ritual: review, commit, sweep docs, hand off. Run this near the end
|
||||||
|
of a working session so nothing from the session is lost — uncommitted work, stale
|
||||||
|
docs, or context the next session (or the user) needs.
|
||||||
|
|
||||||
|
## Flow
|
||||||
|
|
||||||
|
1. **Check the session's work.** Run `git status` and `git diff` (staged and
|
||||||
|
unstaged) to see everything touched this session. If nothing changed, skip to
|
||||||
|
step 4 and say so.
|
||||||
|
|
||||||
|
2. **Propose and make commit(s).**
|
||||||
|
- Read the project's `CLAUDE.md` (if present) for commit conventions, and run
|
||||||
|
`git log --oneline -10` to match the repo's actual message style.
|
||||||
|
- Group changes into logically separate commits rather than one giant commit,
|
||||||
|
unless the work is genuinely a single unit.
|
||||||
|
- Follow this repo's own git-safety rules (never `--no-verify`, never force-push,
|
||||||
|
new commits rather than amends, etc.) — these are standing rules, not
|
||||||
|
session-specific.
|
||||||
|
- Commit directly unless the project's own conventions require confirmation
|
||||||
|
first (e.g. a CLAUDE.md instruction to ask before committing, or a commit that
|
||||||
|
touches something sensitive/destructive). Default is to just commit.
|
||||||
|
|
||||||
|
3. **Sweep docs/todos affected by the session's work.** Look for anything the
|
||||||
|
session's changes should have updated but may not have:
|
||||||
|
- Build-plan checkmarks / step status (e.g. `docs/*/*-build-plan.md` style files).
|
||||||
|
- Status/timeline docs (e.g. `docs/implementation-status.md`-style files) —
|
||||||
|
add a timeline entry if the project keeps one.
|
||||||
|
- `_Last updated:_` / status lines on any design doc actually touched this
|
||||||
|
session.
|
||||||
|
- Any TODO list or issue tracker the project uses, per its own conventions.
|
||||||
|
Defer entirely to the project's `CLAUDE.md` for *which* files are the source of
|
||||||
|
truth and *how* they should be updated — don't invent a doc-update convention a
|
||||||
|
project doesn't already have. If the project has no such conventions, skip this
|
||||||
|
step rather than fabricating structure.
|
||||||
|
- If doc updates are substantive, fold them into a commit (step 2 pattern
|
||||||
|
applies) rather than leaving them uncommitted.
|
||||||
|
|
||||||
|
4. **Produce a handoff summary as your final message.** Concise, three parts:
|
||||||
|
- **Done** — what was completed and committed this session.
|
||||||
|
- **In flight** — anything left uncommitted, half-finished, or deliberately
|
||||||
|
deferred, and why.
|
||||||
|
- **Next steps** — the concrete next action(s), especially anything that needs
|
||||||
|
the user's decision.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- This skill has no hooks — it only runs when explicitly invoked.
|
||||||
|
- Don't silently skip step 2 or step 3 because it feels like extra work: the whole
|
||||||
|
point of `wrap` is to replace a manual ritual the user was doing by hand every
|
||||||
|
session.
|
||||||
|
- If a repo has no discernible commit or doc-update conventions, use judgment and
|
||||||
|
say so in the handoff rather than guessing silently.
|
||||||
Loading…
Reference in New Issue