From b86a9a4d118c878144600a756ffc1e552cdd668b Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:03:07 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 +++ README.md | 3 + commands/receive.md | 93 ++++++++++++++++++++++ commands/send.md | 157 +++++++++++++++++++++++++++++++++++++ plugin.lock.json | 49 ++++++++++++ 5 files changed, 314 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/receive.md create mode 100644 commands/send.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..88e820d --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "context-handoff", + "description": "Hierarchical parent-child session context handoff system. Pass context between sessions using /context:send and /context:receive.", + "version": "1.1.0", + "author": { + "name": "Mae Capacite", + "email": "cadrianmae@users.noreply.github.com" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..098b37e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# context-handoff + +Hierarchical parent-child session context handoff system. Pass context between sessions using /context:send and /context:receive. diff --git a/commands/receive.md b/commands/receive.md new file mode 100644 index 0000000..d451b22 --- /dev/null +++ b/commands/receive.md @@ -0,0 +1,93 @@ +--- +description: Receive context from parent or child session +argument-hint: [subject] [path] +allowed-tools: Bash, Read +--- + +# receive - Receive context from parent or child session + +Read and integrate context from a parent or child session handoff file. + +## Usage + +``` +/context:receive parent [subject] [path] +/context:receive child [subject] [path] +``` + +Both subject and path are optional: +- **subject**: Claude will infer from context if not provided +- **path**: Defaults to `/tmp/claude-ctx/` if not provided + +## What it does + +1. Checks if `/tmp/claude-ctx/` directory exists using test command +2. Creates directory only if it doesn't exist +3. If creating directory, generates minimal README.md: + ```markdown + # Claude Context Handoff Directory + + This is an **ephemeral directory** for Claude Code session context handoff. Created by claude slash commands. '/context:send' and '/context:receive'. + ``` +3. Determines direction: parent-to-child or child-to-parent +4. If subject provided, looks for `{path}/ctx-{direction}-{subject}.md` +5. If no subject, uses wildcard: `{path}/ctx-{direction}-*.md` **sorted by newest first** +6. Path defaults to `/tmp/claude-ctx/` but can be customized +7. Reads and displays context file +8. Integrates context into current session understanding + +**Important:** When using wildcard (no subject), files are sorted by modification time with **newest first**, ensuring you get the most recent context. + +## Example: Receiving from Parent (Wildcard) + +``` +/context:receive parent + +✓ Searching for context files: /tmp/claude-ctx/ctx-parent-to-child-*.md (newest first) +✓ Found: /tmp/claude-ctx/ctx-parent-to-child-database-migration.md (modified 2 minutes ago) + +[Context displayed with parent session details] + +Ready to begin focused work based on parent's context! +``` + +## Example: Receiving from Child with Subject + +``` +/context:receive child api-implementation + +✓ Context received from child session + File: /tmp/claude-ctx/ctx-child-to-parent-api-implementation.md + +[Context displayed with completed work summary] + +Child session completed. Integrating results back. +``` + +## Example: Custom Path + +``` +/context:receive parent database-work ~/Documents/context/ + +✓ Context received from parent session + File: ~/Documents/context/ctx-parent-to-child-database-work.md + +[Context displayed] +``` + +## What gets loaded + +- **Context file content**: Decisions, work done, blockers, next actions +- **Handoff metadata**: Why the handoff occurred, what was planned +- **Related context**: Key information needed to continue + +## When to use + +- Immediately after starting a new child session from parent +- After resuming parent session when child is complete +- When receiving context from any parent/child session +- To understand what happened in related session + +## Related commands + +- `/context:send` - Send context to parent/child before switching diff --git a/commands/send.md b/commands/send.md new file mode 100644 index 0000000..bdf511d --- /dev/null +++ b/commands/send.md @@ -0,0 +1,157 @@ +--- +description: Send context to parent or child session before switching +argument-hint: [subject] [path] +allowed-tools: Bash, Write +--- + +# send - Send context to child or parent session + +Create a context handoff file for transitioning between parent and child sessions. + +## Usage + +``` +/context:send child [subject] [path] +/context:send parent [subject] [path] +``` + +Both subject and path are optional: +- **subject**: Claude will infer from current conversation context if not provided +- **path**: Defaults to `/tmp/claude-ctx/` if not provided + +## What it does + +1. Checks if `/tmp/claude-ctx/` directory exists using test command +2. Creates directory only if it doesn't exist +3. If creating directory, generates minimal README.md: + ```markdown + # Claude Context Handoff Directory + + This is an **ephemeral directory** for Claude Code session context handoff. Created by claude slash commands. '/context:send' and '/context:receive'. + ``` +3. Determines direction: parent-to-child or child-to-parent +4. If subject provided, creates `{path}/ctx-{direction}-{subject}.md` +5. If no subject, infers from current conversation context and creates file with inferred name +6. Path defaults to `/tmp/claude-ctx/` but can be customized +7. Uses `cat > filename.md << 'EOF'` to clear file and write context +8. Includes: + - Current situation and context + - Decisions made and work completed + - Blockers and next actions + - Files modified +9. Shows clear "next steps" for user + +**File naming pattern:** +- `/context:send child` → `/tmp/claude-ctx/ctx-parent-to-child-{inferred-subject}.md` +- `/context:send parent` → `/tmp/claude-ctx/ctx-child-to-parent-{inferred-subject}.md` + +## Example: Sending to Child with Subject + +``` +/context:send child database-migration + +✓ Context prepared for child session + File: /tmp/claude-ctx/ctx-parent-to-child-database-migration.md + +Next steps: +1. Start child session for focused work +2. In new session, run: /context:receive parent +``` + +## Example: Sending to Parent (Subject Inferred) + +``` +/context:send parent + +✓ Context prepared for parent session + File: /tmp/claude-ctx/ctx-child-to-parent-api-implementation.md + +Next steps: +1. Exit this session +2. Resume parent session +3. In parent session, run: /context:receive child +``` + +## Example: Custom Path + +``` +/context:send child feature-work ~/Documents/context/ + +✓ Context prepared for child session + File: ~/Documents/context/ctx-parent-to-child-feature-work.md + +Next steps: +1. Start child session +2. In new session, run: /context:receive parent feature-work ~/Documents/context/ +``` + +## Context File Contents + +The context file should include: + +### Current Situation +- What work is being done +- Why the handoff is happening +- What the next session needs to focus on + +### Decisions Made +- Key technical choices +- Trade-offs considered +- Rationale for decisions + +### Work Completed +- What has been implemented +- Files created/modified +- Tests written +- Commits made + +### Blockers & Issues +- Problems encountered +- Questions that arose +- Things to investigate + +### Next Actions +- What should happen next +- Specific tasks for the receiving session +- Dependencies or prerequisites + +## Implementation Pattern + +**Create directory if needed:** + +```bash +# Check if directory exists, create only if needed +[[ -d /tmp/claude-ctx ]] || { + mkdir -p /tmp/claude-ctx + cat > /tmp/claude-ctx/README.md << 'EOF' +# Claude Context Handoff Directory + +This is an **ephemeral directory** for Claude Code session context handoff. Created by claude slash commands. '/context:send' and '/context:receive'. +EOF +} +``` + +**Write context file:** + +Use heredoc to write context file: + +```bash +cat > /tmp/claude-ctx/ctx-parent-to-child-{subject}.md << 'EOF' +# Context: Parent → Child + +[Context content here] +EOF +``` + +This pattern clears the file first, preventing accumulation of old context. + +## When to use + +- Before starting a child session from parent +- Before returning to parent after completing child work +- When switching between hierarchy levels +- When context needs to be passed between sessions + +## Related commands + +- `/context:receive` - Receive context from parent/child session diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..887ac4a --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,49 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:cadrianmae/claude-marketplace:plugins/context-handoff", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "f33b4f1f45d1f941b2c95a2ef6482b1a74b244fa", + "treeHash": "be53bf43df38ea4ae601ad010fbd38316bc3bcaf0453f7558db5505201d419a6", + "generatedAt": "2025-11-28T10:14:27.387891Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "context-handoff", + "description": "Hierarchical parent-child session context handoff system. Pass context between sessions using /context:send and /context:receive.", + "version": "1.1.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "974e664f78d6d04f0c17da5d2355c48b6c967dcfac64b9539ca38592f2d3ce1e" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "e0e106974da7b1729d5add9328f52f203346f8ad34a1afc732dc30e413528cb5" + }, + { + "path": "commands/receive.md", + "sha256": "97f73bf8ef7f253adf26ee06947d725023b44c744c4d0447731362f114e3c8cc" + }, + { + "path": "commands/send.md", + "sha256": "21fca01fe313d1c848bd193c310dd04dac619423e044397b02473ddfe69026f7" + } + ], + "dirSha256": "be53bf43df38ea4ae601ad010fbd38316bc3bcaf0453f7558db5505201d419a6" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file