← Files taskplaneARCHIVED FILE

docs/onboarding.md

19.1 KB · Oct 2, 2026 · 00:29 UTC

↓ Download file

# Taskplane onboarding

Follow [installation and hook trust](../README.md#install-and-run-your-first-task) first. This guide
matches the current `taskplane/tp.py` CLI. Older references to `tp onboard`, `tp init`,
inline setup forms, workspace hook launchers, storage-plan migration or consolidated
pre-implementation approval describe retired workflows; those commands are not
available in this runtime.

## Choose the installed runtime and project

1. Use a host with local plugin execution and Python 3.10+. Install and enable
   Taskplane from the permitted catalog. Codex users start a new task/session after
   installation; Claude Code users follow plugin activation/reload instructions.
2. Open the intended local repository. Confirm the actual checkout and working
   directory, particularly when the host creates a worktree. Ask the host to acquire
   remote code separately if needed; Taskplane does not silently initialize Git,
   commit a baseline, migrate knowledge or acquire a repository during help/status.
3. Locate the loaded skill's plugin directory. It contains `taskplane/tp.py`,
   `skills/`, the host manifest and `hooks/hooks.json`. Verify with
   `python3 /actual/plugin/taskplane/tp.py version --verify` and `help --md`.
4. Keep a run's state in its bound checkout. `.taskplane/` contains local workflow
   state, its initialization marker, graph data, the journal and dashboard snapshots.
   An external dashboard publication target or source export does not move the
   workflow. A changed mount path requires the explicit recovery procedure below.

A source clone and an installed cached plugin are different copies. Editing the
clone does not update the running plugin. Verify the package source/version before
using new commands; the version parity check validates manifest agreement, not the
identity of every unreleased source change.

## Cowork workspace and execution

Before activation, scope creation or worker dispatch, establish these facts
separately. Never infer execution topology from a `/sessions/` path, a mount,
device metadata or the `native_workflow` name.

| Condition | Required observation |
| --- | --- |
| Storage | One selected durable project; its native host path and execution path map to the same ordinary probe file and SHA-256, with a separate host-side observation reference. |
| Execution | The current command environment satisfies the user's policy, with a location and observation reference. `darwin-local` also checks that the executing platform is Darwin. |
| Workers | The worker environment independently satisfies that policy, uses the same binding/run and provides an observed child identity, successful claim, complete required context and automatic startup hooks. |

1. Select one intended project through the host's supported folder controls. Obtain
   its native host path and shell execution path; they may differ. Missing folders,
   unavailable mappings or competing roots must be resolved before creating state.
2. Record a host-side observation of a small ordinary probe file outside `.taskplane/`.
   The runtime checks its bytes through the execution path. An execution-side read
   alone is not a host-side observation. Retain the probe unchanged while bound.
3. Set `TASKPLANE_WORKSPACE` to the selected **execution root** and
   `TASKPLANE_SURFACE=cowork` in the environment actually supplied to Taskplane and
   its hooks/children. Set the user's policy and the separate current execution and
   worker observation pairs described in the [CLI binding contract](cli-reference.md#workspace-binding-and-execution-policy).
   Prepare the versioned request outside the workflow store, then use the installed
   runtime's `workspace bind --workspace PATH --request FILE` and `workspace inspect
   --workspace PATH`. Binding creates only `.taskplane/workspace-binding.json` after
   validation; ordinary workflow initialization follows it.
4. Verify real hook events in this host and one useful worker's successful claim,
   full required context and automatic pre/post hooks before releasing other ready
   workers. Open the dashboard from the bound project and observe its run/visit.
   Reopen the selected folder and verify that the authoritative store remains there.

`any` permits the recorded execution environment; `local` requires current local
execution and, for native dispatch, worker observations; `darwin-local` adds Darwin.
Use only the policy the user permits. A Linux VM with a Mac mount cannot satisfy
`darwin-local`; a local shell cannot establish where its child workers execute.
These are cooperative observations, not host attestation. The local account can
fabricate references, and a matching probe does not certify physical topology.

If the host cannot propagate the selected root or required observations, report
that missing capability and stop. Claude SessionStart can export an already
validated root through its supported environment file; this convenience is not
locality proof. Do not replace refused native workers with serial coverage.

| Surface | Contract and verification limit |
| --- | --- |
| Local Claude Code / Codex | Existing unbound local workflows remain compatible unless Cowork/session signals or an explicit binding/policy require validation. Verify the loaded adapter and actual hook events in the current host. |
| Cowork | Binding, split cwd/native/shell paths, policy refusals and recovery have automated fixture coverage. Live selected-folder persistence, installed hook invocation, worker location/identity and dashboard display still require a named host/version integration run. |

Strict workspace binding requires descriptor-relative directory operations with
no-follow support. Standard Windows Python lacks these primitives: selected or
bound workspaces refuse before writing state. Existing unbound local workflows
remain supported. Windows CI checks that refusal and legacy behavior; successful
binding and relocation fixtures run only where these primitives are available.

No live Cowork certification is claimed. Claude fixtures must use Claude-shaped
`session_id` and `Bash.command` events and assert the selected adapter; Codex-shaped
fixtures, package contents and generated dashboards cannot establish that coverage.

### Recover a relocated project

Inspect the new execution path with `workspace inspect --workspace PATH`; an old
absolute path or copied project ID does not authorize adoption. For a genuine
relocation, prepare a fresh binding request with the expected project ID, actual
recovery request reference, new mapping and newly observed probe bytes/reference.
Run `workspace recover --workspace PATH --request FILE` using the installed runtime.
See the [exact recovery contract](cli-reference.md#workspace-relocation-recovery).

Recovery requires validated inactive history and no live/unknown workers or
commands. It archives the entire prior `.taskplane/` unchanged with a hash manifest,
then creates a fresh binding for future runs. Historical approvals, grants and
context receipts are never transferred. If the original root still exists, a
copied binding cannot establish relocation. Active, corrupt or unverifiable state
is left intact: retire active work through its original binding when possible,
or report the missing original-host capability. Do not delete stores, edit identity
files or disable hooks to force recovery.

## Review and trust hook definitions

Taskplane bundles these event handlers:

| Host event | Installed entry point | Expected responsibility |
| --- | --- | --- |
| SessionStart | `context` | Discover runtime/session readiness and existing workflow. |
| PreToolUse | `screen` | Apply active workflow checks to covered tools. |
| PostToolUse | `tool-observe` | Observe tool activity and known process handles. |
| SubagentStart / SubagentStop | `subagent-start` / `subagent-stop` | Observe actual native child identities when delegation is authorized. |
| UserPromptSubmit | `human-input` | Consume a complete observed decision/policy envelope when supplied. Plain prompt text does not establish checkpoint binding. |
| Stop | `session-verify` | Report pending work or missing quiescence without forcing an approval loop. |

Inspect the manifest and commands before trusting them. The hook command should
resolve the installed plugin root and invoke its Python runtime. Do not duplicate
these definitions in project config or restore a retired `.taskplane/codex-hook.py`.

In Codex CLI, use `/hooks` to review, trust and enable the Taskplane definitions.
Changed definitions need renewed review; a previously trusted version does not
cover new bytes. Desktop controls depend on the installed host version. Managed
sources follow policy. See [Codex hook review](https://learn.chatgpt.com/docs/hooks#review-and-trust-hooks).
In Claude Code, use `/hooks` and `/plugin` to inspect the effective configuration
and loading errors, and satisfy the host's project trust and permission prompts.

There are four separate decisions: install/enable a plugin, trust its hooks, approve
a phase (or authorize a run policy), and grant a native tool permission. None of
these implies all the others. Taskplane never recommends disabling host permissions
as a setup step.

## Verify the first task

Ask: **“Use taskplane to design a small change in this checkout and show the Design
output with the Taskplane dashboard.”** Check the following before proceeding:

- The loaded skill/runtime comes from the installed plugin and reports consistent
  manifest versions. `taskplane help` alone should not initialize a workflow.
- The host's hook view shows Taskplane enabled/trusted, and its hook activity or
  diagnostics show a real event from this task. Named-hook commands run manually
  are diagnostics, not proof the host invoked them.
- The run starts at the requested standalone Design entry with the right goal,
  checkout, source components, task DAG and criterion IDs. Status reports
  `workflow_available: true` when the ordinary local profile is usable.
- The agent provides the actual `.taskplane/dashboard.html` link for this run and
  requests opening it using the host's permitted surface. Verify the visible run
  and phase. A queued open, generated HTML or old tab is not proof of display.
- Tokens have measured/partial/unavailable coverage and a baseline. Missing native
  logs stay Unknown. Earlier work without phase boundaries cannot be reconstructed.
- Manual mode waits for the Design output's human acceptance. A hook event or
  completed task row does not count as acceptance.

The ordinary profile intentionally shows **Workflow gates active; host-wide
protection unavailable**. Discovery of a plugin/executable/session is observational;
it does not certify protected storage, independent human origin, full tool
containment or complete process tracking.

## Verify harness activation

Ask: **“Use Taskplane to review this code without starting a delivery flow.”**
Expect one Engineering visit with its source graph, tasks and native dashboard.
The harness is required even when the seven-phase flow was not selected. Product
and Design have standalone entries; existing runs resume their matching phase.

For an indirect host invocation, the execution skill first runs:

```sh
python3 /actual/plugin/taskplane/tp.py flow activate --workspace /project --phase engineering --request-reference conversation/message-id
python3 /actual/plugin/taskplane/tp.py flow report --workspace /project
```

`initialization_required` means Taskplane is selected but no run exists. Prepare
exact scope under `.taskplane/bootstrap/`, then start with `--standalone --phase
engineering --scope .taskplane/bootstrap/scope.json --request-reference REF`.
A full delivery starts at Product. Scope names actual output paths and criteria;
a new Build still requires accepted prerequisites.

Verify separately: installed runtime identity, a real host-triggered hook, active
harness binding, and the correct native dashboard/open outcome. A workflow lock
alone does not prove these. Restore a missing/corrupt binding in the original task;
never borrow another session's run. Claude's SessionStart exports its native
session and transcript to the host environment file; Codex retains its task ID.

Before initialization, covered source writes and opaque commands are denied.
Read/search/question tools and structured `.taskplane/bootstrap/` writes remain
available, along with exact installed setup commands and simple bootstrap reads
(`pwd`, `rg --files`, `cat`). Resolve start failures before completing a review.
After initialization the existing phase checks apply; native permissions and later
source audits still govern opaque shell effects.

After submission, provide the exact native dashboard link and record the outcome:

```sh
python3 /actual/plugin/taskplane/tp.py flow present --workspace /project --run RUN_ID --evidence .taskplane/dashboard.html --presentation linked --note 'Provided the artifact link and opening is queued with display unverified'
```

Use `verified` only after observing the rendered view, or `blocked` with the host
restriction and artifact fallback. The receipt binds the run, visit, checkpoint,
scope and artifact digests without approving anything. A matching handoff survives
the approval-only revision increment. A new output, policy change, repair or stale
evidence needs a fresh handoff. Automatic approval, advance and finish check it
even without Stop; Stop also catches unfinished standalone reviews.

For real missing input, ask through the native question tool or use `flow wait
--workspace /project --note 'Need the requested comparison revision'` and state the
question. This records a wait, not completion; all write/approval checks remain.
New user input or further tool work clears it.

If no hook activity appears, inspect the effective host settings and plugin loading
errors. A manual hook command is a diagnostic, not evidence Desktop executed it.

## Select an approval mode

Manual mode needs no setup. Review the concrete checkpoint and use `approve`,
`approved`, `Changes requested: <reason>`, `reject` or `cancel`.

For autonomous continuation, give explicit additional instructions, for example:

> For this task, auto-approve Product, Design, Plan and Build after required checks
> pass. Stop before Evaluate. Pause for failed or unknown conditions and scope changes.

The orchestrator records the real message, normalized phases/stops/conditions and
scope under `flow policy`. Inspect the dashboard's interpretation. The original
instructions are always an observed condition that must have sealed evidence and
an explanation at each automatic decision. Unclear consent or ambiguous conditions
require clarification; no generic implementation request opts in.

Automatic approval requires submitted evidence, current scope and revision, no known
live work, and passing conditions. It does not authorize scope expansion, extra
visits or protected-host capabilities. Say **“Return to manual approval”** to revoke.
Human intervention and evidence drift suspend continuation. A pause is not an
invitation to repeat unchanged automatic-decision attempts.

## Recover the dashboard and graph

Regenerate with the exact `--workspace` and `--run`, then refresh the existing tab.
Compare its generation time with the new result. Static mode does not monitor
freshness or fetch updated state automatically. Per-generation snapshots remain
available as `snapshot-*.html` and `snapshot-*.json` under `.taskplane/`.

The graph shows observed source relationships, with planned scope or actual changes
explicitly identified. Task prerequisites appear separately. The default focus is
two hops; Full repository contains omitted nodes. A current label requires a
workspace-bound scan receipt and matching source/resolution inputs, including dirty
files. Run `graph --workspace PATH scan --decompose --strict` when needed, then
regenerate. A matching Git commit alone does not establish freshness. Aggregate
component evidence does not imply an exact source-line witness.

When browser presentation is denied, report the limitation and provide the file
link. Do not route the same denied artifact through an alternate server or surface.
Keep generated, opening requested and visibly verified as distinct observations.

## Updating and diagnosing failures

Update from the same permitted source, reload as directed, verify the installed
runtime, review changed hooks and repeat first-task checks. Keep active workflow
state intact. If a package changes supported schemas, follow its documented migration;
do not silently copy or reset the old control store.

For missing skills, check installation and session loading. For skipped hooks,
check current trust/enablement and plugin-root/Python resolution. For wrong views,
check run and checkout before regenerating. For unavailable usage, inspect coverage
and native log access. For state/source audit errors, preserve evidence and correct
the named issue; a refused operation is not an approval. See
[CLI contracts and coverage limits](cli-reference.md).


For a workspace that exceeds the source inventory limit, use
`python3 /actual/plugin/taskplane/tp.py flow diagnose --workspace /project`.
Inspect its partial/complete label and largest inspected files. A native clean
HEAD worktree can provide a supported recovery checkout; uncommitted work remains
in the original. Initialize the new checkout's own exact scope. Do not delete user
files, silently exclude source, or disable hooks as the normal recovery route.
For a sealed or stale active run, the explicit replacement command in the
[CLI guide](cli-reference.md#start-again-without-losing-the-previous-run) preserves
history and starts fresh without copying approvals or automatic authorization.

After an update, compare the actual loaded runtime, skills and hook command bytes
with the release archive. Catalog version, package creation, installed-file parity,
live host invocation and visible display are separate checks. A queued tab or a
manually invoked hook does not establish the latter two.

## Repeated runs and honest completion

Keep one native dashboard file per workspace and ask the host to focus its existing view. A queued open proves only a linked handoff. Record visibly verified display only after observing the rendered run/visit/revision. Sealed report wording can remain “pending” after acceptance; the dashboard projects the actual checkpoint decisions without rewriting historical evidence.

Use `flow report` storage capacity and `flow diagnose` before recovery. Supported retention preserves inactive history. Retire obsolete work only with the actual user request reference; retirement grants no approval. A package build does not prove hosted Windows/Linux checks or that an existing task loaded a new plugin version.

## Scoped native execution

Native workers use the existing run and accepted task definitions. Root prepares
grants with observed host capacity, binds actual native identities, and verifies
joined results before dependent tasks start. Workers claim their own context and
exact task paths; root phase controls remain separate. There is no default two-worker
cap. See the [native dispatch protocol](../skills/tp-go/references/codex-native-dispatch.md)
and [CLI contracts](cli-reference.md). An edited checkout or package build does not
prove that the host loaded its hooks; verify actual runtime identity before live dispatch.

SHA-256: 5216c570e047afb65f8ea879f199f93a4fe6f4b821ed292f4f30eff781f93789