Plan-oriented engineering workflow for Pi (the CLI exterior / session host).
Project description
perk
perk is a Pi-native workflow for plan-driven software engineering.
It combines a Python CLI that manages the session exterior, a TypeScript Pi extension that governs the session interior, and an issue backend for durable workflow state, GitHub by default. The workflow is organized around planning, implementation, code review, and learning.
Workflow stages and surfaces can use perk’s built-in defaults or pluggable third-party extensions, such as plannonator for plan review.
perk is built for work that may be interrupted, resumed elsewhere, superseded, or moved across machines. Resumability, human feedback, and remote execution are not special cases; they are part of the core model.
perk is inspired by erk, formerly maintained by the team at
Dagster.
What perk is
perk's unit of work is a plan: a reviewed, durable description of a change,
written before files are edited and saved as canonical workflow state. The core spine is
plan -> save -> implement -> submit -> address -> land -> learn; address only happens
when review feedback needs a response. Longer-running objectives can emit bounded plans
into the same spine.
The implementation is split across two planes:
- exterior — the Python
perkCLI, which scaffolds repos, manages worktrees, mints run ids, and launches primedpisessions; - interior — a TypeScript Pi extension, which owns in-session stage transitions,
tool gates, context, and warm
/...commands.
Both planes read the language-neutral shared/ registry and contracts directly.
There is no codegen layer to drift.
The operating model is deliberately simple: canonical state lives in GitHub by default
(Linear is supported), .perk/workflow/ is a local cache, and session state is throwaway.
Cold doors launch fresh context from a shell (perk implement, perk plan resume); warm
doors keep context inside a session (/submit, /land, /learn). implement and
address can dispatch to CI; review, merge, and learning stay local.
Quickstart
From the git repo you want to wire:
uv tool install perk
perk init
perk doctor
perk plan
perk init is idempotent and safe to re-run. perk doctor reports health;
perk doctor --fix repairs managed drift.
You need a git repo plus git, gh, node >= 22, pi, and uv. ast-grep is preferred
for structural search and reported when absent, but it is advisory. GitHub auth is verified
and reported by init; it becomes required when you drive real plans, PRs, and merges.
For the guided first run, follow Get started with perk.
Documentation
Operator docs live under docs/user-docs/:
- Tutorials — learn by doing; start with Get started with perk.
- How-to guides — recipes for specific jobs: resume a plan, address review feedback, switch to Linear, attach a skill, dispatch to CI.
- Reference — CLI commands, in-session commands and tools, objectives, configuration, providers, backends, and schemas.
- Explanation — the mental model: plans, planes, state tiers, doors, and remote maturity.
Internal research, design notes, and durable learnings live under docs/.
Layout
perk/— Python CLI, the session exterior.extension/— TypeScript Pi extension, the session interior.shared/— stage registry and cross-plane contracts.docs/— operator docs, research, design notes, and learnings.
Develop
Two pinned toolchains:
- Python — uv (3.13, pinned in
.python-version), ruff (lint/format), ty (types). - TypeScript — npm (Node ≥ 22,
.npmrc), Biome (lint/format),tsc(types).
With just:
just setup
just install-cli
just fmt
just lint
just typecheck
just test
just ci
just setup runs uv sync, npm install, just hooks, and just install-cli. The hook is
managed by prek and runs ruff check on staged Python. Re-run
just hooks after a fresh clone if hooks are missing.
Without just: uv run … for Python (uv run perk init, uv run pytest,
uv run ruff check perk tests, uv run ty check) and npm run … for TypeScript
(npm run lint, npm run typecheck).
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file perk-2.0.0.tar.gz.
File metadata
- Download URL: perk-2.0.0.tar.gz
- Upload date:
- Size: 667.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04f76c23b0cdab7ee7c77ec8b5d5875de53c777a1f08c6c5d8833c55de9fabb2
|
|
| MD5 |
d33b40c1b969e21a7138ce929765c9d4
|
|
| BLAKE2b-256 |
d35ffb61d7055b773db94f42d45263d0ed5db6e08da98998b85d5ae4cb3b6ce4
|
Provenance
The following attestation bundles were made for perk-2.0.0.tar.gz:
Publisher:
release.yml on mattgiles/perk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
perk-2.0.0.tar.gz -
Subject digest:
04f76c23b0cdab7ee7c77ec8b5d5875de53c777a1f08c6c5d8833c55de9fabb2 - Sigstore transparency entry: 2138955711
- Sigstore integration time:
-
Permalink:
mattgiles/perk@3f0c57bed549bf9fae70bbe9a2a348f21b34473a -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/mattgiles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3f0c57bed549bf9fae70bbe9a2a348f21b34473a -
Trigger Event:
push
-
Statement type:
File details
Details for the file perk-2.0.0-py3-none-any.whl.
File metadata
- Download URL: perk-2.0.0-py3-none-any.whl
- Upload date:
- Size: 860.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ec49f6f5b771ff2ab2afeb0d51dec7432c0b6fffcb398438f92360c9f6a63de
|
|
| MD5 |
c22a466853fb9d8d7a2921918d581a9c
|
|
| BLAKE2b-256 |
727c632bd739d1d6ee939e4835b13adff1a2604fa0acf8de01ca3c24f89b3f7a
|
Provenance
The following attestation bundles were made for perk-2.0.0-py3-none-any.whl:
Publisher:
release.yml on mattgiles/perk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
perk-2.0.0-py3-none-any.whl -
Subject digest:
0ec49f6f5b771ff2ab2afeb0d51dec7432c0b6fffcb398438f92360c9f6a63de - Sigstore transparency entry: 2138955723
- Sigstore integration time:
-
Permalink:
mattgiles/perk@3f0c57bed549bf9fae70bbe9a2a348f21b34473a -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/mattgiles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3f0c57bed549bf9fae70bbe9a2a348f21b34473a -
Trigger Event:
push
-
Statement type: