skills/start/SKILL.md
Start a task session — creates a Linear issue, git worktree, and launches a new Claude session. Use when the user says /start or wants to begin a new isolated task.
npx skillsauth add team-plask/session-workflow startInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Implementation note: Steps 1, 3, 4, 5 are purely mechanical — execute them without deliberation. Only Step 2 (Linear issue) requires judgment for the title.
Create a Linear issue, git worktree, and launch a new Claude session for the task.
Task: $ARGUMENTS
Read .claude/session-config.json from the project root. If it doesn't exist, use these defaults:
{
"linear": { "team": "Engineering", "labels": ["claude-session"], "startState": "started" },
"github": { "baseBranch": "main" },
"supabase": { "branchingEnabled": false, "projectId": "", "organizationId": "" },
"entire": { "enabled": false },
"worktrees": { "directory": ".worktrees" }
}
Use config values throughout (referred to as config.linear.team, etc.).
Run the cleanup script to remove any completed worktrees from previous sessions:
bash "$(dirname "$(claude skill path start")")/scripts/done-cleanup.sh" 2>/dev/null || true
If the skill script path isn't resolvable, fall back to:
# Find the done-cleanup.sh in .claude/skills
find -L .claude/skills -name "done-cleanup.sh" -exec bash {} \; 2>/dev/null || true
Use the Linear MCP tool (try mcp__linear-server__create_issue first, fall back to mcp__claude_ai_Linear__create_issue) to create a new issue:
config.linear.team$ARGUMENTS (e.g., "Fix login bug on reservation form")config.linear.labelsconfig.linear.startStateFrom the response, extract:
id (UUID)identifier (e.g., "LNY-350")gitBranchName (e.g., "junho/lny-350-fix-login-bug")url (e.g., "https://linear.app/.../LNY-350")Build the state JSON object:
{
"linearIssueId": "<id from step 2>",
"linearIssueIdentifier": "<identifier from step 2>",
"linearIssueUrl": "<url from step 2>",
"linearBranchName": "<gitBranchName from step 2>",
"worktreePath": "<repo-root>/<config.worktrees.directory>/<sanitized-branch>",
"mainRepoPath": "<repo-root>",
"taskDescription": "$ARGUMENTS",
"createdAt": "<current ISO timestamp>",
"status": "active"
}
Where <sanitized-branch> is the gitBranchName with / replaced by -.
Run the worktree creation script:
# Find the start-worktree.sh script
SCRIPT=$(find -L .claude/skills -name "start-worktree.sh" | head -1)
bash "$SCRIPT" "<gitBranchName>" '<state-json>'
The script will:
origin/<baseBranch>.claude/session-state.json inside the worktree.claude/worktree-sessions/<sanitized-branch>.json in the main repoIf config.supabase.branchingEnabled is true and config.supabase.projectId is set:
Use mcp__claude_ai_Supabase__get_cost with:
Then mcp__claude_ai_Supabase__confirm_cost with the returned amount.
Then mcp__claude_ai_Supabase__create_branch with:
From the response, extract the branch's project_ref (the branch's own project ID for queries).
Add to the session-state JSON:
Update the worktree's .claude/session-state.json with these fields.
Open Claude in a new split pane in Ghostty (or fall back to Terminal.app):
If running inside Ghostty (check $GHOSTTY_RESOURCES_DIR):
osascript <<'APPLESCRIPT'
tell application "System Events"
tell (first process whose bundle identifier is "com.mitchellh.ghostty")
keystroke "d" using command down
delay 0.8
set the clipboard to "cd <worktree-path> && claude \"$(cat .claude/initial-prompt.txt)\""
keystroke "v" using command down
delay 0.1
keystroke return
end tell
end tell
APPLESCRIPT
Otherwise fall back to Terminal.app:
osascript -e 'tell application "Terminal" to do script "cd <worktree-path> && claude \"$(cat .claude/initial-prompt.txt)\""'
Replace <worktree-path> with the actual worktree path returned from Step 3.
Print a summary:
Linear: <identifier> - <url>
Branch: <gitBranchName>
Worktree: <worktrees-dir>/<sanitized-branch>/
Supabase Branch: <supabaseBranchId> (project ref: <supabaseBranchProjectRef>)
New split opened with Claude session
If Supabase branching was not enabled, omit the Supabase line.
Tell the user to switch to the new split pane to start working.
data-ai
Wrap up the current session — commits, pushes, creates PR, updates Linear. Detects worktree vs main branch context automatically.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------