3.7 KiB
name, description
| name | description |
|---|---|
| pickup | Start a work session on a Maven task. Runs task start, reads the brief and the disposable handoff, restates the assumption set, and waits for correction before touching code. Use at the start of any session that continues earlier work, when the user says "pickup", "continue", "resume", or names a Vikunja task id. |
Pickup
The point of this skill is the pause in step 5. Every wasted session in this repo started with an agent that inferred the goal instead of stating it back.
0. Get on the branch
task start <vikunja-id> # with an id
git checkout -b task/<slug> # without one
An id is optional (owner's call, 2026-08-25). With one, ~/.local/bin/task owns
the branch, the identity and the PR. It cuts task/<id>-<slug> off
origin/master and sets the commit author to the claude gitea user. It writes TASK.md from the Vikunja task, and pulls any waiting
review comments into .task/review-comments.md. Do not hand-roll any of that.
Without an id, branch by hand and skip TASK.md. The user's own brief is then
the goal, and step 4 restates it back to him instead.
TASK.md is the brief and it is immutable. If it says a PR already exists, this
is a review-fix session and not new work. Read the comments first.
1. Read the handoff
HANDOFF.md at the repo root, if it exists. It is gitignored, it belongs to one
session, and it holds only what is needed to resume. Treat it as a claim from the
previous agent, not as truth. It can be stale or wrong.
If there is no handoff, that is normal. It means the last session closed clean.
2. Read the durable state
In this order, and stop as soon as you have enough:
- The Vikunja task, if there is one. Project Maven is ID 2, MCP at
http://localhost:9100/mcp, reachable from workpc only throughssh -N -f -L 9100:127.0.0.1:9100 kami@192.168.1.104. A refused connection is the missing tunnel, not an outage. The task description and its comments hold the goal, the constraints, and the assumption ledger. This outranks the handoff on every conflict. CLAUDE.md, the section that covers the area you are about to touch.- The one file under
docs/that owns the area. Check itsLast verifiedline. If the sha is behind the code you are reading, say so in step 4 and trust the code.
Do not read the dated files under docs/evals/. They are measurements from one day,
never updated. Read one only when you need the number it recorded.
With no task id, do not ask for one and do not stall. State it in step 4 as
Task: unfiled and carry on.
3. Look at the ground
git status, git log --oneline -5, and the diff on the current branch. What the
repo says beats what any document says.
4. Restate, then stop
Write at most five bullets and stop. Do not write code, do not open files to "check one thing first", do not start with a small safe change.
Task: V-359, one line. `unfiled` when there is no id.
Done: what is already on the branch.
Next: the one thing this session does.
Constraints: what would make this wrong.
Assuming: the beliefs that, if false, waste the session.
Then ask: is this right? Wait for the answer.
A corrected assumption goes into the Vikunja task as a comment where there is a task, because the handoff dies tonight and the task does not. Unfiled, it goes into the handoff and nowhere else.
5. Then begin
- Delete
HANDOFF.md. It has been consumed and must not outlive this step. - On master, cut the branch:
scripts/task-branch.sh <id> <slug>. - One task per session. When context passes roughly half, run
/wraprather than pushing on. A compacted session is a session that forgot why it made a choice.