Skip to main content

Bootstrap CLI that hoists the shared workstate-system surface into consumer repos.

Project description

workstate-bootstrap

Pip-installable CLI that hoists the shared workstate-system surface (typed protocol, two MCP servers, hooks, skills, generated agent workflows) into consumer repositories. Lives inside darce/workstate.

Consumers run workstate-bootstrap install --target <path> once; it clones the monorepo, materializes the overlay, and registers both managed MCP servers (mcp-workstate-handoff, mcp-workstate-orchestrator) across .mcp.json, .vscode/mcp.json, and .codex/config.toml. No hand-edits required.

Install

From PyPI (recommended)

uvx --from workstate-bootstrap workstate-bootstrap install --target /path/to/your/repo
# or, persistent:
uv tool install workstate-bootstrap

From the monorepo source tree (development)

cd packages/workstate-bootstrap
python -m pip install -e ".[dev]"

Direct from git (private-repo phase, before PyPI release)

One-shot (no install — fetches each invocation):

uvx --from "git+https://github.com/darce/workstate@workstate-bootstrap-v0.2.1#subdirectory=packages/workstate-bootstrap" \
    workstate-bootstrap install \
    --target /path/to/your/repo

Persistent (recommended once you start running status / doctor regularly — installs workstate-bootstrap onto $PATH):

uv tool install "git+https://github.com/darce/workstate@workstate-bootstrap-v0.2.1#subdirectory=packages/workstate-bootstrap"
# then:
workstate-bootstrap status --target /path/to/your/repo
workstate-bootstrap doctor --target /path/to/your/repo
# upgrade later:
uv tool upgrade workstate-bootstrap

Hardlink warning on first install? If you see Failed to hardlink files; falling back to full copy, your uv cache and tool dir live on different filesystems. The install still succeeds; silence the warning with export UV_LINK_MODE=copy in your shell profile.

Subcommands

workstate-bootstrap install --target <path> [--remote-ref <tag>] [--mcp-servers <default|path>] [--no-mcp-servers]
workstate-bootstrap update  --target <path> --remote-ref <tag>
workstate-bootstrap status  --target <path>
workstate-bootstrap doctor  --target <path> [--mcp-servers <default|path>]
workstate-bootstrap repair  --target <path> [--force-dirty] [--mcp-servers <default|path>]
  • install: Clone the monorepo, materialize SHARED + GENERATED surfaces, write the three MCP-config files, run init-state to provision <target>/.task-state/handoff.db (skipped under --no-mcp-servers), set core.hooksPath, and write the overlay manifest.
  • update: Re-run install at a new --remote-ref; refresh GENERATED surfaces and, optionally, configs.
  • status: Print a summary of the installed overlay manifest. When the install registered MCP servers, also reports the resolved state_dir / db_path / exports_dir / schema_version via init-state --check.
  • doctor: Detect drift in SHARED, GENERATED, config, and initialized-state surfaces. Flags missing .task-state/handoff.db as state_drift only when the manifest recorded .mcp.json. Exit 1 when drift exists.
  • repair: Restore drifted surfaces flagged by doctor.

See docs/CONSUMER.md for the consumer-facing walkthrough (upgrade, drift handling, skill overrides, the current_task_auto_regen migration note).

Surfaces written by install

The canonical source of truth for bootstrap-managed surfaces is the installer implementation in src/workstate_bootstrap/install.py (SHARED_SURFACES and GENERATED_SURFACES). Keep this table aligned with those constants.

Surface Source Layer
scripts/hooks/ shared symlink
.github/hooks/ shared symlink
docs/workstate/contracts/ shared symlink
docs/workstate/rules/ shared symlink
Makefile.d/ non-excluded children shared carved dir
scripts/workstate/ non-excluded children shared carved dir
.github/prompts/ generated real dir
.workstate/generated/plugins/workstate-system/base/ generated real dir
.workstate/generated/plugins/workstate-system/effective/ generated real dir
.mcp.json generated real file
.vscode/mcp.json generated real file
.codex/config.toml generated real file
core.hooksPath git config generated git config
.task-state/handoff.db runtime sqlite
.task-state/exports/ runtime dir
.workstate/remote/ bootstrap git clone
.workstate-bootstrap.json bootstrap manifest

.task-state/ is provisioned by the handoff server's init-state subcommand at install time and is gitignored — each fresh checkout regenerates it through workstate-bootstrap install.

Defaults

  • --profile defaults to all, which materializes the full surface set: generated Copilot prompts, Claude/Codex plugin trees, shared overlay surfaces, and the lifecycle hoist (Makefile.d/lifecycle.mk plus the sentinel-bracketed -include block in the consumer Makefile). Pass --profile minimal for a clone-only install with no surfaces, or --profile lifecycle for just the lifecycle runner and Makefile fragment. The active profile is recorded in .workstate-bootstrap.json under "profile".
  • --remote-url defaults to git@github.com:darce/workstate.git.
  • --remote-ref defaults to main (override with a release tag like v0.1.0).
  • --mcp-servers defaults to the built-in managed map registering mcp-workstate-handoff and mcp-workstate-orchestrator via uvx with --workspace-root . serve-stdio, so Codex, VS Code, and Claude clients start real MCP stdio servers from the generated config. Pass a JSON file path to override; pass --no-mcp-servers to skip the three config writers entirely.
  • Plugin overrides are auto-discovered at workstate-overrides/workstate-system/ when that root contains an overrides.yaml manifest. Use --plugin-overrides <path> on install, update, doctor, or repair for a non-default root; bootstrap records that path so later update/doctor/repair runs reuse it. Override-aware installs generate effective plugin trees under .workstate/generated/plugins/workstate-system/effective/{claude,codex} and point marketplace pins at those generated trees.
  • install and update preserve plugin override files by default. --reset-overrides is the explicit destructive path; it removes only the resolved override root, refuses dirty git worktrees unless --backup is supplied, and archives backups under .workstate/override-backups/<timestamp>/ before removal.

Development

Tests live under tests/. From the monorepo root:

cd packages/workstate-bootstrap
PYTHONPATH=.:src:../workstate-protocol/src pytest tests -q

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

workstate_bootstrap-0.7.1.tar.gz (108.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

workstate_bootstrap-0.7.1-py3-none-any.whl (51.3 kB view details)

Uploaded Python 3

File details

Details for the file workstate_bootstrap-0.7.1.tar.gz.

File metadata

  • Download URL: workstate_bootstrap-0.7.1.tar.gz
  • Upload date:
  • Size: 108.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for workstate_bootstrap-0.7.1.tar.gz
Algorithm Hash digest
SHA256 5a96acf5740a60a5df991044b8bfba45726cd1b31c08148bd8d2d994e6ce655b
MD5 0bbaf7f9a3de6cc3f29c888fb362ad9a
BLAKE2b-256 cc9d5d51d7d057a893755719d69a872faa72cf7e61326c0c82ed080e51e69d6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for workstate_bootstrap-0.7.1.tar.gz:

Publisher: release-publish.yml on darce/workstate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file workstate_bootstrap-0.7.1-py3-none-any.whl.

File metadata

File hashes

Hashes for workstate_bootstrap-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 420e243c8e3be3ff9800274a4daa7e58f3bd5956ec318a1b229153261646f545
MD5 b76076d59703e00ad3816e56fa43939c
BLAKE2b-256 90fd341e6f7a96c8d7ce8391241698e4b3f6a3c8c76f3a9fbab6375b71fdf4d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for workstate_bootstrap-0.7.1-py3-none-any.whl:

Publisher: release-publish.yml on darce/workstate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page