From samocode
Creates, loads, syncs, and archives work sessions with git worktree support. Requires explicit session paths or .samocode config.
How this skill is triggered — by the user, by Claude, or both
Slash command
/samocode:session-managementThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manages work sessions. Session paths must be explicitly provided or known from context.
Manages work sessions. Session paths must be explicitly provided or known from context.
IMPORTANT: Sessions do NOT have a default location. The session path must be:
start ~/projects/my-project/_sessions/session-name).samocode file under SESSIONS pathIf session path cannot be determined: STOP and ask the user for the session location.
Finding .samocode: Look in current working directory (where the provider CLI was started). Never guess paths - if .samocode not found, ask user.
IMPORTANT: All git operations (fetch, branch creation, worktree management) MUST run from the correct repository directory.
.samocode from CWD — use MAIN_REPO value as the repo directory for all git commands.samocode not found or MAIN_REPO not set: fall back to git rev-parse --show-toplevel from CWDUse $ARGUMENTS to specify action and parameters:
start [session-path/name] - Create new sessioncontinue [session-name-pattern] - Load existing sessionsync - Sync current conversation to active sessionarchive [session-name-pattern] - Archive a sessionCreate a new work session.
Resolve session location:
.samocode from current working directory, use SESSIONS path.samocode not found: STOP and ask user - never guess or create arbitrary foldersParse session name:
Create session folder:
[SESSIONS_DIR]/[YY-MM-DD]-[session-name]/ (use current date for folder name)Create worktree (if .samocode has WORKTREES):
Read MAIN_REPO and WORKTREES from .samocode. If both are set, create a worktree:
# Derive branch name: strip date prefix from session folder name
# e.g., "26-02-05-my-feature" -> "my-feature"
BRANCH_NAME=[session-name] # the name before date-prefixing
# If GIT_BRANCH_PREFIX env var is set, prepend it: [prefix]/[branch-name]
# Fetch and detect default branch
cd [MAIN_REPO]
git fetch origin
DEFAULT_BRANCH=$(git remote show origin | grep 'HEAD branch' | cut -d: -f2 | xargs)
# Create worktree from remote default branch
git worktree add -b [BRANCH_NAME] [WORKTREES]/[YY-MM-DD]-[session-name] origin/$DEFAULT_BRANCH
If worktree creation fails (branch already exists), try attaching to existing branch:
git worktree add [WORKTREES]/[YY-MM-DD]-[session-name] [BRANCH_NAME]
Working Dir = [WORKTREES]/[YY-MM-DD]-[session-name]
Restore gitignored env files in the worktree (git worktree add does not copy gitignored files):
.env (or per-service .env) that lives outside git, copy it from the main repo, or seed it from a secrets store. Path layout is project-specific — check MAIN_REPO's .env* files and the project README.If WORKTREES not set (non-repo project): fall back to MAIN_REPO, or git rev-parse --show-toplevel, or current directory.
Create _overview.md:
# Session: [session-name]
Started: [TIMESTAMP_LOG]
Working Dir: [worktree-path or fallback]
## Status
Phase: investigation
Iteration: 1
Blocked: no
Last Action: Session created
Next: Ready to work
## Flow Log
- [TIMESTAMP_ITERATION] Session created
## Files
(none yet)
## Plans
(none yet)
## Linear Tasks
(none yet)
Commit (if sessions dir is a git repo):
cd [SESSIONS_DIR] && git add . && git commit -m "Start session: [session-name]"Confirm to user:
Session created: [YY-MM-DD]-[session-name]
Path: [full-path]
Working Dir: [worktree-path or fallback]
Branch: [BRANCH_NAME]
IMPORTANT: This is now your active session. Remember this path for subsequent commands.
Ready to work. Use /dive, /task, or /create-plan to continue.
IMPORTANT: After creating the session, keep the session path in your working memory for all subsequent session-aware commands.
Load and continue working in an existing session.
Resolve session location:
.samocode file for SESSIONS pathFind matching sessions:
*$ARGUMENTS* (exclude _archive/)Handle results:
Load session:
_overview.md from the session folder- [TIMESTAMP_ITERATION] Session resumedgit add . && git commit -m "Resume session: [session-name]"Present summary:
Session: [session-name]
Path: [full-path]
Working Dir: [from _overview.md]
Started: [date]
Recent Activity:
[Last 5-10 Flow Log entries]
Files: [count]
[List with brief descriptions]
Plans: [list if any]
Linear Tasks: [list if any]
---
Session loaded. Ready to continue.
IMPORTANT: After loading, keep the session path in your working memory for all subsequent session-aware commands.
Ensure all work from this conversation is recorded in the active session.
Check for active session:
Read current session state:
[SESSION_PATH]/_overview.mdReview conversation for unrecorded work:
Update _overview.md:
Create detail files if warranted:
Commit (if git repo):
cd [SESSION_DIR] && git add . && git commit -m "Sync session: [session-name]"Extract learnings:
Report:
Archive a session (full) or archive work within a session (partial).
archive - Archive entire active session (moves folder to _archive/)archive [session-name] - Archive entire named sessionarchive keep file1.md file2.md - Archive work files within session, keep specified filesarchive [session-path] keep file1.md - Archive work in specific session, keep filesIf arguments after "archive" are empty:
If arguments provided (no "keep"):
*$ARGUMENTS* (exclude _archive/)Get session info:
[SESSION_PATH]/_overview.mdCreate archive folder if needed:
mkdir -p [SESSIONS_DIR]/_archive
Remove worktree (if applicable):
/worktrees/:
MAIN_REPO from .samocode (see "Repository Resolution" section)MAIN_REPO directory:
cd "$MAIN_REPO" && git worktree remove [working_dir_path]
Move session folder:
mv [SESSION_PATH] [SESSIONS_DIR]/_archive/
Commit changes (if git repo):
cd [SESSIONS_DIR] && git add . && git commit -m "Archive session: [session-name]"Clear active session (if archiving active session):
Extract learnings:
Confirm to user:
Session archived: [session-name]
Moved to: [archive-path]
Worktree removed: [path] (branch preserved)
Session closed.
Archives completed work within a session while keeping important deliverables accessible.
Example: archive keep competitor-analysis.md → archive active session, keep competitor-analysis.md
Resolve session:
Get timestamp and slug:
TIMESTAMP_FOLDER=$(date '+%y-%m-%d')
[SESSION_PATH]/_archive/[YY-MM-DD]-[slug]/Create archive subfolder:
mkdir -p [SESSION_PATH]/_archive/[YY-MM-DD]-[slug]
Identify files to archive:
.md files in session root EXCEPT:
_overview.md (always kept - session state)_qa.md (always kept if exists)_signal.json (always kept)[MM-DD-HH:mm]-*.md)Move files to archive:
for file in [files_to_archive]; do
mv "$file" [SESSION_PATH]/_archive/[YY-MM-DD]-[slug]/
done
Update _overview.md:
- [TIMESTAMP_LOG] Archived work to _archive/[YY-MM-DD]-[slug]/, kept: [kept_files]Extract learnings:
Report to user:
Work archived within session.
Archived to: [SESSION_PATH]/_archive/[YY-MM-DD]-[slug]/
Files moved: [count] files
Kept in place: [kept_files]
npx claudepluginhub yuvasee/samocodeParks diverging ideas and unanswered questions into project-scoped memory files via git-derived paths. Use /session resume to list pending items, archive to close matched ones, summary for session digest.
Generates a passoff package (session summary, PROGRESS/CLAUDE/memory updates, commit, next-session prompt) for clean handoffs to future-you or a coworker brief mode.
Manages Claude Code sessions using /rename, /resume, and CLI commands for naming, checkpointing, and resuming workflows in debugging, feature development, PR reviews, and investigations.