Load focused context for a specific project or area to continue work.
Uses $JOURNAL_PATH (defaults to
~/dev/status) for the daily log journal, and
~/.whisper/ for accumulated operational knowledge. The log
subdirectory defaults to log/; set
$JOURNAL_LOG_SUBDIR to override (e.g.
areas/log for the JORNAL layout).
Pull the journal repo:
JOURNAL="${JOURNAL_PATH:-$HOME/dev/status}"
LOG_SUBDIR="${JOURNAL_LOG_SUBDIR:-log}"
cd "$JOURNAL" && git pullIdentify the target.
If a <slug> is provided: The user
says /renew <slug>.
If no slug is provided: Infer from the current workspace context:
basename $(git rev-parse --show-toplevel 2>/dev/null)git branch --show-current 2>/dev/nullak/, feature/, etc.)Match candidates against:
$JOURNAL/projects/*.md — check filenames and grep for
repo/branch references$JOURNAL/areas/*.md — sameRead the matched project or area file.
Read today's log
($JOURNAL/$LOG_SUBDIR/YYYY/YYYY-MM/YYYY-MM-DD.md). If it
doesn't exist, create it with the daily log template. Scan for any
earlier session entries related to this project/area today.
Search recent logs for context (last 3 days):
grep -rl "<slug>" "$JOURNAL"/"$LOG_SUBDIR"/YYYY/YYYY-MM/ 2>/dev/null | tail -3Read any matches to understand recent session history.
Search inbox for related items:
grep -i "<slug>" "$JOURNAL"/inbox.mdCheck ~/.whisper/ for accumulated
knowledge. If ~/.whisper/ exists, load
context:
repo_url=$(git remote get-url origin 2>/dev/null | sed 's|https://||;s|git@||;s|\.git$||')
branch_slug=$(git rev-parse --abbrev-ref HEAD | sed 's|/|--|g')
whisper_dir=~/.whisper/repos/"${repo_url}"/branches/"${branch_slug}"context.md if it exists (extract beads-epic,
status)plan.md if it has real contentnotes.md if it has real contentenv.md at repo level for infra factsbd list --label branch:<branch> 2>/dev/null
bd list --status in_progress --label branch:<branch> 2>/dev/nullin_progress tickets prominently. The
Suggested next step must only reference tickets NOT
currently in_progress.If the project/area has a worktree or repo path noted in its file, gather git context:
cd <worktree-path> && git branch --show-currentgit log --oneline -5git status --shortgit log --oneline origin/main..HEAD---
**Resuming: Project/Area Name**
**Status**: brief one-line summary of where things stand
**Last session** *(from most recent log entry)*
- what was done last time
**Open tasks**
- [ ] task list from the project/area file
**Waiting**
- [~] any blocked items and who/what they're waiting on
**Related inbox items** *(if any)*
- items that mention this project
**Whisper context** *(if ~/.whisper/ exists)*
- Plan: summary of current plan
- Notes: key findings
- Beads issues: <n> open, <n> in_progress
**⚠ Active in flight** *(omit if none)*
- ◐ `<id>` — <title> [started: <date>]
- *(If your intended ticket is listed here, see **Claiming work** below.)*
**Workspace**
- Worktree: path, branch, status
- Commits ahead of main, uncommitted changes, etc.
**Suggested next step**
- what makes sense to do next — only suggest tickets NOT currently in_progress
Then ask: "Ready to continue, or want to adjust the plan?"
Before writing any code, claim the ticket atomically and check for file conflicts.
Claim atomically:
bd update <ticket-id> --claimCheck for file-level conflicts with other in-progress tickets:
bd list --status in_progress --label branch:<branch> --json 2>/dev/null \
| python3 -c "
import json, sys
issues = json.loads(sys.stdin.read() or '[]')
for i in issues:
files = (i.get('metadata') or {}).get('files', [])
for f in files:
print(i['id'] + '\t' + f)
"Cross-reference against the claimed ticket's own
metadata.files. If overlap found, surface a warning:
⚠ File conflict detected:
services/api.py is also claimed by ticket-abc (in_progress)
Options:
A) Gate this ticket until the blocker closes
B) Coordinate merge order
C) Proceed — accept the conflict (reconcile at merge time)If backing off (chose option A):
bd update <ticket-id> --assignee "" --status open
bd gate create <ticket-id> --type bead --await-id <blocking-id>File conflict detection only works when both tickets have
metadata.files populated (set by create-issues
or /w link at ticket creation time). Tickets created before
this convention was adopted have no metadata. For those tickets,
"no conflict found" means unknown, not safe.
DEPRECATED — DOCUMENTATION ONLY. The live version of this skill comes from incitaciones (npm). This copy is a stale snapshot kept for reference. Do not edit here — edit upstream and re-install.