Skip to content
Back to skills

Session Start

ASecurity

Cold session start — context, status, focus. Use at the beginning of each new session.

  • 13 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsgobashnoderefactoringgitbackend

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add IlyaGorsky/memory-toolkit --skill session-start --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Session Start?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Session Start
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ilyagorsky-session-start/badge)](https://www.skillsdirectory.com/skills/ilyagorsky-session-start)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: session-start
description: Cold session start — context, status, focus. Use at the beginning of each new session.
user-invocable: true
argument-hint: "[workstream]"
allowed-tools:
  - Bash(node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" *)
---

# /session-start — Cold session start

Quick context entry. Gather state, propose focus.

---

## Step 1: Gather context

**Do NOT re-read MEMORY.md** — already in system prompt via claudeMd loader.

If a workstream argument is provided — skip to Step 3.

Run each command as its own Bash call — that is what the skill's `allowed-tools` pre-approves (no variables, loops or pipes):

```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" handoff        # latest handoff (per-workstream ones in Step 3)
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" workstreams    # sorted by aggregate weight
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" dir            # memory folder, keyed by git root like CC
```

Then read the newest `notes/YYYY-MM-DD.md` in that folder (first ~30 lines), and for each of the top 3 workstreams:

```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" workstream <name> --brief
```

**Decision tree — source of focus candidates:**

| Handoff state | Candidates source |
|---|---|
| ≤7 days old, has "What's next" | Handoff primary (workstreams table still rendered for context) |
| >7 days old | Workstreams table; handoff shown as stale context |
| Missing/empty/only `SESSION_START` markers | Workstreams table; say "no usable context", suggest `/session-restore` |
| No handoff, no notes | Workstreams table only |

The workstreams table in Step 1b is **always** rendered in Step 4 — it's the session's map, not a fallback. The decision tree only controls where focus candidates come from.

---

## Step 1b: Workstreams table (always rendered)

Render as table. Top-3 rows show synthesized "What's in" from `--brief`; rest show keywords. ➕ row is mandatory.

```
**Workstreams** (sorted by aggregate weight)

| # | Workstream | Last touched | What's in / Keywords |
|---|---|---|---|
| 1 | <name> | <date> | <synthesized 1-line for top-3> |
| ... | | | <keywords for rest> |
| N | ➕ Create new | | |
```

If user picks ➕ — ask name + keywords, then:
```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" add-workstream <name> <keyword1> <keyword2> ...
```
If decisions on this theme are already in the notes (`node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" unassigned`), offer a card drafted from them — see `card` in the memory skill.

---

## Step 2: Git status

```bash
git status; git log --oneline -5; git branch --show-current
```

- Uncommitted changes → ask: "Commit or continue on top?"
- Last commit >5 days ago → note it
- **Commits:** synthesize last 2-3 into 1 line about the theme. Don't list verbatim.

**Branch ↔ workstream check:** does branch name contain any keyword from `workstreams.json`?

- Match → skip "Current branch" block in Step 4
- No match → run `git log <branch> --oneline -10` + `git diff $(git merge-base HEAD "origin/$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's|^origin/||')")...HEAD --stat` (default branch, not hardcoded `main`). Synthesize phase (review iteration / new feature / hotfix). Grep `notes/` for branch name. Surface in Step 4 as branch block + extra focus candidate.

If handoff has `lastCommit` ref: show `git log <ref>..HEAD --oneline` (changes since session-end).

---

## Step 3: Workstream brief

```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" card <name>         # what the workstream is, what's open — NO_CARD if none
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" parked <name>       # what was set aside in it — mention titles in the task plan
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" handoff <name>      # per-workstream handoff if available
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" workstream <name> --brief
```

Read the card first: it frames the handoff. Show: open/done task counts, blockers, pickable now. **Do NOT read full files** — full context loads only after task pick in Step 4.

---

## Step 4: Render & propose

**Use the user's preferred language** (from `profile/language.md` if present, else English). Translate labels and prose; keep markdown structure, identifiers, code refs as-is.

**Required format** — clean bold headers, no emoji, `---` between every block, blank line after each header before content.

```text
## Session YYYY-MM-DD

**Git:** branch `<branch>` / <N> uncommitted / last commit <days> days ago
**Commits:** <1-line synthesis>

---

**Workstreams**

[table from Step 1b]

---

**Task plan ({active workstream})**

{1-line context}
- [ ] {open task} ({SP})
- [ ] {open task} — {blocker}

---

**Current branch `{branch}`** _(only if no workstream match)_

{1-2 sentences: theme, phase, side task vs portfolio}

---

**Focus candidates**

1. **{task}** — {why now} → `/model {model}` ({reason})
2. **{task}** — {why now} → `/model {model}` ({reason})
3. **{task}** — {why now} → `/model {model}` ({reason})

---

My hypothesis: focus on **{candidate #1}** because {reasoning grounded in handoff/git/recency}. Recommendation: `/model {model}`.

Agree, pick another candidate, or **start a new workstream**?
```

**Close with a hypothesis, not a menu.** Users iterate on a proposal faster than they pick from a list. Candidates 2-3 stay visible for quick override.

**MANDATORY:** the closing line must keep "start a new workstream" as an explicit option. Never omit it — the hypothesis frame hides existing workstreams, so the escape hatch to create a new one has to be surfaced every time. If the user picks it, run Step 1b (workstream creation).

**Model selection:** Opus = planning/architecture/exploration. Sonnet = execution by plan, refactoring, review. Haiku = routine/translation/pattern copy. Write it as the command to type — `/model opus`, `/model sonnet`, `/model haiku` — one action instead of a menu.

---

## Step 5: Session label

```bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" note "SESSION_START branch:$(git branch --show-current) workstream:<chosen> focus:<task>"
```

(Auto-routed to `sessions.log`, not notes.)

---

## Rules

- Max 3 focus candidates
- Skip blocked tasks (waiting on mockups/backend) from candidates — note them separately
- Workstream argument → go straight to Step 3
- Previous session ended with compact → check via `/session-restore`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.