plate
暂无简介
- License 许可
- GPL-3.0
- 所属仓库
- matkatmusic/jot
- 最近更新
- 2026-05-23
- Stars
- ★ 0
- Forks
- 0
02 资源文件 31
- 参考文档DESIGN.md35.0 KB
- 参考文档IMPLEMENTATION.md65.0 KB
- 参考文档README.md4.4 KB
- 脚本scripts/assets/permissions.default.json1.1 KB
- 脚本scripts/assets/permissions.default.json.sha25691 B
- 脚本scripts/branch-snapshot.sh4.0 KB
- 脚本scripts/branch-snapshot.v2.sh4.3 KB
- 脚本scripts/done.sh5.6 KB
- 脚本scripts/drop.sh2.8 KB
- 脚本scripts/list-paused-plates.sh723 B
- 脚本scripts/next.sh472 B
- 脚本scripts/paths.sh686 B
- 脚本scripts/plate-orchestrator.sh294 B
- 脚本scripts/plate-session-start.sh1.9 KB
- 脚本scripts/plate-worker-end.sh224 B
- 脚本scripts/plate-worker-start.sh1.4 KB
- 脚本scripts/plate-worker-stop.sh867 B
- 脚本scripts/plate.sh5.5 KB
- 脚本scripts/prompts/bg-agent.md2.7 KB
- 脚本scripts/prompts/drift-judge.md530 B
- 脚本scripts/push.sh8.3 KB
- 脚本scripts/register-parent.sh1.0 KB
- 脚本scripts/render-tree.sh439 B
- 脚本scripts/show.sh238 B
- 脚本scripts/snapshot-stash.sh1019 B
- 其他tests/fixtures/sample-transcript.jsonl2.0 KB
- 脚本tests/plate-claude-e2e.sh12.2 KB
- 脚本tests/plate-e2e-live.sh10.0 KB
- 脚本tests/test-done-smoke.sh9.0 KB
- 脚本tests/test-drop-smoke.sh3.9 KB
- 脚本tests/test-push-smoke.sh5.2 KB
03 SKILL.md 正文
Plate — Skill Body
You are the foreground claude that received a /plate prompt. The hook passed this prompt through because it requires your interaction capabilities (AskUserQuestion, tool use).
Variant Detection
Check the user's prompt:
- If
/plate --done→ follow the Done section below - If
/plate(no flag) → follow the Parent Selection section below
Done
The user wants to finalize their plate stack — replay all stacked plates as sequential commits.
Step 1 — Load command context
Read the command context file the hook dropped:
.plate/pending-command.json
It contains:
session_id— your current session ID ($SID)plate_scripts_dir— absolute path to the plate scripts directory ($SCRIPTS)python_dir— absolute path to the plate python directory ($PYDIR)plate_plugin_root— absolute path to the plugin root ($PLUGIN_ROOT)
If the file is missing, reply: plate: no command context — rerun /plate --done and stop.
Step 2 — Check for open children
Run:
INSTANCE_FILE=".plate/instances/<session_id>.json" python3 <python_dir>/check_live_children.py
If the output is yes, delegated children are still open. Call AskUserQuestion:
- question:
Delegated children are still open. How do you want to proceed? - options:
["Cancel — do not finalize", "Orphan children — finalize anyway", "Keep links — finalize and preserve child references"]
If the user picks Cancel, reply plate --done cancelled and stop. Otherwise proceed.
Step 3 — Run done.sh
Export the plugin environment, then run the done script:
export CLAUDE_PLUGIN_ROOT=<plate_plugin_root>
export CLAUDE_PLUGIN_DATA=~/.claude/plugins/data/plate-jot-dev
bash <plate_scripts_dir>/done.sh <session_id>
Step 4 — Relay output
The script prints a commit summary and resume pointer. Relay this output to the user verbatim.
Step 5 — Cleanup
Delete .plate/pending-command.json.
Parent Selection
You are the foreground claude that received a /plate prompt. The hook has determined this is a new session in a repo where other plate instances already exist ("path 3" in the design). You must present a parent-selection dropdown before pushing.
Step 1 — Load registration context
Read the pending registration file the hook dropped for you:
.plate/pending-registration.json
It contains:
session_id— your current session ID (call this$SID)transcript_path— path to your conversation transcript ($TP)cwd— absolute working directory ($CWD)plate_scripts_dir— absolute path to the plate plugin'sscripts/directory ($SCRIPTS)
Do NOT use $CLAUDE_PLUGIN_ROOT or any bash env variable to locate plate scripts. The user may have other plugins loaded that set that variable to a different plugin's path. Always use plate_scripts_dir from the registration JSON.
Step 2 — Enumerate candidate parents
Run this bash command (substituting the actual path from the registration JSON):
bash <plate_scripts_dir>/list-paused-plates.sh
Each output row is pipe-delimited: convoID|plateID|label|synopsis|pushed_at.
Step 3 — Branch on output
If output is EMPTY (no paused plates anywhere):
- Register as top-level:
bash <plate_scripts_dir>/register-parent.sh <session_id> none - Push:
bash <plate_scripts_dir>/push.sh <session_id> <transcript_path> <cwd> - Delete
.plate/pending-registration.json - Reply:
plate registered + pushed (top-level)
If output has 1+ rows:
- Build options for
AskUserQuestion:- For each row, format as:
<label> → "<synopsis>" (paused at <pushed_at>) - Prepend
Top-level (no parent)as the first option
- For each row, format as:
- Call
AskUserQuestionwith:- header:
Parent - question:
Pick a parent plate (or top-level) - multiSelect: false
- header:
- Parse the user's selection. Extract the
convoIDandplateIDfrom the row they picked (or passnone ""for top-level). - Register:
bash <plate_scripts_dir>/register-parent.sh <session_id> <parent_convo> <parent_plate> - Push:
bash <plate_scripts_dir>/push.sh <session_id> <transcript_path> <cwd> - Delete
.plate/pending-registration.json - Reply in one line:
plate registered + pushed: <synopsis>
Rules
- NEVER push before registration completes — parent_ref must be set first.
- NEVER skip the
AskUserQuestionstep when paused plates exist — the user must explicitly choose. - If the pending-registration file is missing, reply:
plate: no registration context — rerun /plateand stop. - Always resolve script paths via
plate_scripts_dirfrom the registration JSON. Do not trust$CLAUDE_PLUGIN_ROOTin the shell env — it may point at a different plugin. - When running push.sh, you MUST export
CLAUDE_PLUGIN_ROOT=<plate_plugin_root>andCLAUDE_PLUGIN_DATA=~/.claude/plugins/data/plate-jot-dev(or the appropriate plate data dir) so the script can find its lib + python helpers. Useplate_plugin_rootfrom the registration JSON.
04 同仓库更多 Skills
todo
Capture a mid-development TODO via "/todo <idea>". Reads a pending-context JSON file left by the UserPromptSubmit hook, asks clarifying questions if the idea is vague, then spawns a background Claude worker in tmux that scans git context and writes the final numbered TODO file. Use when user says "/todo", "park this idea", "save this for later", or "add a todo".
todo-list
Show all open TODOs from the project's Todos/ folder with ID, title, date, and branch. Use when user says "/todo-list", "show my todos", "what todos are open", or "list todos".
todo-clean
Clean up stale TODOs by comparing each open TODO against git history since its creation timestamp. Asks before marking each as done. Use when user says "/todo-clean", "clean up todos", "check for resolved todos", or "prune stale todos".
jot
Capture a mid-development idea via "/jot <idea>" without losing focus. Writes idea + git state, open TODOs, and recent conversation context to Todos/{timestamp}_input.txt; a background Claude (persistent per project in tmux) converts it into a proper TODO file — all without interrupting your current conversation.
debate
Multi-agent debate (Claude + Gemini + Codex) in tmux. Agents independently analyze, cross-critique, then synthesize. Use when user types "/debate <topic>".
debate-retry
Resume the most recent incomplete debate invoked from this conversation.