| name | project-tooling-bootstrap |
| description | Bootstrap a repository with the Toolkit baseline developer tooling: mise, dprint, lefthook, committed, gitleaks, pitchfork, and fnox. Use when a user asks to add or standardize local tooling, Git hooks, formatting checks, commit-message linting, local command orchestration, or secrets handling in a new or existing project. Applies to polyglot repos that need repeatable local setup and pre-push quality checks. |
Project Tooling Bootstrap
Apply a ready-made tooling baseline to a target project using the templates in assets/template/.
Workflow
- Inspect the target repository layout and confirm where root config files should live.
- Apply templates with
scripts/install_toolkit.sh.
- Install tools and hooks in the target repository.
- Run formatting and checks to verify setup.
Tool Application Rules
Use these defaults when applying the baseline in a target repository:
- Keep
committed on "github:crate-ci/committed" to prefer native release assets on arm64 hosts.
- Keep
pitchfork available for local command orchestration. See https://pitchfork.jdx.dev.
- Keep
fnox available for secrets handling and secret-backed command execution.
- Install
fnox.toml at the repository root unless the project already has a standardized secrets config.
- Default
fnox.toml provider should be onepass (1Password) with keychain fallback for local token storage.
- Use mise built-in tasks as the default task runner.
When wiring commands/tasks:
- Wrap commands that need credentials with
fnox run -- <command>.
- Use
pitchfork for multi-command local workflows when orchestration is needed.
- Never commit secret values. Commit
fnox.toml templates and keys only.
Example app run with fnox:
fnox run -- npm run dev
Baseline mise tasks:
[tasks.fmt]
description = "Formats all supported files"
run = "dprint fmt"
[tasks.fmt-check]
description = "Checks formatting and fails on differences"
run = "dprint check"
Default fnox.toml template:
default_provider = "onepass"
[providers]
onepass = { type = "1password", vault = "fnox" }
keychain = { type = "keychain", service = "fnox" }
[secrets]
OP_SERVICE_ACCOUNT_TOKEN = { provider = "keychain", value = "OP_SERVICE_ACCOUNT_TOKEN" }
Quick Start
Run from this skill directory:
bash scripts/install_toolkit.sh /path/to/project
Optional flags:
--with-renovate: include renovate.json
--force: overwrite existing files instead of skipping them
The installer is idempotent: re-running without --force only copies missing files, reports ok for matching files, and leaves differing files untouched.
Add To OpenCode
From the repository root, install this skill to OpenCode with the Vercel Skills CLI:
npx skills add ./project-tooling-bootstrap -a opencode
Install globally instead of project-local:
npx skills add ./project-tooling-bootstrap -a opencode -g
If you do not use the CLI, copy the skill directory manually to one of these paths:
- Project scope:
.agents/skills/project-tooling-bootstrap/
- Global scope:
~/.agents/skills/project-tooling-bootstrap/
What Gets Added
Core files copied to the target repository:
mise.toml
dprint.json
lefthook.yml
committed.toml
fnox.toml
Optional file:
Post-Install Commands
Run in the target repository:
mise install
lefthook install
mise run fmt
mise run fmt-check
If commits should be conventionally linted, verify committed runs via a test commit message or existing commit hook flow.
For local orchestration and secrets handling, verify pitchfork and fnox are installed after mise install.
Idempotence Checks
Use this flow when validating repeated runs:
- Run
bash scripts/install_toolkit.sh /path/to/project once and confirm files are copied.
- Run it again without flags and confirm output is only
ok or skip lines.
- Optionally run with
--force to confirm differing files are intentionally updated.
Customization Guidance
Read references/customization.md when the target project needs non-default plugin versions, extra mise tasks, or different hook gates.