A skills repository for agentic workflows, built for Claude Code and other Agent capable systems.
Includes a CLI that works with agentic systems (and humans too) at @taskless/cli.
skills/
taskless/SKILL.md # Single consolidated router skill
commands/
tskl/tskl.md # Single /tskl router command
packages/
cli/ # @taskless/cli, recipes live in cli/src/agent/
scripts/
sync-skill-versions.ts # Syncs metadata.version to CLI version
.claude-plugin/ # Claude Code Plugin Marketplace manifest
Starting in v0.7, Taskless ships a single consolidated skill (taskless) plus a single /tskl slash command. The skill body is a small router; per-task instructions live behind npx @taskless/cli agent <topic> and are fetched on demand.
| Skill | Command | Description |
|---|---|---|
taskless |
/tskl <ask> |
Router for any Taskless action (create rule, improve, |
| delete, check, auth, CI). Fetches the canonical recipe | ||
| for the user's intent and follows it. |
Available taskless agent topics: route, create-sg-rule, create-vale-rule, create-runtime-rule, create-remote-rule, improve-rule, delete-rule, check, auth, ci, info, init, update. Run taskless agent with no topic for the index. Append --anonymous for the local-only flow on improve.
The @taskless/cli package provides a CLI agent for Taskless workflows. It's recommended to always call the latest tag unless you know you need a specific version:
npx @taskless/cli@latest infoThe CLI bakes its own invocation string into the skill, command, and recipe
content it installs. Build targets pick that string, all driven by the
TASKLESS_BUILD_TARGET env var via Vite define (same source files, no edits):
Each target also emits to its own directory so they never overwrite one another.
Prod → dist/, self → dist-self/ (both gitignored):
| Command | Output dir | Baked invocation | Use for |
|---|---|---|---|
pnpm build |
dist/ |
npx @taskless/cli |
Production / published builds (default). |
pnpm build:self |
dist-self/ |
node packages/cli/dist-self/index.js |
Dogfooding in this repo (path is repo-root-relative; run the CLI from the root). |
pnpm build:self builds the CLI with the relative invocation and then runs
taskless init --no-interactive to install into this repo, so .claude gets
real reference stubs that delegate to the canonical .taskless/ content, exactly
like any other install. (This replaces the former raw-symlink link-skills
step, so local dogfooding always matches a true install.)
The
selfinvocation is a local path and must never be published: onlypnpm build(orpnpm package) produces a release artifact. It is also relative to this repo root, so no build target here yields a CLI you can run from another repository. That case is served by a published nightly.
The root package.json defines a cli script pointing at
./packages/cli/dist/index.js. That script runs the CLI built from this working
tree instead of a published release, which is what CLAUDE.md points
contributors and agents at while they are working in this repo. Nothing rebuilds
dist/ for you, so run pnpm build first when you want current behavior.
This section names the script rather than spelling out its shell invocation, because
the docs-npx-cli rule holds every command in a README to the published
npx @taskless/cli form for readers who do not have this repo checked out.
Releases use Changesets with Turborepo for orchestration.
Start from a clean repo (no uncommitted changes), then:
pnpm bump # Bump versions and sync skill metadata
pnpm build # Build CLI and generate commands
pnpm test # Run all tests, confirm no errors
git add -A # Stage all changes
git commit -m "chore: Releases vx.y.z" # Commit with new version number
git push origin main # Push the release commit
pnpm release # Dry run, prints publish command when ready
pnpm release:production # Publish to npm (prompts for 2FA OTP)After publishing, tag the release commit so the published version is traceable in git history:
git tag -s vx.y.z -m "Release vx.y.z" # Signed tag on the release commit
git push origin vx.y.zTagging started at v0.9.0; earlier releases were not tagged.
Work that has merged to main but is not yet released is published as
@taskless/cli-nightly, so unreleased behavior can be installed and
exercised without waiting for a release:
npx @taskless/cli-nightly@latest --versionThe executable is taskless, the same as the release, so a nightly is a drop-in
for the release it anticipates rather than a companion to it. Installing both
globally collides on that binary and is not supported.
See CONTRIBUTING.md for how nightlies are versioned and published, and for how to test against one without disturbing a release you already have installed.
In v0.7+, new agent-facing instructions are added as recipes, not skills. To add a recipe:
- Create
packages/cli/src/agent/<topic>.txtfollowing the canonical template (Goal / Preconditions / Steps / Input schema / Errors / See Also). - Use
{{CLI_VERSION}}and{{INPUT_SCHEMA}}placeholders for runtime interpolation. - For topics with a substantively different local-only flow, add
<topic>.anonymous.txt. Theagentcommand's variant lookup is automatic. - Update the topic table in
skills/taskless/SKILL.mdandcommands/tskl/tskl.mdso agents can discover the new topic.
taskless init: CLI installs the consolidated skill to.claude/skills/taskless/and the command to.claude/commands/tskl/- Claude Code Plugin Marketplace:
.claude-plugin/marketplace.jsonandplugin.json - Vercel Skills CLI:
npx skills adddiscovers skills fromskills/directory