Files
Maven/.claude/skills/pickup/SKILL.md
T

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 through ssh -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 its Last verified line. 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 /wrap rather than pushing on. A compacted session is a session that forgot why it made a choice.