Integrations
Auto discover
cj --auto imports common task definitions from package.json, deno.json, Makefile, and argument-free Justfile recipes. It creates cjtasks when no base taskfile exists, otherwise it appends missing tasks to cjtasks.
package.json scripts are considered first, followed by Deno, Make, and Just tasks. Each wrapper takes the shortest available normalized name. Name or directory conflicts add a number without a separator: build, build2, build3. Existing CJ tasks are never overwritten. This command is not idempotent; you probably don’t want to run it more than once as it will create new tasks each time it runs.
For package.json scripts, a single colon in a script name creates a nested task. For example, build:site becomes build:site under a build group. Script names with more than one colon stay flat and have their colons removed from the imported task name.
See CLI Reference.
Python virtual environments
CJTaskrunner adjusts PATH when it finds an active or project-local Python
virtual environment. Detection uses VIRTUAL_ENV, then CJ_VENV, then a
.venv directory beside the taskfile.
Tasks run with the Python executable from inside the virtual environment.
setup:
python -m venv .venv
python -m pip install -e .
test:
python -m pytest
See the Python virtual environment example.
Node and Vite
Node package scripts remain the source of truth. CJTaskrunner can group them with setup or validation steps:
setup:
npm install
dev:
@task setup
npm run dev
check:
npm run build
See the Vite example.
Rust and Cargo
Cargo commands can be exposed alongside the rest of a repository’s workflows:
check:
cargo fmt --check
cargo test --locked
cargo clippy --all-targets --all-features --locked -- -D warnings
See the Rust CLI example.
Editors
The Visual Studio Code extension can be found in the VSCode Extensions panel or downloaded here
See Ecosystem.