take — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited take (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are taking a single task end-to-end as one parallel lane. One task = one worktree = one branch = one PR = one focused session.
This skill exists so the user can launch N lanes in parallel via the Agent tool with isolation: "worktree" — each agent inherits this skill and runs independently. Without a skill there is no parallelism unit; with it, multiple lanes ship from one orchestrator message.
/take is a mechanism, not a specific epic. It was first built for the DAT-294 wave, but nothing about it is tied to that epic — it works for any task that can be merged on its own branch: a top-level ticket, a child, or a sub-item of a larger ticket. (If a parallel-work runbook exists in CLAUDE.md, follow it; if this skill and that runbook diverge, the runbook wins — open a PR to align them.)
When to reach for `/take`: when 2+ tasks can be implemented and merged independently and touch separate code areas, so running them as concurrent worktree lanes is faster than one stream. For single-stream work — even a multi-step feature on one shared branch — skip the lane machinery and just use /refine + /implement directly. The deciding question is "are these independently mergeable?", not "which epic is this under?"
$ARGUMENTS is a Jira task identifier (or a sub-item of one). The only gates that matter are below: the task is independently mergeable and its blocking dependencies are Done. Being a sub-item of a larger ticket, or living outside any particular epic, is not a reason to refuse — a lane targets a unit of independently-mergeable work, wherever it sits in the ticket hierarchy.
Before touching any code:
is blocked by dependency is Done. Surface the blocker list and STOP only if a real blocking dependency is not Done — not because of where the ticket sits in the hierarchy. If a dependency is itself small and unblocked, consider whether the right move is to take it first rather than stall..worktrees/{task-id}/. If branch matches feat/{task-id}-{slug} → resume it. If branch is something else → STOP and ask. Note: worktrees live INSIDE the main repo at .worktrees/{task-id}/ (gitignored). This is load-bearing for the review gate — subagents spawned by /implement inherit the orchestrator's $CLAUDE_PROJECT_DIR and can only Read paths underneath it, so a sibling worktree at ../dataraum-context.worktrees/... is invisible to them and the review gate fails silently.gh pr list --search "{task-id} in:title". If open → the lane is already in flight. STOP and ask..claude/platform-status.md. STOP if another active lane claims this task or a contract this task touches.openapi.yaml sha, a proto file sha), the artifact must be merged on main. If named but not locked, STOP — open a contract-lock issue instead. Do not start implementation against an unlocked contract; that is the single biggest cause of parallel-merge chaos.Note: most of the original Platform Contracts inventory (Mcp-Session-Id, CP↔executor gRPC, TanStack AI wire format, OpenAPI for /api/*) was superseded or deferred by the v1 plan. Contract #5 (config storage shape) stays locked for future multi-user work. If the task names no contract, this step is a no-op.
packages/cockpit code importing @tanstack/*, the TanStack Intent skill check is MANDATORY at every stage — /implement runs it before writing code (its "Before you start" step), and any reviewer runs it before judging (the reviewer agent definitions carry the same mandate). A lane that writes or reviews TanStack code without loading the matching Intent skills is operating on stale training-data memory — that is how bogus findings and deprecated API usage get in.If anything is wrong, STOP and report. Don't "make it work."
git fetch origin main
git worktree add .worktrees/{task-id} -b feat/{task-id}-{slug} origin/mainThen call EnterWorktree with the absolute path:
EnterWorktree(path="$CLAUDE_PROJECT_DIR/.worktrees/{task-id}")This switches the session's working directory AND $CLAUDE_PROJECT_DIR to the worktree. Every subsequent Bash / Read / Edit / spawned Agent call resolves paths relative to the worktree — no cd prefix on every command, no per-command permission prompt for paths outside the orchestrator's view.
Worktrees live INSIDE the main repo at .worktrees/{task-id}/ (gitignored), not as a sibling. Two reasons:
/implement (senior-code-reviewer, spec-compliance-reviewer) inherit the orchestrator session's $CLAUDE_PROJECT_DIR, not the EnterWorktree-shifted one. A sibling at ../dataraum-context.worktrees/... falls outside that root and the harness blocks Read against it — the review gate fails silently. Inside-project placement keeps the lane visible..claude/hooks/end-of-turn-check.sh) cds into packages/engine/ before running ruff/mypy/pytest. .worktrees/ is a sibling of packages/, so the hook never recurses into it — no cross-lane pollution. (Historical note: the prior skill version placed worktrees SIBLING to the main repo to dodge a hook that recursed from the project root; the current hook doesn't, so the dodge is no longer needed and now actively breaks the review gate.)Make sure .worktrees/ is in .gitignore. If not, add it before the worktree opens.
Do NOT use cd .worktrees/... as a substitute for EnterWorktree — Bash resets cwd between commands and the prefix has to be re-applied every call, which triggers a permission prompt each time.
All subsequent steps run inside the worktree.
Invoke /refine {task-id}. Reality-check the spec against the codebase. If /refine finds the contract is wrong (not the implementation), STOP the lane — re-locking the contract is higher-priority than this task.
After the user approves the refined approach: invoke /implement {task-id}.
The DO NOT change scope must include:
/implement runs the senior-code-reviewer and spec-compliance-reviewer at the end. Both must approve before this skill proceeds.
Run smoke scoped to this task's contract surface only — backend task: its API/RPC against a minimal stand (Postgres + this process); frontend task: its UI against a contract-mock (Vite dev + mock). Lives at tests/platform/smoke_{task-id}.py (or equivalent path the task defines).
Three smoke tiers; only the first is this lane's responsibility:
| Tier | Scope | When | Owner |
|---|---|---|---|
| Lane smoke | This task's contract surface | Every commit on the lane branch | This skill |
| Integration smoke | Full spine end-to-end on docker-compose | After each PR merges to main | CI on main |
| Journey smoke | Full Playwright user journey | At first-wave milestones (post-P5, post-P9, post-P11) | /release-prep |
If integration smoke on main is red because another lane is mid-flight, that is expected per DAT-294 ("main is allowed to be temporarily user-broken between phases"). Don't block this lane on it.
gh pr create --title "{task-id}: {title}" --body "$(cat <<'EOF'
## Task
{task-id} — {ticket link}
## Contract consumed
{contract path} @ {sha}
## Acceptance criteria
{copied from ticket, checked off}
## Lane smoke
\`\`\`
{command + result summary}
\`\`\`
## Other lanes in flight
{output of: gh pr list --search "DAT-294 in:body"}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"The "Other lanes in flight" block is non-negotiable — reviewers need the parallel context to judge merge order.
Edit .claude/platform-status.md (create if missing) with one row per active lane:
| Task | Worktree | Branch | PR | Contract | Status |
|---|---|---|---|---|---|
| {task-id} | .worktrees/{task-id} | feat/{task-id}-{slug} | #NN | {contract}@{sha} | smoke green, awaiting review |Remove the row when the PR merges. This board is the at-a-glance "all lanes in flight" view for the user.
ExitWorktree(action="keep")Returns the session to the orchestrator's main-repo cwd so the next lane / status-board update / gh pr list poll operates from the right place. keep preserves the worktree on disk (PR is still open against it).
Report concisely:
platform-status.md)Do NOT merge the PR yourself. Merge order across parallel lanes is the user's call.
To run multiple lanes concurrently from one orchestrator session: launch each as an Agent tool call with isolation: "worktree", in a single message with multiple tool blocks. Each agent inherits this skill, opens its own worktree, works independently, and closes when its PR is open.
The orchestrator session does NOT touch code — it only:
/decompose)/take agentsgh pr list and .claude/platform-status.md/refine + /implement directly. This includes a multi-step feature that ships PR-per-step on one shared branch — that's one stream, not parallel lanes./implement → "Scope is a fence, not a cage")..claude/platform-status.md so the user sees all lanes at once~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.