This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Introduction

processkit is a provider-neutral process and memory layer for AI-assisted projects.

It keeps durable project state in Git-reviewable files, validates that state through schemas and lifecycle rules, and exposes project workflows through Python MCP servers.

Release lines

LineStatusUse
v0.xStable and defaultExisting projects and normal production use
v1.0.0-alpha.5Exact-pin prereleaseEvaluation of the native lifecycle CLI and v1 contracts

The v1 alpha is opt-in. It does not replace the supported v0 line, and it must not be selected through an unverified latest URL.

v1 product boundary

LayerResponsibility
Native Rust CLIVerify releases; plan, install, update, recover, verify, and uninstall project content
Python MCP runtimeServe tools, validate entity operations, enforce transitions, route skills, and maintain the derived index
Visible contentSkills, schemas, state machines, processes, adapters, and configuration remain reviewable files
Project-owned stateWorkItems, Decisions, Artifacts, Notes, Logs, and local overrides belong to the consuming project

Python is intentionally retained for MCP. The Rust CLI is the lifecycle and trust boundary, not a second MCP implementation.

Within this repository, context/ is processkit’s own dogfood project state. src/context/ is the producer-owned payload installed into other projects. They have different ownership and must not be merged.

Start with v1

The currently published native executable supports Linux ARM64 GNU systems. The CLI still requires an explicitly downloaded distribution directory; an online resolver and bootstrap installer are planned but not implemented.

Follow the v1 alpha installation and first-project tutorial for a verified, step-by-step installation.

Documentation map

1 - Development

Active planning documents for processkit evolution.

This section is the open planning area for processkit evolution. It separates the current v0 prototype from the planned processkit v1.0 rebuild so readers can distinguish shipped behavior from future design.

Design documents that affect the product, architecture, implementation scope, acceptance gates, or external positioning should be added here. Governance-relevant documents should also be recorded as processkit Artifacts or Decisions through the processkit gateway.

Sections

1.1 - v0 Prototype

Status and origin of the current processkit prototype line.

The current project is the v0 prototype line of processkit. It is usable and dogfooded, but it is not the final v1.0 architecture. It proves the product shape: git-backed process memory, skills, state machines, MCP tools, package tiers, release machinery, and a Docusaurus docs site for human readers.

Current Status

As of the v1.0 branch start, main is at the v0.27.x line with additional development documentation. The prototype has:

  • a shipped src/ deliverable boundary for consumers
  • file-backed process entities with YAML frontmatter
  • processkit API v2 entity schemas and state machines
  • package tiers for selected skill and context bundles
  • per-domain MCP management tools plus a processkit gateway mode
  • pk-doctor health checks and release-audit style validation
  • release tarball, provenance, and docs publishing scripts
  • a manual GitHub Pages publish flow for docs-site
  • aibox-assisted installation and synchronization in derived projects

The v0 line remains the maintenance and migration-source line while v1.0 is built on a parallel branch.

How We Got Here

The context index shows the prototype grew through dogfooding rather than from a single upfront platform rewrite:

  • The product target was captured in ART-20260409_1854-KindCrane-processkit-product-requirements-document as provider-neutral process memory, skills, and MCP tools for agentic software projects.
  • Early releases established the file-backed entity model, package tiers, skill catalog, and consumer-facing src/ mirror.
  • Release automation was hardened after the v0.19.0/v0.19.1 learning that git push --tags is not the same thing as publishing a GitHub Release.
  • The aibox integration became an installer/supervisor path, not the processkit source of truth. The v0.25 handover records the package and MCP-gateway handoff shape for downstream projects.
  • The provider-neutral gateway decision DEC-20260502_0743-CoolFjord-adopt-provider-neutral-processkit-gateway-daemon kept processkit standalone while adding a lower-process-count runtime path for MCP-capable harnesses.
  • Later v0 work added stricter doctor checks, release integrity checks, MCP config drift detection, TeamMember routing, and docs-site coverage.

Why v1.0 Is Needed

The v0 prototype proved the workflow but exposed model pressure:

  • the current primitive set cannot cleanly express the full v1.0 ontology without overloading tags, kinds, and fields
  • agents still need better query surfaces than concrete-kind guessing
  • schema composition, generated runtime schemas, and validation modes need to become first-class
  • migration and test evidence need to be automated rather than relying on manual aibox dogfood
  • pk-doctor and MCP tooling need adversarial fixtures and stronger contract tests

v0 should therefore be treated as working evidence and migration source. v1.0 is the revised implementation line.

1.2 - v1.x Version

Architecture, implementation status, and evidence for the processkit v1 line.

The v1 line is an active prerelease, not only a design proposal. v1.0.0-alpha.5 supplies a native Rust lifecycle CLI, a signed release contract, generated schemas, and the Python MCP runtime as visible project content.

The RFC and planning pages in this section remain useful design history. Statements written as future requirements are not evidence that a feature is implemented. Use the implementation review for the current truth.

Current Status

The fixed architecture is:

  • Rust owns release trust and project-content lifecycle.
  • Python remains the authoritative MCP implementation.
  • skills, schemas, processes, state machines, and entities remain files.
  • context/ is dogfood consumer state; src/context/ is the release producer payload.
  • the supported v0 line remains the default while v1 is exact-pin alpha.

Design and Evidence Documents

Supporting Analysis

Branch Contract

The v1 development line is isolated from v0 maintenance:

  • schema source and generated schema machinery
  • v1.0 ontology and migration adapters
  • MCP gateway, helper, and index changes required by the RFC
  • automated fixture suites and first-ART validation evidence
  • docs and acceptance-gate updates for the v1 line
PurposeBranchTag policy
v0 maintenance developmentv0.x-devnever tag
v0 integrationv0.x-releasestable v0 tags only
v1 developmentv1.x-devnever tag
v1 prerelease integrationv1.x-pre-releasev1 alpha, beta, and RC tags only
v1 GA integrationv1.x-releasestable v1 tags only
published historymaincontains every stable tagged release

v1.x-dev merges to v1.x-pre-release for each prerelease. At general availability, create v1.x-release from the selected prerelease state, validate and tag there, then merge it into main. v0 follows the same development-to-release-to-main pattern. Security fixes and dependency bumps may flow between lines when needed; feature work does not automatically backport.

Historical-page convention

Every page below this section is reviewed against alpha.5, but several pages describe a target gate or the reasoning that preceded implementation. Treat the labels as follows:

  • Implemented means executable code and release evidence exist.
  • Partial means a safe subset exists and the remaining behavior is named.
  • Planned means the page is a design contract, not a supported command.
  • Historical means the page records an earlier alpha planning stage.

1.2.1 - Issue #135 Implementation Review

Final requirement review of the Rust CLI and Python MCP product briefing against the v1.x development line.

This final review compares GitHub issue #135 with the v1.0.0-alpha.5 implementation and its published release evidence.

Summary

The corrected product boundary and trustworthy local lifecycle are implemented. The Rust executable verifies and transactionally applies an explicit release; Python remains the MCP runtime; release content stays visible; and interruption recovery is exercised with real processes.

Issue #135 is complete as the v1.x implementation umbrella. Three extracted engineering tracks are implemented in alpha.5. The four-platform publication track remains open until locally produced artifacts from every supported host have been collected and verified.

Coverage Matrix

Requirement clusterStatusCurrent evidence or follow-up
Rust CLI / Python MCP / visible-file boundaryImplementedRust binary under installer/; Python servers ship with skills; release and architecture docs state the fixed boundary
context/ dogfood vs src/context/ payloadImplementedRelease-boundary checks prevent project entities from entering the staged payload
Deterministic plan and transactional install/update/recover/uninstallImplementedplanner.rs, transaction.rs, target lock/staging/journal tests, lifecycle pilot
Signed release and native verificationImplementedEd25519 envelope binds archive, descriptor, provenance, and all four native installers
Opaque execute --request automation contractImplementedVersioned request/result schemas and golden fixtures
Rust modularization and typed failuresImplementedFocused modules, stable error tests, a public library API, rustdoc, and runnable examples
README/help/schema consistencyImplementedShipped CLI help and release facts are generated and checked by the mandatory local installer gate
Four native target platformsPending local host evidence#165 requires locally built and natively smoke-tested outputs from all four supported hosts
Bootstrap installerImplementedExact-version, non-root checksum/signature verification uses the canonical fingerprint and fails closed
Human exact-version online resolutionImplementedExact tags resolve to immutable release assets; absent versions fail without fallback
Python/uv runtime contractImplementedEvery profile uses the shipped universal, hash-locked dependency set, including offline verification
Native processkit doctor and processkit mcpImplementedStable runtime, container, and deferred host-only findings include IDs, severity, and remediation
Extracted-release MCP acceptanceImplementedPackage smoke starts the staged gateway and exercises representative tools
Repository dogfood update/recovery acceptanceImplementedThe release gate combines the full-content lifecycle pilot with a deterministic real-process update interruption, rollback, user-data preservation, retry, and provenance verification
v0 migration and aibox parityImplementedVersioned ownership baselines cover mixed roots, replay is idempotent, ambiguity blocks safely, and direct/aibox state is identical
Harness projection ownershipImplementedCodex and Claude adapters preserve unrelated keys and have lifecycle tests
Stable/prerelease documentation storyImplementedDocs separate v0 stable and v1 preview and generate release facts, CLI help, and public Rust API guidance

What Users Can Rely On

  • exact local and immutable published release inputs;
  • checksum and Ed25519 verification;
  • a non-mutating deterministic plan;
  • transactional install and update with persisted ownership;
  • recovery after interrupted installer transactions;
  • conservative uninstall that preserves changed or user-owned files;
  • installed-provenance verification;
  • Codex and Claude managed-key projections;
  • Python MCP operation from the extracted package;
  • versioned machine request/result envelopes for integrators;
  • mixed-root v0 migration with replay-safe evidence; and
  • reproducible, hash-locked Python runtime dependencies.

What Users Must Not Assume

  • native semantic corpus migration, package, or harness commands;
  • removal of Python or uv as runtime dependencies;
  • in-place mutation of an existing v0 source tree; or
  • GA stability of alpha contracts.

Extracted GA Follow-ups

  1. #165: trusted four-platform release distribution
  2. #167: v0 mixed-root baselines and CLI/aibox parity
  3. #168: generated CLI, release, and Rust API documentation
  4. #170: runtime dependency locking and host-health coverage

Alpha.5 completes the trustworthy native lifecycle around visible content and the Python MCP runtime. Issue #165 remains the publication gate; the other three follow-ups are complete.

1.2.2 - Acceptance Gate

Readiness criteria for processkit v1.0 stages.

Alpha.4 review: Ontology, schema generation, local installer lifecycle, signed release, extracted-package MCP smoke, and first-ART evidence are implemented. Four-platform native distribution, bootstrap installation, online release resolution, native doctor/MCP supervision, full dogfood update recovery, and v0-to-v1 migration remain GA blockers. See the issue #135 implementation review .

Purpose

The acceptance gate keeps the v1.0 rebuild measurable. The RFC’s 81-criterion gate is authoritative for final cutover; the staged lists below are working summaries for alpha-first execution.

RFC Cutover Gate

PhaseCriteriaStrictSoft
P0 - Pre-conditions550
O1 - Ontology completeness1192
T2 - Tooling parity1293
C3 - Corpus migration10100
S4 - Skills and agents880
A5 - First-ART validation18180
G6 - Cutover decision point880
R7 - Post-cutover stabilisation981
Total81756

A5 is the proof phase: model a real ART end to end and run one full PI cycle through planning, execution, demo, and inspect-and-adapt.

The local release-candidate proof is executable through uv run scripts/smoke-test-servers.py. Its final first-ART RC acceptance matrix binds the production-shaped scenario to planning, execution, evidence, and inspect-and-adapt outcomes. Package smoke runs the same matrix against the staged release tree.

Detailed RFC Criteria

The detailed list below expands the RFC gate into checkable criteria for planning and implementation. Criteria marked soft may be waived with a recorded rationale. All other criteria are strict.

P0 - Pre-conditions

IDCriterion
P0.1Upstream agrees to host the v1.0 feature branch or records an explicit alternative branch/repository model.
P0.2The RFC is accepted as the leading document for ontology, release, validation, indexing, and cutover planning.
P0.3A named maintainer contact or owner exists for reviewing v1.0 changes.
P0.4The v0.x maintenance boundary and backport policy are documented before v1.0 feature work begins.
P0.5The baseline corpus, migration source, and release-gate evidence locations are frozen for Phase 1.

O1 - Ontology Completeness

IDCriterion
O1.1The 89-concept T/P/D/C ontology inventory is documented with 19 T, 22 P, 24 D, and 24 C entries.
O1.2Each concept has a canonical name, class, description, and migration note from the v0.x model where applicable.
O1.3The grammar-leak concepts rejected by the RFC are excluded from the entity layer.
O1.4Location is modeled as a primitive with geographic-region, site, coordinate, logical-region, and timezone variants.
O1.5Skill is modeled as a primitive with its own schema and lifecycle, distinct from Capability.
O1.6TeamMember is modeled as a composition of Actor, calendar, capabilities, persona, skill-list, and journal.
O1.7Service is modeled as S(Capability)/C, not as a primitive.
O1.8Proposition is modeled as the parent for risk, belief, world-fact, WSJF estimate, and related epistemic content.
O1.9Hierarchy and Position are represented through Binding variants, including nullable role-slot subject support.
O1.10Soft: each ontology concept has at least one concrete example from a SAFe or agentic software workflow.
O1.11Soft: human-facing glossary language is reviewed for non-specialist readability.

T2 - Tooling Parity

IDCriterion
T2.1Jinja + YAML schema sources ship under context/schemas/src/.
T2.2Generated flat schemas are committed under context/schemas/_generated/ and consumed by runtime tooling.
T2.3Composition supports extends, {% include %}, and `__merge: replace
T2.4The MCP endpoint regenerate_schemas(kinds: list | None) -> {rebuilt, unchanged, errors} exists.
T2.5Full and partial schema regeneration are both deterministic and test-covered.
T2.6Per-kind validation mode is observable through MCP.
T2.7Strict validation fails invalid migrated entities; tolerant validation warns for kinds still being migrated.
T2.8MCP create/read/update/transition paths exist for the alpha entity set, use generated schemas, and expose typed doctor remediation dispositions.
T2.9Entity and remediation writes emit required events and update the read index or report index drift.
T2.10Search includes FTS5 plus interface grouping; the canned-query set is signed off before rc.
T2.11All MCP tools have valid Python type signatures and matching draft-2020-12 JSON Schemas; every doctor-declared remediation tool exists in the gateway catalog with compatible arguments.
T2.12Soft: local developer commands make schema rebuild, validation, and MCP smoke tests easy to run.

C3 - Corpus Migration

IDCriterion
C3.1A migration plan maps every v0.x entity kind to a v1.0 primitive, discriminator, composition, archive, or explicit rejection.
C3.2Declarative migration planning and execution run repeatably from a clean checkout, enforce expected source hashes, and record source/target processkit versions.
C3.3Migrated entities preserve stable IDs or record durable predecessor/successor links and aliases that the read index resolves.
C3.4Field loss is measured and stays within the RFC’s maximum 5 percent ceiling.
C3.5Unknown fields are preserved, transformed, or reported; they are not silently dropped.
C3.6LogEntry hash and append-only invariants are checked during migration; history rewrites require explicit policy, source hashes, and archived originals.
C3.7Orphaned entities, broken required links, and invalid required owners hard-fail the migration.
C3.8Migrated strict kinds pass generated-schema validation.
C3.9Migration reports include counts, warnings, failures, typed remediation guidance, and doctor recheck results.
C3.10A representative v0.x fixture corpus is detected, planned, migrated, and rechecked with documented local commands without aibox.

S4 - Skills And Agents

IDCriterion
S4.1Skill metadata and routing instructions use the v1.0 ontology names and storage semantics.
S4.2Skills that write process entities call MCP tools instead of hand-editing canonical context files.
S4.3Skill examples demonstrate query-by-interface and typed relation lookup where appropriate.
S4.4Multi-persona and harness prompts are updated to prevent v0.x primitive assumptions.
S4.5Agent handoff, role, TeamMember, and model-routing documentation reflects the v1.0 TeamMember composition.
S4.6At least 20 canned agent scenarios exercise work, decisions, gates, risks, roles, skills, and artifacts.
S4.7Scenario runs keep malformed entity output below 0.1 percent.
S4.8Skills and agent docs include transition guidance for v0.x adopters.

A5 - First-ART Validation

IDCriterion
A5.1A real or production-shaped ART is modeled with Portfolio, ValueStream, ART, Team, Scope, and RoleSlot structure.
A5.2PI planning creates objectives, risks, dependencies, capacity assumptions, and committed WorkItems.
A5.3Execution moves work through state machines using MCP transition tools.
A5.4Decisions, assumptions, risks, and world facts are recorded as the correct Record/Proposition shapes.
A5.5Gates represent approval, policy, evaluation, and release checks with required evidence.
A5.6TeamMember, Role, Skill, Capability, and Binding data support realistic task routing.
A5.7Channels and queues capture handoffs, intake, or asynchronous coordination.
A5.8Resources, constraints, and ownership are queryable for the ART.
A5.9Demo evidence is captured as Artifacts, Measurements, Outcomes, or related Records.
A5.10Inspect-and-adapt produces follow-up WorkItems, Decisions, and retrospective evidence.
A5.11Interface queries retrieve mixed-kind records without concrete-kind guessing.
A5.12Relation traversal answers dependency, provenance, ownership, and hierarchy questions.
A5.13Generated schemas validate all strict entities created during the cycle.
A5.14pk-doctor reports no blocking errors on the ART fixture or pilot corpus.
A5.15Human reviewers can inspect the same state through files and documentation.
A5.16Runtime-specific integrations are examples only; the ART proof does not require one agent framework.
A5.17The pilot records friction, interpretation drift, and missing tool affordances as tracked issues.
A5.18The first-ART result is reviewed and accepted before rc promotion.

G6 - Cutover Decision Point

IDCriterion
G6.1Phases P0 through A5 are green except for explicitly accepted soft criteria.
G6.2The final ontology and migration plan are accepted by the named maintainer/owner.
G6.3The cutover DecisionRecord or equivalent release decision is recorded.
G6.4Release artifacts are reproducible from a clean checkout.
G6.5Documentation for install, migration, MCP tooling, schemas, indexes, and testing is published.
G6.6Downstream adoption paths are documented for production, alpha/beta/rc, and final v1.0 pins.
G6.7v0.x maintenance, LTS, and feature-backport boundaries are documented.
G6.8No known blocker remains for merging v1.0 to main and tagging v1.0.0.

R7 - Post-cutover Stabilisation

IDCriterion
R7.1A minimum 14-day post-cutover stabilisation window is observed.
R7.2Critical regressions have documented owner, status, and remediation path.
R7.3Migration support handles at least one downstream adopter from v0.x to v1.0.
R7.4Release integrity checks verify tags, tarballs, checksums, provenance, and docs publication.
R7.5Index rebuild and drift-recovery procedures are exercised after cutover.
R7.6MCP gateway and per-domain MCP tools pass smoke tests in a clean fixture project.
R7.7Sensitive-data, privacy, and publication checks run on the shipped docs and release artifacts.
R7.8Soft: v0.x LTS guidance is validated with at least one slow-adopter scenario.
R7.9New pk-doctor checks pass a golden adversarial fixture containing deliberately invalid entities.

Alpha Gate

Alpha is ready when:

  • the alpha ontology subset is documented
  • schemas are generated and committed
  • MCP create/read/transition paths work for alpha entities
  • query_by_interface works for at least one shared interface
  • strict and tolerant validation modes are observable
  • a small v0.x corpus migrates or maps into the alpha model
  • processkit-native fixture tests pass without depending on aibox
  • one real process cycle runs through the alpha
  • OKF export produces a conformant bundle
  • docs build locally

Beta Gate

Beta is ready when:

  • the implemented beta inventory targets approximately 60-70% of the 89-concept ontology (roughly 54-62 concepts), with explicit exclusions; this directional coverage target complements rather than replaces the capability and evidence criteria below
  • the ontology has expanded beyond the alpha subset with migration proof
  • all migrated kinds validate strictly
  • core MCP tools have stable signatures
  • MCP Python signatures match draft-2020-12 JSON Schemas
  • docs cover user workflows and architecture
  • pk-doctor checks the important invariants
  • pk-doctor passes a golden adversarial fixture
  • each actionable finding names an installed tool with compatible arguments or a recognized policy, migration, archive, or external disposition
  • runtime integration examples exist
  • OKF import and export are both tested
  • human review and approval workflows are represented

Release Candidate Gate

Release candidate is ready when:

  • schema generation is deterministic
  • migration tools are repeatable
  • doctor remediations execute through the shipped gateway and recheck cleanly
  • acceptance fixtures cover adversarial cases
  • docs, examples, and publishing scripts are stable
  • a real project has run a full planning and delivery cycle
  • package smoke tests pass from release artifacts without aibox
  • no known blocker remains for v1.0.0 cutover

Final Gate

v1.0.0 is ready when:

  • the cutover decision is recorded
  • the final ontology and migration plan are accepted
  • docs are published
  • release artifacts are reproducible
  • downstream projects have a supported adoption path
  • v0.x maintenance and v1.x development boundaries are documented

1.2.3 - Alpha Release Testing

Publish and consume an explicit v1 prerelease safely.

Alpha.5 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Release Policy

The current test release is the explicit prerelease v1.0.0-alpha.5. It is merged from v1.x-dev into v1.x-pre-release, validated there, and tagged there.

Prereleases never become the implicit latest version. latest remains the highest stable release, currently from the supported v0 line. Downstream installers must opt in to an exact prerelease.

Pre-tag Gate

Run from a clean v1.x-pre-release worktree:

uv run scripts/generate-v1-schemas.py --check
uv run scripts/smoke-test-servers.py
uv run scripts/smoke-test-package.py
scripts/check-docs-local.sh
uv run scripts/generate-mcp-manifest.py --check
scripts/test-installer-local.sh

Also run pk-doctor and the release audit. The release build must validate the committed MCP manifest and must not rewrite tracked release metadata.

Standalone Pilot

Create a local signing key once, then build the complete release set:

scripts/processkit-keygen-local.sh release.pem release.pub.pem
scripts/release-local.sh \
  v1.0.0-alpha.5 release.pem release.pub.pem

The signed envelope binds the archive, native installer executable, target triple, version, and trusted key. Verify it independently:

scripts/verify-release-local.sh \
  dist/processkit-v1.0.0-alpha.5.release.json \
  dist/processkit-v1.0.0-alpha.5.release.sig \
  release.pub.pem

Run the native executable against a disposable project through its opaque request contract. The local installer suite covers install, verify, update, recovery, user-drift handling, and uninstall. It neither invokes aibox nor uses GitHub Actions or another hosted build service.

The suite includes two complementary recovery signals:

  • the full shipped distribution completes install/update/uninstall lifecycle acceptance; and
  • a compact signed-layout fixture sets PROCESSKIT_INSTALLER_FAIL_AFTER_ACTION=0, proves exit 75 and a durable journal, runs native recovery, verifies the exact old state and project-owned file, retries the update, and verifies the new provenance.

Run that focused acceptance independently with:

scripts/test-update-recovery-local.sh

An aibox pilot may consume the exact signed prerelease afterward. That is a downstream compatibility check and never blocks or defines processkit release correctness.

Promotion

Promote the next alpha only from a new merge into v1.x-pre-release. Alpha tags are immutable. The supported v0 line remains the default until the final CLI and migration path have passed joint processkit/aibox testing.

1.2.4 - Alpha Scope

First buildable vertical slice for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Purpose

The alpha proves that the v1.0 model improves real agentic project work before the project implements the full 89-concept ontology.

The alpha is a vertical slice, not a miniature final release.

Scope

The alpha product slice is frozen to these 14 high-value concepts:

  • WorkItem
  • DecisionRecord
  • Artifact
  • LogEntry
  • Binding
  • Gate
  • Role
  • TeamMember
  • Skill
  • Capability
  • Proposition
  • Risk
  • Scope
  • Migration

Four prerequisite parent concepts are required to model that slice honestly: Actor for TeamMember, Container for Scope, and Command plus Event for Migration. The generated alpha contract therefore covers 18 of the ontology’s 89 concepts while preserving the 14-concept product scope.

All 18 schemas are generated from the registry. Risk and Scope are discriminator overlays, while TeamMember and Migration are compositions of their prerequisite interfaces.

Required Capabilities

  • Generate schemas for the alpha kinds.
  • Create and transition entities through MCP tools.
  • Query entities by ID, text, relation, and interface.
  • Preserve structured LogEntries.
  • Migrate a small v0.x corpus.
  • Export a conformant OKF bundle.
  • Publish the docs site locally and through GitHub Pages.
  • Run automated fixture tests without requiring aibox.
  • Run one real process cycle through the new model.

Out Of Scope

  • Full 89-concept implementation.
  • Complete migration of every historical entity.
  • Runtime-specific orchestration.
  • Vector database integration.
  • Public package stability guarantees.

Alpha Proof

The alpha is successful when:

  • a real work item moves from capture to completion
  • at least one decision is recorded and linked
  • artifacts and notes are attached as supporting evidence
  • a gate or approval is represented
  • event history is queryable
  • an agent can retrieve the relevant context through MCP
  • OKF export passes v0.1 conformance
  • processkit-native tests pass without aibox
  • a human can inspect the same state in files and docs

Promotion Gates

Alpha promotion additionally requires:

  • deterministic regeneration produces no diff
  • every generated schema is valid JSON Schema draft 2020-12
  • the representative fixture validates and indexes all declared interfaces
  • discriminator identity survives indexing
  • source and packaged context trees remain in sync
  • the docs site, server smoke suite, and release audit pass

1.2.5 - Alpha.3 Closure Plan

Feature-completion gates for the final pre-cutover alpha.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

v1.0.0-alpha.3 was the feature-complete pre-cutover target. This historical plan did not authorize a merge to main; v0.x remains the stable line until the owner accepts the final ontology, migration, CLI, and aibox evidence.

The machine-readable gate ledger is docs-site/data/v1_alpha3_gates.yaml. It tracks all 81 original v1 criteria and all 15 installer criteria from issue #118. A criterion may be met, partial, missing, owner-review, or deferred-post-cutover.

Alpha.3 closes the pre-cutover implementation work:

  1. complete the 89-concept ontology and 70 executable schema contracts;
  2. provide operational MCP, index, transition, and event parity;
  3. migrate representative manual-v0 and aibox-managed corpora;
  4. execute the retained agent-scenario and first-ART suites;
  5. finish installer planning, structured reconciliation, security, and Codex/Claude parity;
  6. validate the exact release artifact in a bare aibox container; and
  7. publish reproducible, signed, exact-pinnable release assets.

The G6 owner decision and every R7 criterion remain outside alpha.3 because they require an actual cutover and post-cutover observation.

1.2.6 - Analysis Archive

Supporting analysis used to shape the processkit v1.0 plan.

These documents preserve the reasoning that led to the current v1.0 planning set.

1.2.6.1 - Concept Mapping Briefing Analysis

Historical concept-mapping analysis for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Source: concept-mapping-2026-05-16.md

Analyzed: 2026-07-04

Supersession note: processkit-v1.0-rfc-draft.md is now the guiding briefing for processkit v1.0. Where this analysis conflicts with the processkit v1.0 RFC analysis , the RFC analysis wins. Keep this file as historical interpretation of the earlier concept-mapping input, not as current implementation guidance.

The filename dates the briefing to 2026-05-16, but the document itself continues through Round 17 on 2026-05-20. Treat it as a mid-May design snapshot, roughly six to seven weeks old as of this analysis.

Executive Read

The document starts as a reconciliation exercise: preserve processkit’s closed primitive set and map missing concepts onto fields, sub-kinds, or Binding types. It does not stay there.

By the later rounds, the recommendation has shifted to a greenfield ontology for a new processkit version:

  • keep the processkit target from the v0.x line
  • replace the old “small closed primitive set plus many special cases” model with a richer orthogonal ontology
  • promote several abstract parents to first-class atomic primitives
  • model domain terms through discriminators and compositions
  • support large agent-heavy organizations by making vocabulary explicit enough for agents to reason over

The most important sentence operationally is in Round 16: for a 10-human, many-agent company doing roughly 500-person work, the document recommends going full greenfield.

Relationship To Base Context

The briefing preserves these base-context invariants:

  • processkit remains provider-neutral and harness-neutral
  • project memory remains structured, versioned, and agent-readable
  • repository-local process data remains the source of truth
  • migrations remain explicit
  • rich skills and MCP tooling remain part of the product
  • old context/ dogfood history is evidence, not a payload to ship

It challenges these base-context assumptions:

  • the current v0.x primitive set is no longer treated as the likely target
  • current schemas are evidence, not constraints
  • “no new primitives” is rejected by later rounds
  • kind= discriminators alone are insufficient for the greenfield model
  • composition support becomes load-bearing

The base context says “do not change the product target.” This briefing does not change the target. It changes the ontology and implementation strategy for reaching that target.

Evolution Inside The Document

The early section says:

  • zero new primitives required
  • keep the closed primitive set
  • add fields, known_kinds, known_types, and Binding kinds
  • use an editorial Content / Structure / Governance framing

The middle rounds add:

  • a fourth level: Specification / Type / Meta
  • a cross-cutting Relation stratum
  • explicit Definition / Instance / Record thinking, then later simplify back to level-only organization
  • a class column:
    • T: terminology only
    • P: primitive
    • D: discriminator on a parent primitive
    • C: composed schema

The late rounds settle on a greenfield-corrected cut:

  • parent concepts such as Record, Specification, Container, Policy, Event, and Capability become atomic primitives
  • children such as DecisionRecord and LogEntry become compositions under Record
  • some grammar-level concepts are dropped as too low-level
  • the greenfield model is judged sufficient for SAFe-style scaling

This means the final recommendation should be read from Rounds 13-17, not from the opening “zero new primitives” finding.

Final Ontology Shape

The final stable shape in the document has five levels:

  • Specification / Type / Meta
  • Content
  • Structure
  • Governance
  • Relation

It classifies concepts by four implementation classes:

  • T: concept only, no schema
  • P: atomic primitive with its own YAML schema
  • D: discriminator variant on a parent primitive
  • C: composed schema assembled from primitive blocks

Round 14/15 reports:

  • 35 foundational concepts
  • 47 specifics
  • 82 concepts total
  • 21 primitives
  • 19 discriminators
  • 23 compositions
  • 19 terminology concepts

The very last delta table also says Round 14 drops from 87 to 81 concepts after removing six grammar-leak concepts. This conflicts with the Round 14/15 total of 82 because Round 15 adds Uniqueness. For future work, treat the effective final count as 82 unless newer input clarifies otherwise.

The RFC is that newer input. The current processkit v1.0 target is 89 concepts: 19 T, 22 P, 24 D, and 24 C.

Candidate Atomic Primitives

The greenfield model’s important P candidates are:

Specification / Type / Meta:

  • Specification

Content:

  • Artifact
  • Capability
  • Command
  • Discussion
  • Message
  • Note
  • Proposition
  • Queue
  • Record
  • Resource
  • Token
  • WorkItem

Structure:

  • Actor
  • Channel
  • Container
  • Role

Governance:

  • Event
  • Gate
  • Policy

Relation:

  • Binding

Some of these overlap with old processkit primitives. Others are new or promoted from concepts previously represented by fields, sub-kinds, or runtime behavior.

Major Reclassifications

The biggest conceptual shift is parent promotion:

  • Record becomes primitive; DecisionRecord, LogEntry, Measurement, Outcome, and Archive become Record-derived forms.
  • Container becomes primitive; Scope becomes a composition or specific container form.
  • Specification becomes primitive; schema, process, role, gate, schedule, goal, service, channel, queue, and test specifications become composed specifications.
  • Policy becomes primitive instead of being represented only through Artifact + Binding + Gate composition.
  • Event becomes primitive and pairs with Command.
  • Proposition becomes primitive and absorbs Belief, WorldFact, and Risk as discriminator variants.
  • Capability becomes primitive and absorbs Skill, Authority, and Service as specific forms.
  • Binding remains primitive, but Hierarchy, Position, Correlation, and Provenance become Binding variants.

These changes are incompatible with simply importing v0.27.1 schemas. They require a deliberate model redesign.

Load-Bearing Design Decisions

The document creates several decisions that should be confirmed before implementation:

  1. Adopt full greenfield ontology rather than incremental v0.27.x evolution.
  2. Treat Round 14/15 as the baseline cut, subject to newer inputs.
  3. Use 5 levels: Specification / Content / Structure / Governance / Relation.
  4. Use T/P/D/C classification to decide storage shape.
  5. Promote Record, Specification, Container, Event, Policy, Capability, Proposition, Command, Message, Queue, Resource, Token, and Channel.
  6. Demote old first-class children such as DecisionRecord and LogEntry to composed Record forms in the greenfield model.
  7. Keep Binding as the relation primitive and express hierarchy, provenance, position, and correlation as Binding variants.
  8. Use Proposition as the shared parent for belief, fact, and risk.
  9. Demote Service to a Capability-specific composition, unless newer SOA-oriented input reverses that.
  10. Keep spatial/location and BFO disposition out of the core model.

The RFC supersedes item 10: Location is now a primitive and Capability{kind=disposition} is explicitly included.

None of these should be silently encoded as implementation work without a current confirmation pass, because the briefing is dated.

Composition Strategy

The document rejects a false binary between duplicated flat schemas and runtime $ref.

Recommended path:

  1. Start with Option 8: runtime-only composition. Schemas may duplicate initially, while tests and polymorphic query behavior enforce shared interfaces.
  2. Evolve toward Option 3: build-time generation. Source uses composition; generated runtime schemas are flat YAML.
  3. Keep Option 7 available: extends: annotation with a lightweight loader.

The RFC supersedes this staged path. processkit v1.0 should use build-time Jinja + YAML schema generation from the start, with committed _generated/*.yaml output.

Scaling Argument

The document tests the model against:

  • 10 humans plus agents doing roughly 500-person work
  • 100 humans plus agents doing roughly 5000-person work
  • SAFe / ART / portfolio structures

Its conclusion:

  • today’s model is too weak for this
  • a reduced model improves agentic workflows but under-models cadence, channel, policy, and goal vocabulary
  • the greenfield model reaches near-complete SAFe modelling capability
  • further 10x scale does not require new concepts

The remaining scale problems are engineering and governance:

  • composition tooling
  • indexing and search
  • federation
  • throughput
  • bulk operations
  • interpretation drift
  • agent training on canonical meanings

This strongly implies that processkit v1.0 should invest early in indexing, composition tests, and canonical ontology documentation.

Questions Resolved By The RFC

The document left these unresolved or only implicitly resolved. The RFC now settles them for processkit v1.0:

  • Position is Binding{kind=role-slot} with nullable subject.
  • Belief, WorldFact, Risk, and WSJF-estimate sit under Proposition.
  • Service is S(Capability)/C, not a primitive.
  • Hierarchy remains a named concept implemented as Binding{kind=parent-child}.
  • Location is a primitive with five discriminator variants.
  • Capability{kind=disposition} is included.
  • The final concept count is 89, not 81 or 82.
  • The RFC supersedes Round 14/15 where they conflict.

Implications For processkit v1.0 Build-Up

The new project should not start by copying the old src/context/ schemas wholesale. The better path is:

  1. Preserve the product target and release discipline from the first version.
  2. Treat old schemas, skills, and MCP servers as implementation evidence.
  3. Define the greenfield ontology contract first.
  4. Decide the first-phase primitive set and class assignment.
  5. Create schema-generation or runtime-composition policy.
  6. Build minimal tooling around the new primitives:
    • ID generation
    • schema validation
    • state transitions
    • entity index
    • relation queries
    • migrations
  7. Port or rewrite skills after the new ontology is stable.
  8. Use migration adapters to ingest old-processkit context where needed.

The first implementation milestone should be a thin vertical slice, not the whole ontology:

  • one or two Specification forms
  • Record
  • WorkItem
  • Binding
  • Container or Scope
  • Event / Command
  • index and validation support

Then expand through compositions and discriminators.

Risks

  • The document is internally inconsistent because it records an evolving discussion, not a single final spec.
  • It references companion Notes and Decisions that are not present in this new repository.
  • It was produced before later project learning, so its final recommendation may be superseded.
  • Going full greenfield creates a migration burden from processkit v0.x.
  • Composition tooling can become a project inside the project.
  • Agents may benefit from rich vocabulary, but humans may find the ontology too abstract without good docs and examples.

What The RFC Resolves

The later RFC answers the briefing’s implementation questions:

  • The intended baseline is the RFC’s 89-concept T/P/D/C ontology.
  • v1.0 is a greenfield rebuild with migration/import bridges from v0.x.
  • The composition mechanism is build-time Jinja + YAML generation.
  • SAFe / many-agent scaling remains the main ontology pressure.
  • The first deliverable is a phase-gated alpha built around ontology completeness and tooling parity.

Working Interpretation

Until newer input says otherwise, use this as the working direction:

processkit v1.0 should preserve processkit’s product promise but rebuild the core model around the RFC’s greenfield 89-concept ontology. The old project is evidence and migration source, not a schema constraint. Implementation should follow the RFC’s build-time schema generation, interface-aware indexing, and 81-criterion gate.

1.2.6.2 - OKF Compatibility Analysis

Analysis of OKF as an import, export, and publication profile.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Source:

  • Google Cloud announcement, “Introducing the Open Knowledge Format”, published 2026-06-12
  • GoogleCloudPlatform/knowledge-catalog okf/SPEC.md, v0.1 draft, inspected at d44368c15e38e7c92481c5992e4f9b5b421a801d

Analyzed: 2026-07-04

Recommendation

processkit v1.0 should support OKF as an import/export and publication profile, but should not make OKF the canonical internal format.

In practical terms:

  • Yes: emit conformant OKF bundles from selected processkit knowledge.
  • Yes: ingest OKF bundles into processkit as external knowledge sources.
  • Yes: preserve OKF-compatible affordances in v1.0 schema design where they do not weaken processkit semantics.
  • No: do not require the whole repository or canonical context/ tree to be an OKF bundle.
  • No: do not replace processkit entity IDs, typed relations, lifecycle states, validation modes, event logs, or interface-aware queries with OKF’s permissive markdown conventions.

This gives us interoperability without losing the benefits that make processkit more than an LLM wiki.

What OKF Is

OKF v0.1 is a deliberately small knowledge-bundle format:

  • a directory tree of UTF-8 markdown files
  • YAML frontmatter at the top of every concept document
  • type as the only required frontmatter key
  • optional title, description, resource, tags, and timestamp
  • file path, minus .md, as the concept ID
  • normal markdown links as graph edges
  • optional index.md files for progressive disclosure
  • optional log.md files for chronological history
  • permissive consumers that tolerate missing optional fields, unknown types, unknown keys, broken links, and missing indexes

The announcement frames OKF as a vendor-neutral, agent- and human-friendly standard for exchanging metadata, context, and curated knowledge. It explicitly says OKF is a format, not a platform or service.

Fit With processkit Goals

OKF strongly aligns with several processkit goals:

  • plain files over service lock-in
  • git-native review, diffs, history, and distribution
  • human-readable and agent-readable knowledge
  • provider-neutral consumption
  • markdown plus YAML frontmatter
  • progressive disclosure through indexes
  • graph navigation through links

This means OKF is strategically relevant. It is close enough to processkit’s existing shape that ignoring it would create unnecessary interoperability debt.

Limits And Mismatches

OKF is intentionally less strict than processkit needs to be.

Key mismatches:

  • OKF has no fixed taxonomy; processkit v1.0 is explicitly building a typed ontology with T/P/D/C classes.
  • OKF treats type values as unregistered strings; processkit needs schema-backed kinds, discriminators, and interfaces.
  • OKF concepts are identified by bundle-relative paths; processkit uses stable entity IDs and may move storage paths as an implementation detail.
  • OKF links are untyped and their relationship meaning lives in prose; processkit needs typed Bindings, explicit relations, lifecycle transitions, and queryable graph semantics.
  • OKF requires permissive consumption of broken links and unknown fields; processkit needs strict validation for migrated kinds and controlled tolerant validation during migration.
  • OKF log.md is prose history; processkit LogEntry entities are structured, append-only process evidence.
  • OKF reserves lowercase index.md and log.md; processkit has richer index, schema, migration, and event-log machinery that should not be collapsed into those two files.

There is also a reference-implementation/spec mismatch: the v0.1 spec says only type is required for conformance, while the checked-in reference agent’s OKFDocument.validate() currently requires type, title, description, and timestamp. For processkit, the spec should be treated as normative and the reference implementation as an example producer profile, not as the compatibility contract.

Compatibility Model

The right compatibility model is a projection layer:

processkit canonical entities
  -> OKF exporter
  -> conformant OKF bundle

OKF bundle
  -> OKF importer
  -> external-source Artifacts / Notes / indexed knowledge

The canonical v1.0 system should keep:

  • generated schemas and validation modes
  • entity IDs
  • lifecycle state machines
  • typed relations and Bindings
  • interface-aware queries
  • event logs
  • MCP tools as the write path

The OKF layer should provide:

  • read-only exports for external consumers
  • lossy-but-useful imports of external OKF knowledge
  • optional round-trip preservation of unknown OKF frontmatter
  • generated index.md files for exported bundles
  • generated log.md files only as human-facing summaries, not as the source of truth for process events

Proposed v1.0 Requirements

Add an “OKF compatibility” acceptance slice to the v1.0 plan:

  1. Define a processkit OKF exporter profile.
  2. Map each exported processkit kind to an OKF type.
  3. Include title, description, timestamp, and tags wherever available, even though only type is required by OKF.
  4. Preserve processkit IDs in an extension key such as processkit_id.
  5. Preserve processkit kind/interface metadata in extension keys such as processkit_kind and processkit_interfaces.
  6. Encode typed relations in extension frontmatter, while also emitting normal markdown links for generic OKF consumers.
  7. Generate conformant index.md files for progressive disclosure.
  8. Treat log.md as an optional generated changelog summary.
  9. Provide an OKF validator mode that checks v0.1 conformance.
  10. Provide an OKF importer that marks imported knowledge as external and does not pretend it has full processkit lifecycle semantics.

Decision Guidance

Adopt OKF compatibility if it remains a boundary format.

Do not adopt OKF as the internal canonical model unless the OKF specification evolves to cover typed relations, lifecycle semantics, stable non-path IDs, validation profiles, and structured event history. That would be a different standard from OKF v0.1.

The safest wording for the v1.0 roadmap is:

processkit v1.0 SHOULD be able to produce and consume OKF v0.1 bundles, while retaining processkit’s stricter canonical schema, lifecycle, relation, and MCP semantics internally.

1.2.6.3 - processkit v1.0 Base Context

Baseline context for the processkit v1.0 redesign.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Created: 2026-07-04

This historical base context was created for the processkit v1.0 redesign. It was built from the earlier projectious-work/processkit repository, cloned locally at:

The goal is to preserve the proven v0.x product target while creating a clean basis for processkit v1.0 improvement briefings.

Current Guiding Briefing

The current guiding briefing is processkit-v1.0-rfc-draft.md, analyzed in the processkit v1.0 RFC analysis .

Conflict rule:

  • preserve the stable product target captured in this base context
  • use the v1.0 RFC for ontology, branch, release, schema-composition, validation, indexing, and cutover-gate direction
  • treat concept-mapping-2026-05-16.md as historical input where it agrees with the RFC, not as current guidance where it conflicts

Current Repository Status

At the time of this analysis, the workspace was a fresh aibox/processkit-derived project scaffold, not yet a rebuilt processkit source tree.

  • aibox.lock pins upstream processkit to v0.27.1.
  • aibox.toml enables the processkit core/managed skill surface.
  • The workspace currently has no src/, docs-site/, or implementation source tree.
  • Indexed processkit entities for WorkItems, DecisionRecords, Discussions, and Artifacts are currently empty in this project.
  • GitHub auth was available for repository status checks.

Session-start process checks were run before this document was created. The pending aibox.lock backfill migration MIG-LOCK-20260703T161218 was applied through migration-management. After that, active migrations were zero.

pk-doctor still reports setup drift that should be tracked separately:

  • missing scripts/check-src-context-drift.sh
  • missing TeamMember tier directories for cora and thrifty-otter
  • missing Claude sub-agent export for cora
  • stale MCP manifest / server-header / preauth metadata
  • one applied migration that is now an archive candidate

These findings are not part of the base-context target itself, but they are important when this repository starts growing source and release machinery.

Stable Product Target

The first processkit version defines processkit as:

provider-neutral process memory, skills, and MCP tools for agentic software projects.

The stable target should not change:

  1. processkit is a versioned content and runtime layer for AI-assisted projects.
  2. It gives agents and humans structured project memory through repository files, schemas, skills, state machines, and MCP tools.
  3. It is provider-neutral and harness-neutral. Claude, Codex, OpenCode, Hermes, Aider, and other harnesses are integration targets, not core dependencies.
  4. It is a process layer, not a replacement for a harness, runtime manager, issue tracker, or model provider.
  5. It must remain usable manually, through MCP-capable harnesses, or via an external installer such as aibox.
  6. It must remain forkable. Organizations can maintain private forks and downstream projects can consume those forks without changing their own structure.

The original PRD states the primary goal clearly: make it easy for any team to add a structured, agent-readable process layer to any repository.

Shipped Deliverable Boundary

The old project made a hard distinction between the processkit repository’s dogfooding context and the content shipped to consumers. This distinction is foundational and should be preserved.

src/ in the original repository is a literal mirror of a fresh consumer project root:

  • src/AGENTS.md becomes <project>/AGENTS.md.
  • src/context/ becomes <project>/context/.
  • src/.gitignore.example is the recommended ignore template.
  • src/.processkit/ is catalog tooling and package metadata; it is not installed into consumers as live project context.

The repository-root context/ in the old project is dogfood project state. It contains processkit’s own WorkItems, Decisions, Artifacts, logs, migrations, team state, and release history. That content must not be blindly mirrored into src/context/.

The release boundary guard from the original project explicitly allows dogfood-only directories under root context/ while forbidding them from shipping under src/context/. In src/context/, shipped Artifacts are model specs and model profiles only; dogfood Decisions, WorkItems, Discussions, Notes, Logs, Migrations, and Templates do not ship.

Consumer Usage Model

Consumers can use processkit manually or through a manager.

Manual use:

  1. Download a versioned processkit release tarball.
  2. Copy the shipped context/, .processkit, and AGENTS.md into the consuming project.
  3. Configure the harness to launch processkit-gateway, or launch individual per-skill MCP servers.

aibox-assisted use:

  1. aibox.toml pins [processkit] source, version, and src_path.
  2. aibox fetches the source release, installs selected package tiers, and records aibox.lock.
  3. aibox may configure or supervise runtime files, but processkit remains the standalone source for schemas, skills, packages, and MCP runtime.

The old README names three MCP layouts:

  • processkit-gateway: preferred provider-neutral entry point.
  • Per-skill MCP servers: canonical granular compatibility surface.
  • aggregate-mcp: legacy compatibility bridge.

The gateway is additive. It must not replace per-skill servers as the canonical validation and compatibility surface.

Package Tiers

The original package model has five tiers:

  • minimal: foundation for solo developers and small side projects.
  • managed: recommended default for small teams with backlog and process cadence.
  • software: managed plus architecture, infrastructure, security, performance, database, and observability skills.
  • research: managed plus data, ML, AI, and research-authoring skills.
  • product: software plus design, framework, product, and broader end-to-end product-development skills.

Packages compose through spec.extends; consumers can add or remove specific skills through config overrides.

Entity and Contract Model

The stable entity model is Markdown files with YAML frontmatter:

  • apiVersion
  • kind
  • metadata
  • spec
  • body content where appropriate

The v2 direction is intentionally breaking and explicit. The historical decisions rejected long-term v1/v2 compatibility shims. v1 contexts are migration sources; after migration, v2 schemas and index semantics are authoritative.

Important v2 contract points:

  • Unknown kinds, stale primitive assumptions, and ad hoc event/type vocabulary should fail validation.
  • Metric, Model, Process, Schedule, and StateMachine are legacy v1 migration-source kinds, not shipped v2 entity primitives.
  • Process definitions are Artifacts plus process-instance WorkItems.
  • Schedule semantics use Binding(type=time-window).
  • Runtime state-machine YAML files are implementation contracts, not user-authored StateMachine entities.
  • Hook inbox items are Notes with spec.inbox.
  • Agent cards and security policies are Artifact-backed projections.
  • Eval gates produce eval-spec Artifacts, paired Gates, policy/application Bindings, and calibration LogEntries.

MCP and Indexing Principles

The old project converged on these operational rules:

  • Agents read entities through index-management, not raw filesystem scraping.
  • Agents write entities through management MCP tools so schema validation, state-machine enforcement, index updates, and event logs happen consistently.
  • index-management is the read-side foundation.
  • id-management is the write-side ID foundation.
  • Entity search uses SQLite FTS5, with optional sqlite-vec semantic search and hybrid search.
  • Broad health checks and release checks should return structured JSON so agents can route findings instead of re-parsing prose.

The original release had 30 MCP server files under src/context/skills. Most are processkit management servers; one additional shipped server was devops/repo-management.

Provider and Model Neutrality

Provider neutrality is a core invariant, not a convenience.

The old decisions establish:

  • processkit skills, commands, MCP tools, and doctor findings must not require or invoke aibox host commands from inside derived project containers.
  • aibox and other managers may install, supervise, or provide runtime signals, but processkit remediation surfaces stay generic.
  • Role and TeamMember model assignments bind to provider-neutral Artifact(kind=model-profile) artifacts by default.
  • Concrete Artifact(kind=model-spec) artifacts may encode provider and model names because they describe real provider models.
  • Runtime access gates expand profiles into concrete candidates.
  • Direct Role/TeamMember bindings to concrete ModelSpec artifacts are explicit pins or compatibility cases.

This is the design line that lets a processkit project move between Codex, Claude Code, Gemini CLI, Aider, Cursor, Copilot, OpenCode, Hermes, and future harnesses without rewriting its process memory.

Team and Role Model

The old project introduced persistent TeamMembers, Roles, RoleSlots, and Bindings to support repeatable multi-agent collaboration:

  • Roles define responsibilities.
  • TeamMembers represent named humans or AI personas.
  • Bindings connect actors, roles, model profiles, scopes, and other addressable surfaces.
  • RoleSlots decouple identity and capacity planning from concrete people or model invocations.
  • Sub-agent dispatch should route through route_task first and use the recommended TeamMember/model class when available.

The workspace had processkit TeamMember remnants from installation, but pk-doctor reported missing tier directories and one missing Claude sub-agent export. Treat that as setup hygiene, not as the future team model.

Release and Migration Model

The first processkit version treated releases as deliberate versioned content, not silent syncs.

Stable release expectations:

  • src/PROVENANCE.toml maps shipped files to the tag where each last changed.
  • scripts/processkit-diff.sh compares tagged versions and classifies added, removed, changed, and unchanged files.
  • Installers write explicit Migration documents for upgrades.
  • Users and agents review migrations before applying them.
  • Migration flow is pending -> in-progress -> applied.
  • Release tarballs are built reproducibly from src/.
  • Release packaging runs a release-boundary guard, release audit, provenance freshness check, MCP preauth validation, and checksum generation.

The old release process guarded against a known failure mode: dogfood context had changed while src/context/ did not receive corresponding shippable changes. The new version should preserve a guard that makes that drift visible.

Documentation Surface

The first version had two user-facing documentation surfaces:

  • root docs such as docs/harness-claude-code.md
  • Docusaurus docs under docs-site/

The most important stable docs topics are:

  • installation and harness setup
  • package tiers and skill catalog
  • API version policy
  • migration model
  • v2 contracts
  • ID formats
  • privacy tiers
  • gateway and MCP layouts

At the time of capture, the workspace did not yet have the current Docusaurus development section. Treat that statement as historical.

Current Gap Summary

Compared with the original processkit repository, this project currently has:

  • processkit runtime context installed under root context/
  • aibox config and lock data
  • devcontainer/runtime scaffolding
  • this base-context document

It does not yet have:

  • src/ deliverable tree
  • src/context/ schemas, state machines, skills, model artifacts, roles, bindings, and TeamMember defaults
  • package definitions under src/.processkit/packages
  • release scripts and verification scripts
  • docs-site user documentation
  • changelog, contribution guide, or release packaging flow
  • processkit v1.0-specific WorkItems, Decisions, or Artifacts describing the rebuild roadmap

Base-Context Readiness Audit

This first phase is complete enough for the next briefing document.

RequirementEvidenceStatus
Clone/analyze original repository/tmp/processkit-original at commit 6a9a175f95c42dd76e23488feca42e3d05526b98Done
Capture target that should not changeStable Product Target, Consumer Usage Model, Entity and Contract ModelDone
Analyze old context/ decisions/artifactsEvidence Index lists PRD and high-signal DecisionRecordsDone
Analyze old src/ source deliverableShipped Deliverable Boundary, Package Tiers, MCP and Indexing PrinciplesDone
Analyze user-facing docsDocumentation Surface plus reference-doc evidence listDone
Capture initial v1.0 workspace statusCurrent Repository Status and Current Gap SummaryDone
Verify process health before handoffactive migrations: zero; pk-doctor findings summarized aboveDone

Open items are intentionally deferred until the incoming briefing is reviewed:

  • creating processkit v1.0-specific WorkItems or DecisionRecords
  • choosing which old skills or runtime code to import versus redesign
  • rebuilding src/, docs-site/, release scripts, or MCP runtime code
  • resolving unrelated installed-context hygiene findings from pk-doctor

Improvement Surface for Later Briefing

The next briefing can change how the new implementation is built, but it should do so against these preserved targets:

  • keep processkit provider-neutral and host-orchestrator-neutral
  • keep the shipped deliverable boundary explicit
  • keep entity writes validated through MCP, not hand-edited context files
  • keep migrations explicit and reviewable
  • keep gateway additive rather than replacing per-skill canonical servers
  • keep model routing provider-neutral through profiles
  • keep docs and release checks first-class
  • keep dogfood project context separate from consumer deliverables

Likely redesign areas for processkit v1.0:

  • simplify the source layout without losing the consumer mirror invariant
  • reduce prompt/runtime overhead of the skill and MCP surfaces
  • make package selection and command projection easier to reason about
  • strengthen release and migration tests from the start
  • define processkit v1.0-specific WorkItems/Decisions after the incoming briefing document is reviewed
  • decide whether to import, regenerate, or redesign each old skill family rather than copying the whole first-version catalog wholesale

Evidence Index

Primary evidence from the original repository:

  • README.md: product promise, install model, MCP layouts, current status
  • ART-20260409_1854-KindCrane-processkit-product-requirements-document: original approved PRD
  • src/INDEX.md: shipped deliverable boundary and mirror invariant
  • src/.processkit/packages/*.yaml: package tiers and composition
  • docs/harness-claude-code.md: harness behavior and compliance payloads
  • docs-site/content/en/docs/reference/apiversion-policy.md: apiVersion rules
  • docs-site/content/en/docs/reference/migration.md: migration model
  • docs-site/content/en/docs/reference/v2-contracts.md: v2 entity rules
  • docs-site/content/en/docs/reference/id-formats.md: ID format policy
  • docs-site/content/en/docs/reference/privacy.md: privacy tiers
  • src/context/skills/processkit/processkit-gateway/SKILL.md: gateway architecture
  • src/context/skills/processkit/index-management/SKILL.md: read-side index foundation
  • scripts/check-src-context-drift.sh: release boundary guard
  • scripts/build-release-tarball.sh: release packaging flow
  • scripts/smoke-test-servers.py: MCP smoke workflow

High-signal historical decisions:

  • DEC-20260430_1416-SmoothTiger-adopt-breaking-v2-implementation-plan-for
  • DEC-20260501_1739-ProudCrane-adopt-smoothtiger-informed-split-track-v2
  • DEC-20260502_0743-CoolFjord-adopt-provider-neutral-processkit-gateway-daemon
  • DEC-20260503_1829-LoyalComet-route-roles-and-team-members-through
  • DEC-20260515_1232-GentleLantern-keep-processkit-host-orchestrator-neutral

1.2.6.4 - processkit v1.0 RFC Analysis

Analysis of the guiding RFC for the processkit v1.0 redesign.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Source: processkit-v1.0-rfc-draft.md

Analyzed: 2026-07-04

Status for this project: guiding briefing. Where this RFC conflicts with concept-mapping-2026-05-16.md or concept-mapping-briefing-analysis.md , this RFC wins.

Executive Read

The RFC turns the earlier concept-mapping work into an implementation and release proposal. It is no longer just an ontology discussion. It asks upstream processkit maintainers to host a full v1.0 greenfield rebuild on a parallel v1.0 branch while main continues v0.x maintenance.

The product target from the base context remains intact: processkit is still provider-neutral process memory, skills, and MCP tooling for agentic software projects. The RFC changes the model and build plan used to reach that target.

The RFC’s operational direction is:

  • full greenfield ontology rebuild
  • 89 concepts in T/P/D/C classes
  • Jinja + YAML schema composition
  • committed build-time _generated/ schemas
  • new regenerate_schemas MCP endpoint
  • interface-aware polymorphic queries
  • strict/tolerant per-kind validation during migration
  • 9-12 month rebuild on a v1.0 branch
  • alpha, beta, rc, final pre-release progression
  • 81-criterion cutover gate before v1.0.0

Authority And Evidence

The RFC cites:

  • DEC-DeepTide: rebuild authorization
  • DEC-BraveAtlas: 81-criterion cutover gate
  • DISC-BriskWillow: 20-round ontology discussion
  • upstream issues #74 and #75 as pk-doctor reliability evidence

Those DEC/DISC entities are not indexed in this new repository, so they were not locally verifiable through processkit MCP.

I also checked the private projectious-work/internal repository as an external evidence source:

  • origin/main 44704b451d4baa53d04eb0e53c1bc01a41f6627e (2026-05-16T20:18:07+02:00)
  • origin/policy-primitive-trigger-reeval-2026-06-29 8197000d5951ae5e5303e6f2ca868d9f7b4e9ad9 (2026-06-29T07:05:29Z)

That repository verifies DISC-BriskWillow at context/discussions/ DISC-20260515_1955-BriskWillow-is-hierarchy-a-primitive-are-higher.md. The discussion is active, supersedes the earlier DISC-OpenPanda record, and carries forward the hierarchy / abstraction-level question. It also says the proposed decision was leaning toward editorial three-level framing without new primitives or schema migration, with hierarchy remaining composable through existing parent / Scope / Role / Binding shapes.

The same internal repository did not contain DEC-DeepTide or DEC-BraveAtlas by filename, ID token, or all-history search on the available branches. The June branch only adds tmp/policy-primitive-trigger-reeval-2026-06-29.md, which corroborates that DISC-BriskWillow is a live non-Policy primitive-admission question but does not provide the missing RFC decision records.

Treat the RFC as the authority because the user explicitly selected it as the guiding document. Treat DEC-DeepTide and DEC-BraveAtlas as unresolved external provenance to be imported, recreated, or replaced by new local decision records before irreversible implementation cutover.

What Supersedes The Earlier Concept Mapping

The earlier analysis treated Round 14/15 as the likely baseline and noted open questions. The RFC closes or changes several of those points.

The RFC now says:

  • final ontology count is 89 concepts, not 81/82
  • Location is a new primitive
  • Skill is a primitive, not a composition
  • TeamMember is a composition, not Actor{kind=team-member}
  • Service is S(Capability)/C, not a primitive
  • Position is Binding{kind=role-slot} with nullable subject
  • Location has five discriminator variants
  • Capability{kind=disposition} settles the disposition question
  • build-time Jinja + YAML composition is the preferred mechanism
  • _generated/ output is committed
  • processkit v1.0 should be built upstream on a v1.0 branch, not only in this derived repo

Any earlier note saying “confirm this later” should be read as resolved when the RFC makes a concrete settlement.

Ontology Direction

The current v0.x 13-primitive ontology is rejected as insufficient. The RFC says it cannot cleanly model AI-first SAFe execution at 100x5000 scale without both:

  • missing first-class concepts, and
  • grammar concepts leaking into the entity layer

The intended v1.0 ontology uses four concept classes:

  • T: foundational terminology or meta-mechanic, no own lifecycle
  • P: atomic primitive with schema, lifecycle, and persistence
  • D: discriminator variant of a primitive
  • C: composition of primitives and terminology fragments

Final RFC counts:

  • T: 19
  • P: 22
  • D: 24
  • C: 24
  • total: 89

Key Primitive Settlements

The RFC explicitly calls out these settlements:

  • Proposition is a new primitive. It is the parent for Belief, Risk, WorldFact, WSJF-estimate, and related epistemic content.
  • Location is a new primitive, with discriminator variants for geographic region, site, coordinate, logical region, and timezone.
  • Skill is a primitive with its own schema and lifecycle, distinct from Capability.
  • Capability remains a primitive; Service is composed from Capability.
  • TeamMember becomes a composition of Actor plus calendar, capabilities, persona, skill list, and journal.
  • Position is a Binding variant with nullable subject.
  • Hierarchy remains named for mental anchoring but is implemented as Binding{kind=parent-child}.

These are guiding decisions for processkit v1.0 unless later input supersedes the RFC.

Implementation Mechanics

The RFC rejects runtime $ref as the main solution and chooses build-time generation:

  • schema sources live under schemas/src/
  • Jinja templates render into flat _generated/*.yaml
  • runtime tools consume _generated/
  • _generated/ is committed to git
  • composition uses extends: parent.yaml
  • templates use {% include %} for T fragments
  • merge behavior uses __merge: replace|concat|name-merge

This is more specific than the earlier “Option 8 first, Option 3 later” guidance. The RFC chooses the build-time path directly.

Required MCP endpoint:

regenerate_schemas(kinds: list | None) -> {rebuilt, unchanged, errors}

The same endpoint handles full and partial rebuilds. aibox apply triggers full rebuilds by default, with opt-out for fast iteration.

Validation And Indexing

Validation is phase-gated:

  • migrated kinds: strict validation
  • kinds still migrating: tolerant validation, warn but pass
  • per-kind validation mode must be observable through MCP

Indexing extends the existing FTS5 surface rather than replacing it. Schemas declare interfaces:

interfaces: [Record, Versioned]

The required new query capability is:

query_by_interface(Record, ...)

This is load-bearing. The RFC identifies it as the fix for agent routing failures where agents have to choose between WorkItem, DecisionRecord, Artifact, LogEntry, and similar concrete kinds.

Branch And Release Model

The RFC proposes an upstream v1.0 feature branch:

  • main continues v0.x.y maintenance
  • v1.0 receives all greenfield rebuild work
  • alpha, beta, rc, and final tags are cut from v1.0
  • final cutover merges v1.0 into main and tags v1.0.0
  • derived projects opt in by pinning aibox.toml to alpha/beta/rc tags

Backport policy:

  • security fixes flow both ways
  • dependency bumps flow at maintainer discretion
  • feature work does not backport either way

This keeps the 9-12 month divergence bounded.

Cutover Gate

The RFC adopts an 81-criterion acceptance gate:

  • 75 strict criteria
  • 6 soft criteria
  • 8 phases

Phases:

  • P0: pre-conditions
  • O1: ontology completeness
  • T2: tooling parity
  • C3: corpus migration
  • S4: skills and agents
  • A5: first-ART validation
  • G6: cutover decision point
  • R7: post-cutover stabilization

The most important proof phase is A5: model a real ART end to end and run one full PI cycle in the new ontology.

The RFC highlights these specific acceptance constraints:

  • regenerate_schemas(kinds: list | None) MCP endpoint is required
  • search must include FTS5 plus interface grouping
  • canned query set must be signed off before rc
  • all MCP tools need valid Python type signatures and matching draft-2020-12 JSON Schemas
  • pk-doctor must pass a golden adversarial fixture

Upstream Asks

The RFC asks upstream maintainers for:

  1. host the v1.0 feature branch upstream
  2. endorse merge-to-main and v1.0.0 release model
  3. accept the backport policy
  4. name an upstream owner/contact
  5. adopt DEC-BraveAtlas or counter-propose a release gate

It explicitly does not ask upstream for engineering capacity.

Timeline

Indicative timeline:

  • months 1-2: composition tooling and first alpha
  • months 3-4: parent promotion and migration scripts
  • months 5-6: specification compositions plus Channel, Queue, Resource, Container; beta begins
  • months 7-9: skills, MCP tools, doctor, indexer; beta to rc
  • months 10-12: cutover and first ART on v1.0
  • post-cutover: at least 14 days stabilization

The gate, not the calendar, decides release progress.

Risks

The RFC’s main risks:

  • upstream rejects branch model
  • single derived-project decider bottlenecks sign-off
  • pk-doctor bugs hide failures
  • corpus migration loses data
  • agents drift into non-canonical interpretations
  • long-lived main / v1.0 divergence becomes hard to merge

The RFC mitigates these through the RFC itself, DEC-BraveAtlas tracking, adversarial doctor fixtures, migration loss ceilings, agent scenario tests, and strict backport policy.

Implications For This Repository

For processkit v1.0, this RFC should become the primary planning baseline:

  • do not build from the old v0.27.1 schema set
  • do not follow the earlier 81/82-concept Round 14/15 interpretation
  • use the RFC’s 89-concept shape as current guidance
  • plan schema tooling before broad schema migration
  • make interface-aware indexing a first-class requirement
  • design validation modes before migrating live corpora
  • treat pk-doctor rewrite/hardening as part of v1.0, not afterthought
  • prepare for upstream-branch workflow or a fork fallback

The first concrete work products should be:

  1. local copy of the RFC analysis and conflict rules
  2. ontology inventory derived from the 89-concept RFC
  3. phase-zero work plan for composition tooling
  4. local representation of the 81-criterion gate
  5. decision record for processkit v1.0 adopting this RFC as guidance

The fifth item should be recorded through processkit DecisionRecord MCP only after explicit acceptance, or when the user asks us to start planning work items.

Conflict Rule

If processkit-v1.0-rfc-draft.md conflicts with concept-mapping-2026-05-16.md, the RFC wins.

If the RFC conflicts with old processkit v0.27.1 implementation, the RFC wins for processkit v1.0 design, while v0.27.1 remains migration-source evidence.

If later user-provided input conflicts with the RFC, analyze that input explicitly and decide whether it supersedes this RFC.

1.2.6.5 - processkit v1.0 Start Assessment

Scope and risk assessment for starting the v1.0 redesign.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Analyzed: 2026-07-04

Sources considered:

Judgement

The v1.0 plan is good enough to start, but not as an unconstrained 9-12 month greenfield rebuild.

Start a v1.0 branch now, but run it as a narrow alpha first:

  • prove a small vertical slice before implementing the full ontology
  • keep processkit’s canonical semantics stricter than OKF
  • position processkit as process memory and governance, not as another agent runtime
  • integrate with external runtimes instead of rebuilding them
  • add OKF import/export as a boundary compatibility feature

The plan’s direction is strong. Its main risk is scope, not concept.

Why Start

The market is converging toward exactly the problems processkit is trying to solve:

  • persistent agent context
  • local and git-native knowledge
  • markdown / frontmatter agent memory
  • MCP tool interoperability
  • durable work state
  • human review and approval gates
  • multi-agent role specialization
  • observability, lineage, and auditability

The RFC’s core differentiators remain valid:

  • schema-backed process entities
  • lifecycle-aware WorkItems, Decisions, Discussions, Notes, Artifacts, Bindings, Gates, Skills, and Logs
  • MCP write paths rather than ad hoc file edits
  • typed relations instead of prose-only links
  • provider-neutral model and role routing
  • interface-aware search and query
  • structured event history

No surveyed external project fully covers this combination.

Why Constrain The Start

The RFC’s 89-concept ontology is too large to treat as proven before implementation. It should be validated by usage.

The first alpha should answer:

  • Does the new ontology reduce agent confusion in real work?
  • Does query_by_interface improve routing and retrieval?
  • Can existing v0.x history migrate without losing process evidence?
  • Can agents create and transition entities reliably through MCP tools?
  • Can humans still inspect and review the files directly?
  • Can OKF export/import work without weakening internal semantics?

If those are not proven early, a larger rebuild will produce more schema surface without enough operational proof.

Concepts To Learn From

These external concepts should influence v1.0 without replacing processkit’s identity.

OKF: Boundary Format

Learn:

  • minimal markdown + YAML interchange
  • permissive consumers
  • path-readable bundles
  • generated index.md for progressive disclosure
  • plain markdown links for generic graph consumers

Apply:

  • OKF exporter and importer
  • extension frontmatter preserving processkit IDs and kinds
  • OKF validator mode
  • generated OKF bundles for publication and exchange

Do not copy:

  • path IDs as canonical IDs
  • untyped relations as the only graph model
  • prose log.md as authoritative event history

Basic Memory / LLM Wiki: Local-First Memory

Learn:

  • agents work well with simple, readable markdown memory
  • backlinks and lightweight entity extraction are useful
  • user-owned files build trust
  • MCP access to memory lowers integration friction

Apply:

  • keep canonical files inspectable by humans
  • improve indexes, backlinks, and local search ergonomics
  • expose memory operations through MCP with clear tool metadata
  • make agent write paths safe but still low-friction

Do not copy:

  • free-form notes as the only data model
  • weak lifecycle semantics

LangGraph / ADK / Microsoft Agent Framework: Runtime Boundaries

Learn:

  • durable execution, pause/resume, and human-in-the-loop workflows are now table stakes
  • agent runtimes increasingly support state, tools, telemetry, and multi-agent orchestration
  • framework-specific orchestration changes quickly

Apply:

  • make processkit easy for those runtimes to use
  • define stable MCP tools for work, decisions, gates, and logs
  • model approvals and interrupts as first-class process state
  • provide runtime-neutral integration examples

Do not copy:

  • agent loop orchestration
  • provider-specific runtime assumptions

OpenAI Agents SDK: Handoffs, Guardrails, Tracing

Learn:

  • handoffs need explicit target identity and task shape
  • guardrails should be auditable process artifacts
  • traces are valuable when debugging agent behavior

Apply:

  • connect TeamMember / Role routing to handoff metadata
  • model guardrails as Gates and policy Bindings
  • map traces or summaries into structured LogEntries or Artifacts

Do not copy:

  • SDK-specific session state as canonical project memory

Letta / Mem0: Memory Layering

Learn:

  • long-term memory needs summarization, retrieval, and consolidation
  • different memory layers serve different retrieval needs
  • graph memory can improve multi-hop questions

Apply:

  • separate fleeting notes, permanent artifacts, decisions, logs, and team-member memory
  • add explicit promotion and consolidation workflows
  • support graph-aware retrieval over typed entities and Bindings

Do not copy:

  • opaque memory stores as the only source of truth
  • personalization-first memory as the center of the project model

DataHub / OpenMetadata / Unity Catalog: Metadata Governance

Learn:

  • catalogs win by combining metadata, lineage, ownership, search, quality, and governance
  • typed metadata supports automation better than prose alone
  • enterprise users expect lineage and ownership to be queryable

Apply:

  • make ownership, source, provenance, and lifecycle queryable
  • add lineage-style relations where process artifacts derive from one another
  • expose health and quality checks through pk-doctor
  • keep metadata extensible without losing validation

Do not copy:

  • data-catalog scope as the core product
  • centralized service dependency

OpenLineage: Faceted Extensibility

Learn:

  • a small core model plus extension facets can scale across domains
  • lineage events benefit from consistent naming and extensible metadata

Apply:

  • consider facet-like schema extension points for v1.0 entities
  • keep core fields stable while allowing typed extension payloads
  • use event metadata to preserve provenance and causal relationships

Do not copy:

  • run/job/dataset as processkit’s universal core model

OpenHands / SWE-agent / Copilot Agent / Aider: Coding-Agent Fit

Learn:

  • coding agents need repository maps, task context, plans, tests, and review loops
  • asynchronous agents need durable project state outside chat
  • issue-to-PR agents benefit from clear acceptance criteria

Apply:

  • make processkit the context substrate for coding agents
  • export concise task briefs with related decisions and artifacts
  • model acceptance criteria and verification as queryable fields
  • preserve branch, PR, test, and review evidence in structured logs

Do not copy:

  • code-editing agent behavior
  • benchmark chasing as the project goal

Immediate Plan Improvements

Before full implementation, amend the v1.0 plan with these additions:

  1. Add an OKF compatibility acceptance slice.
  2. Add a one-project alpha proving a small ontology subset.
  3. Define processkit’s runtime boundary explicitly.
  4. Add a “not building” list: agent runtime, vector database, data catalog, OKF-only wiki.
  5. Add provenance and lineage requirements.
  6. Add handoff / approval / guardrail mapping to Roles, Gates, and Logs.
  7. Add graph/backlink ergonomics for human and agent navigation.
  8. Add migration proof for existing v0.x entities.
  9. Add examples for LangGraph, ADK, OpenAI Agents SDK, and Microsoft Agent Framework as consumers.

Start Condition

Start once the first alpha slice is defined as a vertical proof:

  • 10-15 highest-value concepts only
  • generated schemas
  • MCP create/read/transition path
  • interface query
  • OKF export
  • migration of a small existing corpus
  • one real process cycle driven through the new model

That is enough to learn quickly while preserving the RFC’s direction.

1.2.7 - Architecture Specification

Architectural direction for processkit v1.0.

Alpha.5 status: The Rust lifecycle/Python MCP boundary below is accepted and implemented for local release verification, planning, install, update, recovery, verification, and uninstall. Online release resolution, native runtime diagnostics, and Rust-supervised MCP are planned.

System Role

processkit v1.0 is a provider-neutral process and memory substrate. It stores canonical project entities in git-backed files and exposes safe read/write behavior through MCP servers.

Agent runtimes are consumers. processkit provides context, process state, governance, and memory; it does not own the agent loop.

Product Boundary

The architecture is intentionally hybrid:

SurfaceOwnership
Rust CLIRelease verification, deterministic plans, transactional filesystem mutation, recovery, and machine request/result envelopes
Python MCPTool registration, entity validation, lifecycle transitions, routing, indexing, and process workflows
Visible contentSkills, schemas, state machines, processes, templates, packages, and harness adapters
Project stateEntities, configuration, local overrides, and audit history owned by each consuming project

There is no planned wholesale rewrite of MCP servers in Rust. A future Rust mcp command may supervise the installed Python gateway, but Python remains authoritative.

The repository boundary is equally strict:

  • context/ is processkit’s installed dogfood consumer state.
  • src/context/ is the producer-curated release deliverable.

Dogfooding is acceptance evidence. It does not make the two trees redundant, and project-owned entities must never leak into the release payload.

Canonical Model

The v1.0 ontology follows the RFC’s T/P/D/C framing:

  • T: terminology and shared fragments without their own lifecycle
  • P: persistent primitives with schema and lifecycle
  • D: discriminator variants of primitives
  • C: compositions of primitives and terminology fragments

The RFC target is 89 concepts. Alpha.3 completed the planned ontology breadth; subsequent work is intentionally focused on lifecycle usability, trust, migration, runtime diagnostics, and proven user journeys rather than further default-ontology expansion. The detailed inventory is captured in Ontology Reference .

The product release version and entity API version are independent. The v1.0 release keeps apiVersion: processkit.projectious.work/v2; changing that value requires a separate, explicit migration.

Required Internal Semantics

The canonical model must preserve:

  • stable processkit entity IDs
  • schema-backed kinds and discriminators
  • lifecycle state machines
  • typed Bindings and queryable relations
  • structured LogEntries
  • validation modes per kind
  • generated schemas
  • MCP tools as the normal write path
  • interface-aware queries such as query_by_interface

These semantics must not be collapsed into plain markdown links, free-form notes, or OKF’s permissive interchange model.

Schema Generation

The RFC’s build-time schema generation remains the preferred direction:

  • source schemas ship under context/schemas/src/
  • templates and fragments compose schemas
  • generated flat schemas are committed
  • runtime tools consume generated schemas
  • a rebuild endpoint supports full or partial regeneration

The required endpoint shape remains:

regenerate_schemas(kinds: list | None) -> {rebuilt, unchanged, errors}

The generated schema architecture, MCP helper expectations, and index update flow are specified in Tooling Architecture .

Validation

Validation is phase-gated:

  • migrated kinds use strict validation
  • migrating kinds use tolerant validation with warnings
  • validation mode must be visible through MCP
  • release gates must fail on invalid strict entities

Indexing And Query

The index must support:

  • full-text search
  • entity lookup by ID
  • relation traversal
  • interface grouping
  • query by interface
  • backlinks or cited-by navigation

Interface-aware query is a core v1.0 feature because agents should be able to ask for records, decisions, artifacts, logs, or approvals without hard-coding every concrete kind.

The implementation should keep the index as a SQLite/FTS5 accelerator over canonical files. It must store declared schema interfaces, typed relations, event subjects, and enough metadata to support query_by_interface without replacing the git-backed entity files as the source of truth.

OKF Boundary

OKF is an import/export profile, not the internal canonical model.

Exports should:

  • emit conformant OKF v0.1 bundles
  • include OKF type
  • preserve processkit_id, kind, and interfaces in extension frontmatter
  • emit normal markdown links for generic OKF consumers
  • preserve typed relation metadata for processkit-aware consumers

Imports should:

  • mark content as external knowledge
  • preserve unknown OKF frontmatter
  • avoid pretending external OKF concepts have full processkit lifecycle semantics

Runtime Integration

processkit should provide examples and integration surfaces for:

  • LangGraph
  • Google ADK
  • OpenAI Agents SDK
  • Microsoft Agent Framework
  • coding agents such as OpenHands, SWE-agent, Copilot Agent, and Aider

The stable contract should be MCP, files, schemas, and docs, not a framework-specific runtime dependency.

In alpha.5, harnesses launch the Python gateway directly through uv or an installer-managed projection. Native processkit doctor and processkit mcp commands are target interfaces, not current commands.

Testing Architecture

Manual dogfooding through a new aibox project is useful, but it is not the correctness strategy for v1.0. The core test suite must run against local fixture projects without requiring aibox and must cover schema generation, MCP contracts, state machines, index updates, migrations, and pk-doctor adversarial fixtures. aibox should be tested as an adapter after the processkit-native suite is green.

See Test Strategy .

1.2.8 - Beta Ontology Plan

Dependency-aware target for processkit v1.0 beta coverage.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Target

The beta target is 62 of the ontology’s 89 concepts, or 69.7%. This keeps the accepted goal inside the 60–70% range while leaving room to validate the model through real workflows before completing the long tail.

Coverage is counted by ontology category:

CategoryBeta target
Terminology19
Primitives22
Discriminators8
Compositions13
Total62

The alpha’s 18 generated contracts are the first dependency-complete slice of this target.

Implementation Status

The beta inventory is now frozen in src/context/schemas/src/registry.yaml and contains exactly 62 unique concepts:

  • all 19 foundational terminology concepts
  • all 22 atomic primitives
  • the 8 selected discriminators
  • the 13 selected compositions

The executable portion produces 43 generated schema contracts. The difference between 62 concepts and 43 schemas is intentional: terminology concepts are reusable schema and lifecycle mechanics rather than independently persisted entity kinds. A contract test enforces the four category counts, uniqueness, and presence of every generated output.

Selected Discriminators

The beta discriminator set is:

  • Risk
  • Belief
  • WorldFact
  • WSJFEstimate
  • Assumption
  • Scope
  • Hierarchy
  • Position

Selected Compositions

The beta composition set is:

  • TeamMember
  • DecisionRecord
  • LogEntry
  • Migration
  • ProcessSpecification
  • GoalSpecification
  • RoleSpecification
  • GateSpecification
  • SchemaSpecification
  • ScheduleSpecification
  • TestSpecification
  • ChannelSpecification
  • QueueSpecification

Selection Rules

Concepts enter the beta set when they support a real processkit workflow, unlock another selected concept, or provide interoperability value. Parent concepts count independently because their contracts are generated and tested. Variants are represented as discriminators rather than false top-level kinds.

The 27 concepts outside the beta target remain valid ontology candidates; they are deferred, not rejected.

Promotion Gates

Beta promotion requires:

  • a stable, dependency-closed list of exactly 62 implemented concepts
  • generated schemas and state machines for every selected executable concept
  • MCP create, transition, query, and relation coverage where the concept owns lifecycle behavior
  • representative migration from a v0.x corpus
  • OKF export and import conformance
  • at least one end-to-end process cycle using the beta model
  • deterministic generation, fixture, package, docs, and release-audit checks passing through the local release gate

1.2.9 - Branch Start Work Plan

Phase plan for beginning the processkit v1.0 branch.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

This plan turns the v1.0 documentation set into branch-start execution work. Phase 0 and Phase 1 are intentionally concrete; later phases are rougher and should be refined as evidence arrives.

Phase 0 - Branch Foundation

Goal: make the v1.0 branch buildable, testable, and clearly separated from v0.x maintenance.

Backlog:

  • Freeze the branch contract and backport policy in docs.
  • Add a visible branch banner or README note explaining that v1.0 is the rebuild line.
  • Decide the initial source layout for context/schemas/src/, _generated/, schema renderer tests, and fixture projects.
  • Add a minimal fixture-project layout for empty-project, alpha-project, migration-v0-project, adversarial-project, and art-project.
  • Define the command surface for schema rebuild, validation, MCP smoke, index rebuild, and docs build.
  • Establish manual local release-audit commands that do not depend on aibox or GitHub Actions.
  • Record any accepted deviations from the RFC before implementation starts.

Exit criteria:

  • The branch builds docs.
  • The planned source/test directories exist.
  • The first schema-generation and fixture-test commands are documented.

Phase 1 - Ontology And Schema Generation

Goal: turn the documented 89-concept ontology into generated schema contracts and prove deterministic generation.

Backlog:

  • Create the canonical ontology registry with class, name, description, parent, discriminator, interface, lifecycle, and migration note fields.
  • Scaffold src/context/schemas/src/ with T fragments, primitive schemas, discriminator overlays, and composition templates.
  • Implement the Jinja + YAML renderer.
  • Implement merge strategies for replace, concat, and name-merge.
  • Commit _generated/*.yaml output and golden render fixtures.
  • Add strict/tolerant validation-mode metadata per kind.
  • Add schema contract tests for valid and invalid fixtures.
  • Add the regenerate_schemas(kinds: list | None) MCP shape or a local implementation shim if the MCP server is not ready yet.

Exit criteria:

  • Full and partial schema regeneration are deterministic.
  • The generated schema tree is committed.
  • The alpha ontology subset has generated schemas and validation tests.

Phase 2 - Tooling Parity

Goal: make the generated schemas usable through MCP and local tools.

Backlog:

  • Build shared MCP helpers for schema loading, validation, state-machine checks, atomic writes, event emission, and index upsert.
  • Port alpha create/read/transition tools to generated schemas.
  • Add Python signature to draft-2020-12 JSON Schema consistency tests.
  • Expose validation mode through MCP.
  • Add state-machine fixtures for valid transitions, invalid transitions, guard failures, and terminal states.
  • Keep per-domain tool ownership while allowing gateway aggregation.
  • Define a shared remediation descriptor schema for doctor findings.
  • Validate every executable remediation against the installed gateway tool catalog and input schema.
  • Add a structured policy-exception resolver with scope, fingerprint, decision, and review metadata.

Exit criteria:

  • Alpha entity writes happen through MCP helpers.
  • Tool signatures and JSON Schemas match.
  • State-machine and validation-mode tests pass.
  • Every actionable alpha finding has an executable or formally recognized disposition.

Phase 3 - Indexing And Corpus Migration

Goal: migrate representative v0 data and prove that read-side behavior matches the new ontology.

Backlog:

  • Extend the SQLite/FTS5 index with schema-declared interfaces.
  • Implement query_by_interface for at least Record and Versioned.
  • Index typed Binding edges, provenance, ownership, hierarchy, and event subjects.
  • Build v0-to-v1 migration adapters for the alpha corpus.
  • Implement declarative migration drafting, planning, and execution with source-hash preconditions and recovery journals.
  • Support bounded operations for path moves, field updates, entity renames, reference rewrites, and archival.
  • Preserve predecessor/successor links, durable ID aliases, and unknown-field reports without silently rewriting append-only logs.
  • Measure field loss and orphan rates.
  • Add index drift detection and reindex recovery tests.

Exit criteria:

  • A representative v0 fixture corpus migrates without manual aibox steps.
  • Interface queries return mixed-kind results correctly.
  • Migration reports are deterministic and actionable.
  • Migration-backed doctor findings can be planned, executed, and rechecked cleanly through the shipped gateway.

Phase 4 - Skills, Agents, And Runtime Surfaces

Goal: make skills and agent-facing instructions use the v1.0 model.

Backlog:

  • Update skill metadata and trigger guidance to v1.0 ontology language.
  • Remove v0 primitive assumptions from write-side skill instructions.
  • Add canned agent scenarios covering work, decisions, risks, gates, roles, skills, artifacts, and migrations.
  • Update gateway, per-domain MCP, and harness compatibility docs.
  • Add malformed-output measurements for scenario runs.
  • Keep aibox as an adapter path, not a core test dependency.

Exit criteria:

  • Canned scenarios pass with malformed output below the acceptance threshold.
  • Skills use MCP write paths for canonical entities.
  • Runtime docs describe gateway and per-domain modes consistently.

Phase 5 - First-ART Validation

Goal: prove the rebuild with a production-shaped ART cycle.

Backlog:

  • Model Portfolio, ValueStream, ART, Team, Scope, RoleSlot, and TeamMember structures.
  • Run PI planning with objectives, risks, dependencies, capacity, and committed WorkItems.
  • Execute the cycle through MCP transitions and gates.
  • Capture demo evidence, Measurements, Outcomes, Decisions, and inspect-and-adapt follow-up.
  • Record friction, interpretation drift, missing concepts, and missing tool affordances.
  • Review the first-ART evidence before rc promotion.

Exit criteria:

  • The first-ART pilot completes planning, execution, demo, and inspect-and-adapt.
  • pk-doctor reports no blocking errors on the pilot corpus.
  • Human reviewers can inspect the same state through files and docs.

Phase 6 - Cutover Preparation

Goal: prepare v1.0.0 without calendar-driven release pressure.

Backlog:

  • Verify all strict gate criteria through A5.
  • Produce reproducible release artifacts from a clean checkout.
  • Publish migration and downstream adoption guidance.
  • Finalize v0.x maintenance and LTS policy.
  • Record the cutover decision.
  • Prepare merge strategy from v1.0 to main.

Exit criteria:

  • No known blocker remains for final v1.0.0 cutover.
  • The cutover decision is recorded.
  • Docs and release artifacts are published and reproducible.

Phase 7 - Post-cutover Stabilisation

Goal: stabilize the v1 line after release.

Backlog:

  • Observe the minimum 14-day stabilization window.
  • Track and triage critical regressions.
  • Exercise downstream migration support.
  • Verify release integrity, provenance, docs publication, and package installation.
  • Run index rebuild, drift recovery, MCP smoke, sensitive-data, and adversarial pk-doctor fixtures.
  • Validate one v0.x LTS slow-adopter scenario if needed.

Exit criteria:

  • Stabilization findings are closed, tracked, or accepted.
  • Release integrity and adversarial fixture checks pass.
  • v1.x becomes the normal development line after cutover.

1.2.10 - Landscape Note

Adjacent projects and concepts processkit should learn from.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Positioning

processkit v1.0 is not trying to replace agent runtimes, memory databases, coding agents, or data catalogs. It should be the process substrate those systems can use.

Its strongest position is:

provider-neutral process memory and governance for agentic software projects.

Adjacent Areas

OKF

OKF validates markdown plus YAML frontmatter as an agent-readable exchange format. processkit should support OKF import/export, generated indexes, and permissive boundary consumption.

processkit should not copy OKF’s path IDs, untyped links, or prose-only logs as canonical semantics.

Local Markdown Memory

Projects such as Basic Memory and LLM wiki patterns show that agents and humans benefit from simple, local, readable markdown knowledge.

processkit should learn from their ergonomics: backlinks, readable files, simple search, and low-friction MCP access.

processkit should keep stronger lifecycle and relation semantics.

Agent Runtimes

LangGraph , Google ADK , OpenAI Agents SDK , and Microsoft Agent Framework provide orchestration, tools, handoffs, sessions, tracing, and human-in-the-loop behavior.

processkit should integrate with them through stable MCP tools and runtime-neutral examples. It should not own the agent loop.

Memory Layers

Letta and Mem0 show the importance of long-term memory, retrieval, summarization, and consolidation.

processkit should distinguish fleeting notes, permanent artifacts, decisions, logs, and team-member memory. Promotion and consolidation should be explicit process actions.

Metadata Governance

DataHub , OpenMetadata , Unity Catalog , and OpenLineage show the value of typed metadata, lineage, ownership, governance, and quality checks.

processkit should make ownership, provenance, lineage, and quality queryable without turning into a data catalog.

Coding Agents

OpenHands , SWE-agent , GitHub Copilot Agent , and Aider need durable task context, acceptance criteria, related decisions, test evidence, and review history.

processkit should make those inputs easy to retrieve and those outputs easy to record.

Concepts To Adopt

  • boundary compatibility with OKF
  • local-first markdown ergonomics
  • explicit handoffs and approvals
  • guardrails as auditable Gates
  • traces and summaries as structured evidence
  • memory promotion workflows
  • typed provenance and lineage
  • acceptance criteria as queryable fields
  • runtime-neutral integration examples

Concepts To Avoid

  • replacing agent runtimes
  • replacing data catalogs
  • treating vector memory as the source of truth
  • reducing typed relations to prose links
  • making path names the canonical identity model

1.2.11 - Ontology Reference

T/P/D/C ontology baseline for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

processkit-v1.0-rfc-draft.md is the leading document for the v1.0 ontology. When older analysis conflicts with this page, the RFC and this page win.

T/P/D/C Classes

The RFC names four implementation classes. If a note says TCDP, read it as the same four classes, with the RFC’s canonical order written as T/P/D/C.

ClassMeaningDescription
TTerminology / foundational fragmentA concept, slot, or meta-mechanic that has no independent entity lifecycle. T concepts are reused in schemas, state machines, constraints, and generated fragments.
PPrimitiveAn atomic persistent entity kind with its own schema, lifecycle, ID policy, validation contract, and storage path. P concepts can be composed into C concepts.
DDiscriminatorA typed variant of a parent primitive, usually represented by kind: or an equivalent closed enum. D concepts inherit the parent schema and lifecycle.
CCompositionA named kind assembled from primitives plus T fragments. C concepts can have their own lifecycle, but their schema is built from composed parts.

Counts

The v1.0 target is 89 ontology concepts.

ClassCountRule
T19Reusable vocabulary and schema mechanics; no independent persistence.
P22Atomic persisted entity families with schemas and state machines.
D24Parent-primitive variants with inherited lifecycle.
C24Generated composed kinds assembled from P and T parts.
Total89The RFC count is the release target.

Full Working Inventory

This inventory makes the RFC’s count concrete for implementation planning. It preserves the RFC settlements: Location and Skill are primitives, Service and TeamMember are compositions, Position is a role-slot Binding discriminator, and Hierarchy is a named parent-child Binding discriminator.

T: Foundational Concepts

ConceptDescription
StateA named condition within a lifecycle, such as open, accepted, done, or archived.
TransitionA valid movement between states, including required actors, guards, and event emission.
StateMachineThe complete lifecycle graph for a kind, discriminator, or composition.
LifecycleThe operational meaning of a state machine, including terminal states and audit expectations.
ConstraintA rule that restricts valid data, links, transitions, or composition.
GuardA precondition checked before a transition, command, or write-side tool action runs.
IdentityThe stable identity contract for an entity, including ID format, aliases, and lookup rules.
VersioningThe version contract for schemas, entities, generated files, and release artifacts.
OwnershipThe accountable actor, role, or team responsible for an entity or process surface.
ImmutabilityThe rule that some evidence, event, hash, or historical decision must not be rewritten.
SchemaThe structured validation contract for an entity or fragment.
CompositionThe build-time assembly of fragments and primitives into a generated runtime schema.
InheritanceThe explicit reuse of a parent schema or fragment by a child composition.
UniquenessA rule that one value, relation, or role-slot can exist only once in a defined scope.
InterfaceA shared query surface declared by schemas, such as Record or Versioned.
ValidationModeThe per-kind mode that decides whether validation is strict or tolerant during migration.
ProvenanceThe source and transformation trail for content, decisions, generated schemas, and migrations.
VisibilityThe audience and disclosure boundary for an entity or generated export.
CardinalityThe allowed count for fields, relations, owners, children, or bindings.

P: Atomic Primitives

PrimitiveDescription
ActorA human, agent, service account, organization, or other participant that can own, perform, or be assigned work.
ArtifactA durable evidence object such as a design, report, release note, analysis, fixture, or generated output.
BindingA typed relation between entities, actors, roles, containers, or claims.
CapabilityA durable ability or capacity that an actor, system, role, or service can provide.
ChannelA communication or handoff surface, including chat, queue-like inboxes, issue streams, and runtime buses.
CommandAn intended action issued by a human, agent, hook, or process.
ContainerA structural grouping boundary such as a portfolio, ART, team, project, scope, or repository area.
EventA recorded occurrence in the system, including transitions, tool calls, releases, and external signals.
GateA decision or policy checkpoint that must pass before a process can continue.
LocationA spatial, site, coordinate, logical-region, or timezone anchor.
NoteCaptured knowledge that may be fleeting, promoted, linked, or archived.
OutcomeA result, effect, delivery state, metric result, or observed consequence.
PolicyA governing rule, standard, permission, or organizational constraint.
PropositionA claim about the world, work, risk, belief, forecast, or estimate.
QueueAn ordered or claimable work intake, handoff, or processing surface.
RecordA durable process record family for decisions, logs, measurements, approvals, and historical evidence.
RecurrenceA repeating schedule, cadence, ritual, or trigger rule.
ResourceA consumed or governed asset, including budget, compute, environment, credential, material, or tool capacity.
RoleA reusable responsibility bundle that can be assigned to actors or team members.
SkillA first-class processkit capability package with its own schema, lifecycle, triggers, and tooling.
SpecificationA formal description of a schema, process, role, gate, service, goal, schedule, channel, queue, or test.
WorkItemA unit of requested or planned work with acceptance criteria, state, and evidence.

D: Discriminator Variants

DiscriminatorParentDescription
RiskPropositionA claim about uncertainty, impact, probability, mitigation, and ownership.
BeliefPropositionA held assumption or judgment that may need evidence or revision.
WorldFactPropositionA factual claim treated as externally true until contradicted.
WSJFEstimatePropositionA weighted shortest-job-first estimate or related prioritization claim.
AssumptionPropositionA premise accepted temporarily to enable planning or execution.
GeographicRegionLocationA country, region, market, jurisdiction, or other broad geographic area.
SiteLocationA physical office, facility, datacenter, or operating site.
CoordinateLocationA precise coordinate or geospatial point.
LogicalRegionLocationA logical deployment, business, data, or governance region.
TimezoneLocationA timezone anchor for schedules, teams, or operational windows.
DispositionCapabilityA tendency, affordance, or BFO-style disposition exposed as capability vocabulary.
PortfolioContainerA strategic investment or governance container above programs and ARTs.
ValueStreamContainerA flow of value across products, teams, systems, and delivery steps.
ARTContainerAn Agile Release Train or equivalent multi-team delivery container.
TeamContainerA small delivery or operating group.
ProjectContainerA bounded initiative, repository, product effort, or implementation scope.
ScopeContainerA bounded area of authority, work, release, or applicability.
HierarchyBindingA named parent-child relation used as the canonical hierarchy anchor.
PositionBindingA role-slot relation with nullable subject until a TeamMember or Actor fills it.
ProvenanceLinkBindingA relation from a derived entity to its source, import, generator, or evidence.
CorrelationBindingA relation stating that two entities refer to related or equivalent concerns.
DependencyBindingA relation stating that one entity depends on another.
OwnershipLinkBindingA relation assigning accountability or stewardship.
RelatedToBindingA low-specificity relation used only when no stronger binding type applies.

C: Compositions

CompositionDescription
TeamMemberC(Actor + calendar + capabilities + persona + skill-list + journal).
DecisionRecordC(Record + Proposition + alternatives + consequences + lifecycle).
LogEntryC(Record + Event + immutable timestamp + actor + subject).
MeasurementC(Record + metric definition + observed value + provenance).
ArchiveC(Record + retention policy + source hash + location).
ProcessSpecificationC(Specification + states + transitions + guards + commands).
GoalSpecificationC(Specification + desired outcomes + measures + owners).
ServiceS(Capability)/C: a provided capability with interface, owner, SLOs, and resources.
RoleSpecificationC(Specification + responsibilities + authority + expected skills).
GateSpecificationC(Specification + policy + required evidence + pass/fail semantics).
SchemaSpecificationC(Specification + YAML schema + interfaces + validation mode).
ScheduleSpecificationC(Specification + recurrence + timezone + calendar constraints).
TestSpecificationC(Specification + fixture + expected result + acceptance signal).
ChannelSpecificationC(Specification + channel protocol + participants + retention rules).
QueueSpecificationC(Specification + queue discipline + claim rules + retry policy).
WorkItemTemplateC(WorkItem + reusable acceptance criteria + default bindings).
MigrationC(Command + Event + source schema + target schema + validation evidence).
ScopePlanC(Container + WorkItem set + owners + acceptance gate).
RoadmapC(Container + GoalSpecification + sequencing + milestones).
ProgramIncrementC(Container + cadence + objectives + risks + demo evidence).
IterationC(Container + cadence + committed work + review evidence).
ReleaseC(Container + Gate + Artifact bundle + provenance + versioning).
DiscussionC(Record + Channel + Proposition thread + outcome capture).
EvaluationRunC(Command + TestSpecification + Event + Measurement + Artifact evidence).

1.2.12 - Product Specification

Product definition for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Purpose

processkit v1.0 provides a durable process substrate for agentic software projects. It gives humans and AI agents a shared project memory with typed work, decisions, discussions, artifacts, roles, skills, gates, bindings, and event history.

The product is not an agent runtime. It is the process and memory layer that agent runtimes, coding agents, and human maintainers can use to coordinate work safely.

Primary Users

  • Project owners who want inspectable, durable AI-assisted project memory.
  • Maintainers who need decisions, work, artifacts, and migrations to be traceable.
  • AI coding agents that need reliable task context and write-safe MCP tools.
  • Agent runtime integrators that need a provider-neutral process layer.

Problems To Solve

  • Agent sessions lose project context across turns and tools.
  • Important decisions and rationale are buried in chat.
  • Work state, review state, and acceptance criteria are not consistently queryable.
  • Multi-agent teams need roles, skills, handoffs, gates, and logs.
  • Markdown knowledge is readable but often lacks lifecycle semantics.
  • Service-owned metadata systems are less portable than git-backed files.

Product Goals

  • Keep project memory file-backed, git-native, and human-inspectable.
  • Make process writes happen through validated MCP tools.
  • Support typed entities, state machines, and relation queries.
  • Implement the RFC’s 89-concept T/P/D/C ontology target.
  • Preserve auditability through structured event logs.
  • Support provider-neutral roles, team members, model routing, and skills.
  • Export and ingest OKF bundles without weakening canonical semantics.
  • Integrate with external agent runtimes instead of replacing them.

Non-Goals

  • Build a general agent runtime.
  • Build a vector database.
  • Build a general data catalog.
  • Make OKF the canonical internal model.
  • Replace GitHub, issue trackers, CI, or code review systems.
  • Optimize for synthetic coding-agent benchmarks as the product goal.

Core Workflows

  1. Capture work as typed WorkItems with acceptance criteria.
  2. Record decisions with context, alternatives, rationale, and consequences.
  3. Attach artifacts and supporting analysis to work and decisions.
  4. Route tasks to roles, team members, skills, and model classes.
  5. Apply gates for approval, policy, evaluation, and release checks.
  6. Query by interface rather than forcing agents to guess concrete entity kinds.
  7. Preserve process evidence in structured LogEntries.
  8. Export selected knowledge as OKF for open exchange.

Success Criteria

  • A maintainer can understand project state from files and docs without replaying chat history.
  • An agent can create, transition, and query process entities through MCP tools without hand-editing canonical context files.
  • A real project cycle can run through the v1.0 alpha model.
  • Automated fixture tests cover schema generation, MCP contracts, indexing, migrations, and pk-doctor before manual dogfood begins.
  • OKF export produces a conformant bundle for public consumption.
  • Existing v0.x evidence can migrate or be explicitly preserved.

1.2.13 - Test Strategy

Automated testing strategy for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

The current exploratory strategy is to install processkit into a new aibox project and try workflows manually. That remains useful as a human dogfood check, but it is not enough for v1.0. It is not automated, it makes aibox a hard dependency, and it cannot prove release-gate criteria repeatably.

Test Goals

The v1.0 test strategy must prove:

  • schema generation is deterministic
  • generated schemas validate real and adversarial fixtures correctly
  • MCP tools match their Python signatures and JSON Schemas
  • writes enforce state machines, guards, validation modes, and event logs
  • index reads match canonical files after creates, transitions, and migrations
  • query_by_interface returns complete mixed-kind results
  • migration tools preserve data within the RFC gate limits
  • pk-doctor catches deliberately invalid entities and every actionable finding has an executable or formally recognized disposition
  • docs and examples remain buildable
  • downstream integrations can consume the published contracts without becoming release prerequisites

Automated Layers

LayerPurpose
Schema unit testsRender Jinja + YAML fragments, compare _generated output to golden files, and verify merge strategies.
Schema contract testsValidate generated draft-2020-12 schemas against valid and invalid entity fixtures.
MCP contract testsCheck every tool signature against its JSON Schema and run typed request/response fixtures.
State-machine testsExercise valid and invalid transitions, guard failures, terminal states, and emitted events.
Index testsCreate and mutate fixture entities, then assert search, relation traversal, backlinks, and interface grouping.
Migration testsPlan and execute v0.x fixture migrations; assert field-loss, orphan, source-hash, alias-resolution, and append-only gates.
pk-doctor adversarial testsRequire every expected finding, validate remediation tools against the gateway catalog, execute remediations, and require a clean recheck.
Package smoke testsInstall processkit from the local tree or release tarball into a temporary fixture project without aibox.
Docs testsBuild Hugo/Docsy locally and verify generated links, private-content exclusion, and GitHub Pages output.
Downstream adapter testsConsumers may run their own integration suites against a signed processkit release; their results are informative and non-blocking for processkit.

Fixture Projects

Use local fixture projects under the test tree:

  • empty-project: no context, used for first install and schema generation
  • alpha-project: small valid corpus covering the alpha ontology slice
  • migration-v0-project: representative v0.x corpus for migration adapters
  • adversarial-project: invalid frontmatter, bad transitions, broken links, malformed bindings, and inconsistent index state
  • remediation-project: actionable doctor findings with safe fixes, archives, migrations, policy exceptions, and external blockers
  • art-project: a compact first-ART scenario that exercises planning, execution, demo, inspect-and-adapt, decisions, risks, and evidence

These fixtures run through plain local repository commands. aibox can consume the same fixtures in an adapter suite, but the fixtures must not require aibox or GitHub Actions to exist.

Alpha Proof

Alpha automation should pass before any alpha tag:

  • full schema rebuild from shipped context/schemas/src/
  • committed _generated tree matches the renderer output
  • create/read/transition MCP paths work for the alpha slice
  • query_by_interface works for at least Record
  • strict and tolerant validation modes are observable
  • the alpha fixture migrates from v0.x or maps explicitly
  • actionable alpha findings close through the shipped gateway or resolve to a recognized non-executable disposition
  • docs build locally

Manual dogfood remains useful after this automated baseline, not instead of it.

Final Release Proof

The final gate should include:

  • all strict 81-gate criteria green
  • first-ART validation completed with recorded evidence
  • all MCP tools schema-checked
  • pk-doctor adversarial and remediation fixtures green after executing their declared closure paths
  • package smoke tests green from release artifact
  • signed archive and native installer verify and install without network access or an external project manager
  • no known index/schema/migration blocker

This keeps the RFC’s first-ART proof while removing the current hard dependency on manual downstream experimentation.

1.2.14 - Tooling Architecture

MCP, schema, and index architecture for processkit v1.0.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

The v1.0 tooling architecture follows the RFC: schemas are generated from Jinja + YAML sources, writes flow through MCP tools, and indexes are extended rather than replaced.

MCP Server Shape

MCP is the stable runtime contract for agents and harnesses. Files remain human-inspectable, but canonical mutations happen through tools.

The v1.0 server surface should include:

  • a processkit gateway that exposes the common read/write surface
  • per-domain management tools for work, decisions, records, gates, discussions, roles, bindings, migrations, and skills
  • an index-management surface for reads, search, relation traversal, and interface queries
  • a schema-management surface with regenerate_schemas
  • a doctor/audit surface for validation, drift, and release readiness

The gateway can aggregate tools for harness convenience, but tool ownership should remain domain-specific so validation and lifecycle rules stay close to the schema they enforce.

MCP Helper Library

Every MCP server should use shared helpers rather than reimplementing process rules. The helper layer should provide:

  • ID allocation and collision checks
  • generated schema loading
  • draft-2020-12 JSON Schema validation
  • state-machine loading and transition validation
  • strict/tolerant validation-mode lookup
  • frontmatter and body parsing/serialization
  • atomic file writes under the canonical storage layout
  • event-log emission for mutating actions
  • index upsert/delete calls after successful writes
  • typed error responses with actionable remediation
  • Python type-signature to JSON Schema consistency checks
  • golden fixture helpers for MCP contract tests

The RFC requires MCP tools to have valid Python type signatures and matching draft-2020-12 JSON Schemas before release candidate.

Doctor Remediation Contract

Every pk-doctor finding with action_required: true must have a typed disposition. Supported dispositions are:

  • safe_fix: a bounded, idempotent repair
  • migration_needed: a planned data or identity transformation
  • archive_needed: a lifecycle-preserving archive operation
  • policy_decision_needed: a structured, reviewable exception
  • external_dependency: a named downstream or infrastructure blocker

Executable dispositions must name a gateway tool, provide schema-valid arguments, and declare whether confirmation, data-loss approval, preflight, or dry-run support is required. Release validation must introspect the gateway catalog and fail when a declared tool is absent or its input schema is incompatible with the finding.

Prose guidance alone is not an actionable remediation. When processkit cannot execute or formally recognize the required disposition, the finding must be informational and link to tracked implementation work instead of claiming that the derived project can resolve it.

Policy Exceptions

A policy exception is structured data, not an arbitrary DecisionRecord. It must identify the check and finding fingerprint, affected scope, rationale, approver or accepted decision, and an expiry or review condition. Doctor resolves exceptions through a shared policy service and reports stale, over-broad, or unmatched exceptions. The underlying DecisionRecord remains the durable rationale, while the exception supplies the machine-readable suppression contract.

Schema Generation

Shipped schema sources live under src/context/schemas/src/, which becomes context/schemas/src/ in an installed project. Runtime tools consume a committed context/schemas/_generated/*.yaml tree. Keeping both paths inside src/ ensures that derived projects can regenerate schemas without fetching repository-only build inputs.

Composition rules:

  • extends: parent.yaml declares composition inheritance
  • {% include %} includes T fragments into templates
  • __merge: replace|concat|name-merge declares per-field merge strategy
  • generated schemas declare interfaces such as Record or Versioned
  • generated files are committed so agents and reviewers can diff runtime contracts directly

The required MCP endpoint is:

regenerate_schemas(kinds: list | None) -> {rebuilt, unchanged, errors}

kinds=None performs a full rebuild. A non-empty list rebuilds only the requested generated schemas and their dependencies. aibox apply may trigger full rebuilds by default, but schema generation must not depend on aibox; it must be runnable through processkit’s local test commands.

Validation Modes

Validation is phase-gated:

  • migrated kinds validate strictly
  • kinds still being migrated validate tolerantly and emit warnings
  • validation mode is queryable through MCP per kind
  • release gates fail on invalid strict entities

This lets alpha/beta users test incomplete migrations without allowing known-invalid final entities to pass unnoticed.

Indexing Database

The RFC keeps the existing SQLite/FTS5 direction and extends it with interface-level grouping. The index is an accelerator and query surface, not the source of truth. Git-backed entity files remain canonical.

The minimum index stores:

  • entity identity, kind, discriminator, state, title, timestamps, and path
  • declared interfaces from generated schemas
  • frontmatter fields needed for common filters
  • typed relation edges from Bindings and inline references
  • event subjects and actors for timeline queries
  • full-text rows for titles, bodies, specs, and selected metadata
  • validation and generation metadata for drift checks

The required read patterns are:

  • get_entity(id)
  • search by text
  • query by kind, state, owner, and container
  • traverse relation edges
  • backlinks or cited-by navigation
  • query_by_interface(interface, filters...)

query_by_interface(Record, ...) is load-bearing because it lets agents retrieve DecisionRecords, LogEntries, measurements, approvals, and other record-like entities without guessing every concrete kind.

Index Update Flow

Writes should follow one transaction-like path:

  1. MCP tool receives a typed request.
  2. The tool loads the generated schema and current validation mode.
  3. The helper validates input and transition guards.
  4. The entity file is written atomically.
  5. Required LogEntries or Events are emitted.
  6. The changed entity, relations, and events are upserted into SQLite.
  7. The response returns the entity ID, path, state, validation mode, and index update status.

If index update fails after a file write, the response must surface drift and pk-doctor must detect it. A separate reindex tool should rebuild SQLite from files for recovery, local fixtures, and release checks.

Declarative Migration Execution

Migration management must support a processkit-native lifecycle:

  1. draft_migration records intent, source and target versions, operations, and expected source hashes.
  2. plan_migration validates schemas, references, permissions, collisions, and append-only constraints without writing.
  3. execute_migration applies the approved plan through the shared atomic write, event, and index-update path.
  4. A failed execution aborts before commit or leaves a recovery journal that can be resumed or rolled back deterministically.

The initial declarative operation vocabulary should cover move_path, update_field, rename_entity, rewrite_reference, and archive_payload. Migration files must not embed arbitrary executable scripts. Each operation declares preconditions and expected hashes so a plan cannot silently apply to changed input.

Stable Identity And History

Identity changes should preserve historical truth without rewriting append-only LogEntries. The preferred model is a canonical replacement plus durable predecessor/successor relations and an ID alias index. Reads through an old ID resolve to the canonical entity while returning the alias path used for resolution.

History rewriting is exceptional. It requires an explicit migration policy, original-content hashes, archived source payloads, and an auditable event. A filename-style warning alone never justifies rewriting event history.

1.2.15 - v0 Reconciliation

Controlled carry-over from the supported v0 line into v1.

Alpha.4 documentation review: This page records design or historical planning. For shipped behavior and current gaps, use the issue #135 implementation review .

Baseline

The v1 line forked from v0.27.1. Reconciliation therefore compares the current v1 work against the latest supported v0 release, currently v0.28.3, rather than copying the v0 tree wholesale.

The rule is:

  • carry fixes that remain valid under the v1 ontology
  • adapt lifecycle and storage behavior to generated v1 contracts
  • regenerate catalogs, schemas, and manifests from v1 sources
  • defer unrelated v0 features with an explicit disposition
  • never overwrite v1 schema sources with flat v0 schemas

Current Matrix

v0 surfacev1 dispositionAlpha status
Refreshable GitHub token-file authenticationCarry unchanged security semanticsImplemented and tested
Migration draftingAdapt to v1 Migration schema and automatic apply modeImplemented and tested
Historical migration filename repairCarry with append-only audit bridgeImplemented and tested
Scope lifecycleAdapt storage to Container(kind=scope)Implemented and tested
TeamMember role assignmentAdapt through the Actor interfaceImplemented and tested
Immutable release-manifest preflightCarry --check; builds must not mutate tagsImplemented
git-branching skillCarry after v1 metadata reviewDeferred after alpha
project-reconciliation skillCarry after v1 entity-name reviewDeferred after alpha
repository-portfolio-review skillCarry after v1 entity-name reviewDeferred after alpha
v0 doctor fixesRe-evaluate per finding against v1 storageOngoing
v0 flat schemas and generated catalogsNever copy; regenerate from v1 sourcesEnforced

Verification

The server smoke suite exercises the v1-native replacements. The package smoke suite then extracts only the release tree and repeats the workflow so repository imports cannot conceal a missing carry-over.

Before each prerelease:

  1. compare the selected v0 release with v1.x-dev
  2. update this matrix
  3. run schema, server, package, docs, doctor, and release-audit checks
  4. record any intentional deferral with an owner or milestone

2 - Getting Started

Install a verified processkit release and use its MCP tools.

Choose the path that matches your release line:

  • v1 alpha: use the native CLI and signed local-release envelope. Start with the v1 alpha tutorial .
  • v0 stable: retain the supported v0 installer or managed aibox workflow. See Installing for the compatibility path.

What v1 installs

A v1 distribution contains visible, reviewable project content:

  • context/skills/ and the Python MCP servers shipped with those skills;
  • context/schemas/, generated contracts, and state machines;
  • .processkit/ profiles, installer contracts, and release metadata;
  • harness projections owned at individual managed keys; and
  • AGENTS.md, the provider-neutral agent entry point.

The installer records managed ownership in .processkit/state.json. New project entities and local overrides remain owned by the consuming project.

Runtime requirements

  • Linux ARM64 GNU for the published alpha.5 native executable.
  • Python 3.10 or newer and uv for the Python MCP runtime.
  • Git and an MCP-capable harness for the normal agent workflow.
  • curl, tar, and sha256sum for the tutorial.

Linux x86_64 and macOS native assets, a bootstrap installer, online release resolution, and native processkit doctor/processkit mcp commands are future work.

Learning path

  1. Complete the v1 alpha tutorial .
  2. Create your first entity through MCP.
  3. Review installer guarantees .
  4. Choose a package profile .
  5. Read the v1 implementation status .

2.1 - Installing

v1 alpha

v1.0.0-alpha.5 is installed with the native Rust lifecycle CLI from an explicitly downloaded, signed release. The alpha does not yet have an online version resolver or one-command bootstrap installer.

Use the complete v1 alpha installation and first-project tutorial . It verifies the signed envelope, checks both artifact digests, previews the plan, installs a selected profile, verifies managed state, and connects the Python MCP gateway.

The current command shape is:

processkit plan \
  --root /path/to/project \
  --distribution /path/to/processkit-v1.0.0-alpha.5 \
  --profile managed \
  --harness codex

processkit install \
  --root /path/to/project \
  --distribution /path/to/processkit-v1.0.0-alpha.5 \
  --profile managed \
  --harness codex \
  --yes

Do not copy the v1 payload by hand. The CLI supplies transaction, ownership, recovery, and conservative uninstall evidence that manual copying cannot.

Stable v0 and managed aibox projects

Existing v0 projects remain supported and should stay pinned to their current stable version until the v1 migration path is complete. aibox remains an optional downstream installer and integrator; it is not required to build, test, or run processkit.

See v0 compatibility and aibox integration before changing an existing project.

After installation

Python and uv remain runtime prerequisites for MCP:

uv run \
  context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport stdio

Use MCP tools for entity writes. They validate schemas and transitions and produce the required audit events.

2.2 - Install and Use the v1 Alpha

Verify, install, and use processkit v1.0.0-alpha.5 step by step.

This tutorial installs the exact v1.0.0-alpha.5 release into a new project. Linux and macOS on x86_64 and arm64 are supported.

1. Check prerequisites

uname -m
python3 --version
uv --version
git --version
jq --version

Python 3.10 or newer, uv, Git, curl, tar, a SHA-256 utility, openssl, and jq are required.

2. Download the exact release

mkdir -p "$PWD/.processkit-download/v1.0.0-alpha.5"
cd "$PWD/.processkit-download/v1.0.0-alpha.5"

release_url="https://github.com/projectious-work/processkit/releases/download/v1.0.0-alpha.5"
for asset in \
  processkit-v1.0.0-alpha.5.tar.gz \
  processkit-v1.0.0-alpha.5.tar.gz.sha256 \
  processkit-v1.0.0-alpha.5.release.json \
  processkit-v1.0.0-alpha.5.release.sig \
  processkit-v1.0.0-alpha.5-public.pem
do
  curl -fL "$release_url/$asset" -o "$asset"
done

The release is exact-pinned. Do not replace the tag with latest.

3. Verify checksums

sha256sum -c processkit-v1.0.0-alpha.5.tar.gz.sha256

The command must report OK.

4. Install the CLI locally

curl -fLO \
  https://raw.githubusercontent.com/projectious-work/processkit/v1.0.0-alpha.5/scripts/install-processkit.sh
chmod +x install-processkit.sh
./install-processkit.sh v1.0.0-alpha.5
export PATH="$HOME/.local/bin:$PATH"
processkit --version

No root access is required. Add $HOME/.local/bin to your shell PATH if it is not already present.

5. Verify the signed release

mkdir -p "$PWD/trust"
key_id="d35516ccd7be9efad6579c5f6c2ab8ba1a59f18d563f339e62e1cef9a5f9a1eb"
cp processkit-v1.0.0-alpha.5-public.pem \
  "$PWD/trust/v1.pub.pem"

jq -n --arg key_id "$key_id" '{
  apiVersion: "processkit.projectious.work/local-trust/v1alpha1",
  kind: "TrustStore",
  keys: [{
    keyId: $key_id,
    algorithm: "Ed25519",
    publicKeyFile: "v1.pub.pem",
    status: "active"
  }]
}' >"$PWD/trust/trust-store.json"

processkit verify-release \
  --envelope "$PWD/processkit-v1.0.0-alpha.5.release.json" \
  --signature "$PWD/processkit-v1.0.0-alpha.5.release.sig" \
  --trust-store "$PWD/trust/trust-store.json"

For organizational use, obtain the public key through an independently trusted channel. Publishing a key beside an artifact makes verification reproducible but does not by itself establish publisher identity.

6. Extract the distribution

tar -xzf processkit-v1.0.0-alpha.5.tar.gz
distribution="$PWD/processkit-v1.0.0-alpha.5"

The extracted directory is the required local --distribution input.

7. Create a project and review the plan

project_root="$PWD/../../../processkit-alpha-project"
mkdir -p "$project_root"
git -C "$project_root" init

processkit plan \
  --root "$project_root" \
  --distribution "$distribution" \
  --profile managed \
  --harness codex \
  --format human

plan is non-mutating. Review the selected profile, managed paths, and harness projection before proceeding. Replace codex with claude when that is your harness.

8. Install and verify

processkit install \
  --root "$project_root" \
  --distribution "$distribution" \
  --profile managed \
  --harness codex \
  --yes

processkit verify --root "$project_root"
git -C "$project_root" status --short

The installer owns only declared managed paths and harness keys. It records ownership in .processkit/state.json; unrelated harness configuration and project files are preserved.

9. Start using MCP

Restart the selected harness so it reads the installed projection. If you need a direct development fallback, run the Python gateway from the project:

cd "$project_root"
uv run \
  context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport stdio

In the harness, ask:

Use processkit to create a medium-priority task WorkItem titled “Evaluate processkit v1 alpha”, then read it back.

Continue with Your First Entity for transitions, decisions, relationships, and queries.

10. Update, recover, or uninstall

Preview a new exact distribution before updating:

processkit plan \
  --root "$project_root" \
  --distribution /path/to/new/exact/distribution \
  --profile managed \
  --harness codex

processkit update \
  --root "$project_root" \
  --distribution /path/to/new/exact/distribution \
  --yes

After an interrupted mutation:

processkit recover --root "$project_root" --yes

To remove only unchanged, provably managed content:

processkit uninstall --root "$project_root" --yes

Changed and user-owned files are preserved and reported.

Alpha.4 limitations

  • Only Linux ARM64 GNU has a published native executable.
  • Release acquisition and trust-root distribution are manual.
  • Human commands require a local distribution directory.
  • Native doctor, migrate, package, harness, and mcp command groups are not implemented.
  • Python and uv remain required for MCP.
  • v0-to-v1 migration is evidence and compatibility inspection only; do not migrate an existing v0 project in place.

Track the exact status in the issue #135 implementation review .

2.3 - Your First Entity

Create the first WorkItem through processkit’s MCP tools. Do not hand-edit canonical entity files: the management tool validates the schema, applies the storage policy, and writes the audit event as one governed operation.

Prerequisites

  • Complete the v1 alpha tutorial .
  • Start a new harness session after the installer writes its managed MCP projection.
  • Confirm the processkit-gateway tools are visible.

Create a WorkItem

Ask your MCP-capable agent:

Create a medium-priority task WorkItem titled “Evaluate processkit v1 alpha” with acceptance criteria to verify installation, record one decision, and test an update plan.

The agent should route the request and call create_workitem. A successful response includes an ID and canonical path, for example:

BACK-curious-quail
context/workitems/2026/07/BACK-curious-quail.md

Read and transition it

Ask:

Read BACK-curious-quail through processkit, then transition it from backlog to in-progress.

The transition tool checks the WorkItem state machine and records its event. An invalid transition is rejected rather than silently changing the file.

Record and query a decision

Ask:

Record the accepted decision that this project will evaluate v1.0.0-alpha.5 in an isolated branch, link it to BACK-curious-quail, and query both entities back.

This exercises the core v1 user journey: governed write, relationship, audit event, and indexed read over visible project files.

Inspect the result

The files remain readable in Git:

git status --short
processkit verify --root .

processkit verify checks installer-managed content. Domain MCP tools and pk-doctor check project entities; a native processkit doctor command is planned but is not part of alpha.5.

Next

3 - Primitives

The project-memory entity model — the shape of a WorkItem, a DecisionRecord, an Artifact, and the rest of the durable record.

processkit provides a compact set of process primitives as universal building blocks. The v2 direction keeps durable project facts in the entity layer and moves workflow definitions, schedules, runtime model data, and lifecycle implementation details to narrower surfaces.

In the v1 release line, apiVersion remains processkit.projectious.work/v2. The product release version and entity API version are independent. Create and transition canonical entities through MCP management tools rather than hand-editing them.

Shipped v2 entity schemas

PrimitivePurposePrefix
WorkItemUnit of work (task, story, bug, epic, spike, chore)BACK
LogEntryImmutable record of something that happenedLOG
DecisionRecordA choice with rationale (ADR pattern)DEC
MigrationPending/in-progress/applied transition between upstream versionsMIG
ArtifactCompleted deliverable (document, dataset, build, URL)ART
NoteZettelkasten capture layer (fleeting, insight, reference)NOTE
ActorPerson or agent (humans, AI, services)ACTOR
RoleNamed set of responsibilitiesROLE
BindingScoped/temporal relationship between two entities (generalized RoleBinding)BIND
ScopeBounded container (sprint, milestone, project, quarter, release)SCOPE
CategoryClassification axis with defined valuesCAT
GateValidation checkpointGATE
ConstraintRule or limit the project must respectCONST
ContextAmbient knowledge and environmentCTX
DiscussionMulti-turn exploratory conversationDISC
TeamMemberPersistent participant with persona, agent card, and memory tiersTEAMMEMBER

Demoted legacy surfaces

Metric, Model, Process, Schedule, and StateMachine are not first-class shipped entity surfaces in the SmoothTiger/SmoothRiver v2 direction. Metric and policy definitions become artifact-backed specifications; readings and events are LogEntries or external time series. Model data belongs to model-recommender roster/configuration surfaces. Processes are represented by process-instance WorkItems with definition Artifacts. Schedules are represented by time-window Bindings. State machines remain validation machinery, not author-facing workflow records.

Layered relationships

Primitives depend on each other through the skill hierarchy:

Layer 0: index (infrastructure), id (infrastructure), LogEntry (event-log)
Layer 1: Actor (actor-profile), Role (role-management), TeamMember
Layer 2: WorkItem, DecisionRecord, Scope, Category, Binding, CrossReference
Layer 3: Gate, Constraint, Migration, workflow/projection skills
Layer 4: Discussion, metrics-management, Owner profile (owner-profiling), Context grooming

Lower layers never depend on higher layers. The management skill for a primitive follows the same layer (e.g. workitem-management is Layer 2 and depends on event-log at Layer 0 and actor-profile at Layer 1).

Cross-references vs Bindings

Rule: if a relationship has scope, time, or its own attributes → use a Binding entity. Otherwise → use a cross-reference field in frontmatter.

SituationUse
“A blocks B”cross-ref
“Alice is a developer” (globally)cross-ref
“Alice is tech lead on project X for 2026”Binding
“Security gate applies to release process on main”Binding

See Primitives → Relationships for details.

Schema coverage

The current schema tree includes these authoritative YAML schema files under src/context/schemas/ . The schemas define the spec fields, required vs optional, and enum constraints. MCP servers validate against the schema on every write call — schema errors surface as structured tool errors rather than silent bad data.

Installer or CI validation can check the same file contracts without starting a full agent session. MCP write tools perform the authoritative write-path validation.

Next

3.1 - Entity File Format

Every processkit primitive entity is stored as a Markdown file with a YAML frontmatter block. The format is inspired by Kubernetes objects — stable, versioned, and easy to parse.

Canonical shape

---
apiVersion: processkit.projectious.work/v1   # required — schema version
kind: WorkItem                                # required — primitive type
metadata:                                     # required
  id: BACK-calm-fox
  created: 2026-04-06T10:30:00Z
  updated: 2026-04-06T11:15:00Z
  labels:
    priority: high
spec:                                         # required — entity-specific
  title: "Add a release audit check"
  state: in-progress
  assignee: ACTOR-alice
---

# Body — freeform Markdown

Human-readable description, acceptance criteria, notes, history.

The four top-level keys

KeyRequiredPurpose
apiVersionyesSchema version. Always processkit.projectious.work/v1 at v0.x.
kindyesPrimitive type. Determines which schema validates spec.
metadatayesIdentity, timestamps, labels. Cross-cutting fields.
specyesEntity-specific fields. Validated by primitive schema.

metadata fields

FieldRequiredTypeNotes
idyesstringUnique identifier. Format configurable (see below).
createdyesISO 8601 datetimeUTC. Never edited after creation.
updatednoISO 8601 datetimeSet on modification.
labelsnomap[string]stringArbitrary key-value tags. Used by queries and filters.

ID formats

Configurable per project through installer or processkit settings:

id_formatid_slugExample
wordfalseBACK-calm-fox
wordtrueBACK-calm-fox-add-lint
uuidfalseBACK-550e8400-e29b-41d4
uuidtrueBACK-550e8400-add-lint

The prefix (BACK-, LOG-, DEC-, …) is determined by the primitive kind and is not configurable. See Reference → ID Formats for details.

apiVersion policy

apiVersion follows the Kubernetes convention: <group>/<version>, where the group is a reverse-DNS name anchored on the owning organization. For processkit the group is processkit.projectious.work, making processkit a subcomponent of the projectious.work organization. This prevents name collisions if other organizations fork or publish compatible primitives under their own domains.

See Reference → apiVersion Policy for the evolution rules.

Authoritative source

The authoritative specification is src/context/schemas/ in the processkit repo. This page is a condensed overview; the shipped schema files define the authoritative spec contracts for each kind.

3.2 - State Machines

Primitives with lifecycle (WorkItem, DecisionRecord, Scope, Discussion) are governed by state machines. processkit ships default machines that projects can override.

WorkItem default

backlog → in-progress → review → done
            ↓      ↑
          blocked ↑
            ↓      ↑
          backlog ←
(any state) → cancelled (terminal)

Source: src/context/state-machines/workitem.yaml .

DecisionRecord default

proposed → accepted → superseded (terminal)
    ↓
  rejected (terminal)

Source: src/context/state-machines/decisionrecord.yaml .

Overriding a default

Projects override a default by placing a same-named file in their own context/state-machines/ directory. The index MCP server (v0.3.0) and any validator prefer the project file over the processkit default.

Overrides must:

  • Keep the same initial state (or migrate existing data).
  • Not remove states that existing entities are currently in.
  • Add new transitions only from states that already exist.

See the state-machine-management skill for details.

Multiple machines for one kind

You can ship multiple state machines for the same primitive kind by using distinct names. Entities opt into a specific machine via spec.state_machine: <name>. Useful when the same kind has fundamentally different lifecycles (e.g. a WorkItem with bug-lifecycle vs story-lifecycle).

3.3 - Relationships

processkit expresses relationships between entities two ways:

  1. Cross-references — lightweight fields in frontmatter
  2. Bindings — first-class entities with their own files

Pick the right one based on what the relationship needs.

The rule

If a relationship has scope, time, or its own attributes → Binding. Otherwise → cross-reference.

Cross-reference examples

# In a WorkItem
spec:
  blocks: [BACK-swift-oak]
  blocked_by: [BACK-calm-fox]
  related_decisions: [DEC-023]
  parent: BACK-epic-lint

Conventional field names:

FieldMeaning
parentThis entity is a child of another
childrenThis entity has sub-items
blocksThis entity blocks others until resolved
blocked_byThis entity is blocked by others
related_workitemsTyped relationship to WorkItems
related_decisionsTyped relationship to DecisionRecords
supersedesThis entity replaces an older one
superseded_byThis entity has been replaced
implementsThis entity implements a decision

See the cross-reference-management skill for the full list and conventions.

Binding examples

---
apiVersion: processkit.projectious.work/v1
kind: Binding
metadata:
  id: BIND-bright-falcon
  created: 2026-04-06T00:00:00Z
spec:
  type: role-assignment
  subject: ACTOR-alice
  target: ROLE-tech-lead
  scope: SCOPE-project-x
  valid_from: 2026-01-01
  valid_until: 2026-12-31
---

Conventional binding types:

typesubject kindtarget kind
role-assignmentActorRole
work-assignmentWorkItemActor
workitem-gateWorkItemGate
scope-gateScopeGate
time-windowanyany
budget-applicationArtifactWorkItem/Scope

Legacy process-gate, process-scope, and schedule-scope Bindings are v1 migration inputs only. New v2 relationships should target the concrete WorkItem, Scope, Artifact, or Gate being governed.

See the binding-management skill for the full spec.

Why Binding was generalized from RoleBinding

DISC-002 §11 analyzes the decision to generalize the 18th primitive from RoleBinding to Binding. The short version: the indirection pattern applies to at least 7 relationship types across processkit, and one generalized primitive is cleaner than multiplying specific bindings. See DEC-023 in the aibox repo.

3.4 - WorkItem

A unit of work — task, story, bug, epic, spike, or chore. The primary work-tracking primitive in processkit.

ID prefixBACK
State machineworkitem
MCP serverworkitem-management
Skillworkitem-management (Layer 2)

State machine

backlog → in-progress → review → done
              ↕
           blocked

All states can transition to cancelled. done and cancelled are terminal.

Fields

Required

FieldTypeDescription
titlestring (1–200)Short, actionable title
statestringCurrent state

Optional

FieldTypeDescription
descriptionstringLong-form description, acceptance criteria
typeenumtask · story · bug · epic · spike · chore (default: task)
priorityenumcritical · high · medium · low
assigneeACTOR-*Responsible actor
parentBACK-*Parent work item (for subtasks / epics)
childrenBACK-*[]Child work item IDs
blocksBACK-*[]Items this one blocks
blocked_byBACK-*[]Items blocking this one
related_decisionsDEC-*[]Decisions that motivated or govern this item
scopestringScope ID (sprint, milestone, release)
estimateobjectFreeform effort estimate
started_atdatetimeSet automatically on first in-progress transition
completed_atdatetimeSet automatically on done or cancelled

Example

---
apiVersion: processkit.projectious.work/v1
kind: WorkItem
metadata:
  id: BACK-20260411_0900-BoldVale-fts5-full-text-search
  created: '2026-04-11T09:00:00Z'
spec:
  title: Add FTS5 full-text search to SQLite index
  state: backlog
  type: story
  priority: medium
  description: |
    Implement FTS5 trigram tokeniser in index.py so agents can search
    entity body text, not just frontmatter fields.
  related_decisions:
    - DEC-20260409_1200-SwiftPeak-sqlite-for-index
---

Notes

  • All state transitions are auto-logged via event-log — no manual log call needed.
  • Use parent / children to model epics and subtasks; keep the epic type epic and subtask types task or story.
  • scope is a free string; bind to a Scope entity via binding-management when you need richer scope tracking (dates, goals, state).
  • Query by state, type, priority, or assignee via query_workitems.

3.5 - LogEntry

An immutable, append-only record of something that happened. The audit trail primitive — never updated or deleted after creation.

ID prefixLOG
State machinenone (immutable)
MCP serverevent-log
Skillevent-log (Layer 0)

Fields

Required

FieldTypeDescription
event_typestringMachine-readable event type (e.g. workitem.created, gate.passed)
actorstringID of actor who caused the event
timestampdatetimeWhen the event occurred (ISO 8601 UTC)

Optional

FieldTypeDescription
subjectstringID of the entity the event concerns
subject_kindstringKind of subject entity (fast filtering)
summarystringOne-line human-readable summary
detailsobjectEvent-specific structured payload
correlation_idstringLinks related events (e.g. a workflow run)

Example

---
apiVersion: processkit.projectious.work/v1
kind: LogEntry
metadata:
  id: LOG-20260411_0901-SteadyWren-workitem-transitioned
  created: '2026-04-11T09:01:00Z'
spec:
  event_type: workitem.transitioned
  actor: ACTOR-claude
  timestamp: '2026-04-11T09:01:00Z'
  subject: BACK-20260411_0900-BoldVale-fts5-full-text-search
  subject_kind: WorkItem
  summary: WorkItem transitioned from backlog to in-progress
  details:
    from_state: backlog
    to_state: in-progress
---

Auto-logging

Entity-mutating MCP servers (create_*, transition_*, link_*) append a LogEntry automatically — callers do not need to call log_event separately.

Manual calls to log_event are for events that have no MCP server: deploying a build, running a meeting, making a phone call, completing a manual step in a process.

Event type conventions

Use dot-separated entity.verb naming:

PatternExamples
<kind>.createdworkitem.created, decision.created
<kind>.transitionedworkitem.transitioned, scope.transitioned
<kind>.linkedworkitem.linked, decision.linked
gate.passed / gate.failed / gate.waivedgate evaluation results
metric.recordedindividual metric reading
constraint.violatedconstraint breach
session.handoverend-of-session handover written

Notes

  • LogEntries are never updated or deleted. If an event was logged in error, log a corrective entry explaining the error.
  • query_events and recent_events support filtering by subject, actor, event_type, and date range.
  • Logs are date-sharded: context/logs/{year}/{month}/.

3.6 - DecisionRecord

A significant choice — architectural, product, or process — recorded with its context, rationale, and alternatives. The ADR (Architecture Decision Record) pattern as a first-class entity.

ID prefixDEC
State machinedecisionrecord
MCP serverdecision-record
Skilldecision-record (Layer 2)

State machine

proposed → accepted → superseded
         ↘ rejected

accepted, rejected, and superseded are terminal.

Fields

Required

FieldTypeDescription
titlestring (1–200)Short declarative title
statestringCurrent state
decisionstringThe chosen option, stated clearly

Optional

FieldTypeDescription
contextstringSituation that prompted the decision
rationalestringWhy this option was chosen
alternativesobject[]Each with option (required) and rejected_because (optional)
consequencesstringKnown or expected downstream effects
decidersACTOR-*[]People / agents who made the decision
supersedesDEC-*Prior decision this replaces
superseded_byDEC-*Later decision that replaces this one
related_workitemsBACK-*[]Work items that motivated or implement this decision
decided_atdatetimeWhen the decision was finalised

Example

---
apiVersion: processkit.projectious.work/v1
kind: DecisionRecord
metadata:
  id: DEC-20260411_0902-SwiftPeak-sqlite-for-index
  created: '2026-04-11T09:02:00Z'
spec:
  title: Use SQLite as the entity index store
  state: accepted
  decision: Use SQLite with WAL mode as the backing store for the index.
  context: |
    We need a queryable index over all context/ entities that agents can
    use without doing filesystem walks.
  rationale: |
    SQLite is zero-config, ships as a Python built-in, and supports
    full-text search via FTS5. No external service needed.
  alternatives:
    - option: PostgreSQL
      rejected_because: Requires a running service; too heavy for local dev.
    - option: DuckDB
      rejected_because: No built-in full-text search; adds a dependency.
  decided_at: '2026-04-09T12:00:00Z'
---

Notes

  • Use supersede_decision to create a clean supersession chain when a decision changes — the old record stays as history, the new one links back via supersedes.
  • Link decisions to work items with link_decision_to_workitem to make the “why was this built?” trail queryable.
  • proposed is the right starting state for decisions that need stakeholder sign-off before being acted on.

3.7 - Artifact

A completed deliverable — document, dataset, build, diagram, URL, runbook, slide deck, or any other produced output. A catalogue record, not a work-tracking entity.

ID prefixART
State machinenone
MCP serverartifact-management
Skillartifact-management (Layer 2)

Two usage patterns

Self-hosted — the content lives in the entity file’s Markdown body. location is omitted or used as an optional secondary pointer.

Pointer — the content lives externally (Figma, Google Drive, S3, a git path). location is required; the body may be empty or contain a summary.

Fields

Required

FieldTypeDescription
namestringHuman-readable name
kindenumdocument · design · dataset · build · slides · video · spec · diagram · url · other

Optional

FieldTypeDescription
locationstringPath, URL, repo ref, or storage identifier
formatstringFile format or MIME type (pdf, png, application/json, …)
versionstringVersion identifier
checksumstringHash for integrity verification
ownerACTOR-*Actor responsible for this artifact
produced_bystringEntity that produced it (workitem, process, decision ID)
produced_atdatetimeWhen the artifact was produced
tagsstring[]Freeform tags for retrieval

Examples

Self-hosted (document body in the file)

---
apiVersion: processkit.projectious.work/v1
kind: Artifact
metadata:
  id: ART-20260411_0903-BrightVale-deploy-runbook
  created: '2026-04-11T09:03:00Z'
spec:
  name: Deploy Runbook — v0.12.0
  kind: document
  tags: [runbook, deploy, v0.12.0]
  produced_at: '2026-04-11T09:03:00Z'
---

## Steps

1. Run smoke tests: `uv run scripts/smoke-test-servers.py`
2. Stamp provenance: `bash scripts/stamp-provenance.sh vX.Y.Z`
...

Pointer (external file)

---
apiVersion: processkit.projectious.work/v1
kind: Artifact
metadata:
  id: ART-20260411_0904-NeatDawn-brand-design-system
  created: '2026-04-11T09:04:00Z'
spec:
  name: Brand Design System
  kind: design
  location: https://www.figma.com/file/abc123/brand-design-system
  format: figma
  owner: ACTOR-design-team
  tags: [brand, design-system]
---

Notes

  • Artifact has no state machine — it is a catalogue record, not a work-tracking entity. Use WorkItem to track the work that produces it.
  • query_artifacts supports filtering by kind, tags, and title substring.
  • For long-lived reference documents that agents should read, prefer the context-management skill; for point-in-time deliverables, use Artifact.

3.8 - Note

A Zettelkasten capture layer for ideas, observations, and references. Notes exist on a spectrum from raw capture (fleeting) to permanent knowledge (insight).

ID prefixNOTE
State machinenote
MCP servernote-management
Skillnote-management (Layer 2)

State machine

fleeting → insight
         ↘ promoted   (promoted to another entity kind)
         ↘ archived

insight, promoted, and archived are terminal.

Note types (Luhmann/Ahrens taxonomy)

TypeDescription
fleetingQuick capture, not yet refined — review within a week
insightPermanent note — self-contained conclusion, part of knowledge base
referenceLiterature note — pointer to an external source with summary
questionOpen question — may promote to WorkItem (spike) or Discussion

Fields

Required

FieldTypeDescription
titlestring (1–120)Self-contained claim or question — not a topic label
bodystringThe note content
typeenumfleeting · insight · reference · question
statestringCurrent state

Optional

FieldTypeDescription
tagsstring[]Freeform tags for discoverability
sourcestringFor reference notes: URL, book title, or conversation
promotes_toobject{kind, id} — target entity when promoted
review_duedateWhen the note should be reviewed
inboxobjectHook-inbox status and routing metadata
linksobject[]Typed edges to other Notes (see below)

Hook inbox

The note-management MCP server can capture external or agent-generated interrupts as Notes with spec.inbox. Inbox items move through captured, claimed, completed, or failed, with an injection_mode of interrupt, ambient, or next-cycle.

Hook adapters may use the filesystem hand-off directories tasks/inbox/, tasks/claimed/, tasks/done/, and tasks/failed/. Use prepare_hook_inbox_dirs to create that layout, then capture_inbox_item, claim_inbox_item, complete_inbox_item, and fail_inbox_item to keep the canonical Note state in processkit.

Each entry in links has:

FieldTypeDescription
targetNOTE-*The linked note
relationenumSee table below
contextstring (≥10 chars)One sentence explaining why the connection matters
RelationMeaning
elaboratesThis note expands on the target
contradictsThis note disagrees with the target
supportsThis note provides evidence for the target
is-example-ofThis note is a concrete case of the target’s claim
see-alsoRelated but not directly argumentative
refinesThis note sharpens or corrects the target
sourced-fromThis note draws its content from the target

Example

---
apiVersion: processkit.projectious.work/v1
kind: Note
metadata:
  id: NOTE-20260411_0905-ClearDawn-fts5-trigram
  created: '2026-04-11T09:05:00Z'
spec:
  title: FTS5 trigram tokeniser matches substrings without pre-tokenisation
  body: |
    SQLite's FTS5 with the trigram tokeniser splits text into overlapping
    3-character sequences. This lets you search for partial words
    (e.g. "Crow" matches "StoutCrow") without needing a dedicated
    tokenisation pass. Ideal for entity ID word-pair search.
  type: insight
  state: insight
  tags: [sqlite, fts5, search]
  links:
    - target: NOTE-20260411_0906-BrightWave-search-ux
      relation: supports
      context: >
        Trigram matching is what makes the search UX feel instant —
        users type partial word-pairs and get matches immediately.
---

Notes

  • Title discipline matters: a good Note title is a self-contained claim or question — "FTS5 trigram tokeniser matches substrings" not "FTS5 notes". The title alone should convey the idea.
  • Tags group notes by topic; links build arguments. Use both.
  • A question note that remains unanswered after a week should become a Discussion or WorkItem spike.

3.9 - Actor

A participant in the project — human, AI agent, or automated service. Actors are assigned to WorkItems, named in DecisionRecords, and bound to Roles.

ID prefixACTOR
State machinenone
MCP serveractor-profile
Skillactor-profile (Layer 1)

Fields

Required

FieldTypeDescription
typeenumhuman · ai-agent · service
namestring (1–200)Display name (for AI agents: model name + version)

Optional

FieldTypeDescription
emailemailHumans only
handlestringGitHub handle, Slack user, etc.
expertisestring[]Tags used by assignment-suggestion logic
rolesROLE-*[]Shortcut for unscoped role assignment
preferencesobjectFreeform (commit style, timezone, review style, …)
activebooleanfalse = actor has left, no new work assigned (default: true)
joined_atdatetimeWhen actor became part of the project
left_atdatetimeWhen actor stopped

Example

---
apiVersion: processkit.projectious.work/v1
kind: Actor
metadata:
  id: ACTOR-20260411_0906-SteadyWren-claude
  created: '2026-04-11T09:06:00Z'
spec:
  type: ai-agent
  name: Claude Sonnet 4.6
  handle: claude
  expertise: [python, typescript, processkit, documentation]
  active: true
  preferences:
    commit_style: conventional-commits
    timezone: UTC
---

Notes

  • Roles are descriptive, not restrictive — processkit does not enforce RBAC. Use roles for assignment-suggestion only.
  • Use deactivate_actor (not manual editing) to mark an actor as active: false; it keeps the index consistent.
  • For scoped or time-bounded role assignments, use a Binding instead of the roles shortcut field.

3.10 - Role

A named set of responsibilities. Roles are descriptive — they document who is expected to do what, but do not enforce access control.

ID prefixROLE
State machinenone
MCP serverrole-management
Skillrole-management (Layer 1)

Fields

Required

FieldTypeDescription
namestring (1–100)Kebab-case identifier matching the metadata.id suffix
descriptionstringOne-sentence purpose statement

Optional

FieldTypeDescription
responsibilitiesstring[]Imperative bullet points — concrete, not vague
skills_requiredstring[]Skill IDs or names (advisory, not enforced)
default_scopeenumproject · sprint · permanent — assumed scope when binding without an explicit one
supersedesROLE-*Role ID this one replaces

Example

---
apiVersion: processkit.projectious.work/v1
kind: Role
metadata:
  id: ROLE-20260411_0907-ClearOak-tech-lead
  created: '2026-04-11T09:07:00Z'
spec:
  name: tech-lead
  description: Owns technical direction and architecture decisions.
  responsibilities:
    - Review and approve architectural decisions (DEC)
    - Unblock teammates on technical questions within 24 hours
    - Run weekly engineering sync
  skills_required: [software-architecture, code-review, decision-record]
  default_scope: project
---

Notes

  • Roles describe responsibilities, not permissions. processkit does not enforce RBAC.
  • A global, unscoped assignment can use the Actor’s roles field directly. For a scoped or time-bounded assignment (“Alice is tech lead on Project X for Q2”), create a Binding instead.
  • link_role_to_actor creates the shortcut entry on the Actor entity.

3.11 - Binding

A scoped or time-bounded relationship between two entities — the junction-table pattern promoted to a first-class primitive. Use when a relationship has scope, time, or its own attributes; use a frontmatter cross-reference field otherwise.

ID prefixBIND
State machinenone
MCP serverbinding-management
Skillbinding-management (Layer 2)

When to use a Binding vs a cross-reference

SituationUse
“A blocks B”frontmatter blocks: [BACK-...]
“Alice is a developer” (globally)Actor’s roles: [ROLE-...]
“Alice is tech lead on Project X for Q2 2026”Binding
“Security gate applies to this release WorkItem on main”Binding
“Sprint 7 scopes these work items for Apr 1-14”Binding

Fields

Required

FieldTypeDescription
typestringFreeform binding type (see conventions below)
subjectstringEntity on the “from” side
targetstringEntity on the “to” side

Optional

FieldTypeDescription
subject_kindstringPrimitive kind of subject
target_kindstringPrimitive kind of target
scopeSCOPE-*Scope within which the binding applies
valid_fromstringWhen binding starts (date or ISO 8601 datetime)
valid_untilstringWhen binding stops
conditionsobjectFreeform constraints attached to binding
descriptionstringOne-line human-readable summary

Type conventions

TypeMeaning
role-assignmentActor → Role (scoped)
work-assignmentActor → WorkItem (assigned to sprint/scope)
workitem-gateWorkItem → Gate (this gate guards this run or task)
scope-gateScope → Gate (this gate applies within this scope)
time-windowEntity → Artifact/Scope (time or recurrence contract)
budget-applicationArtifact → WorkItem/Scope (cost policy applies here)
constraint-scopeConstraint → Scope (constraint applies in this scope)
category-assignmentEntity → Category value

Process and Schedule are not v2 Binding endpoints. Legacy process-gate, process-scope, and schedule-scope records should be migrated to concrete WorkItem, Scope, Artifact, Gate, or time-window relationships.

Example

---
apiVersion: processkit.projectious.work/v1
kind: Binding
metadata:
  id: BIND-20260411_0908-WarmOak-alice-techlead-q2
  created: '2026-04-11T09:08:00Z'
spec:
  type: role-assignment
  subject: ACTOR-20260411_0906-alice
  target: ROLE-20260411_0907-ClearOak-tech-lead
  scope: SCOPE-20260410_q2-2026
  valid_from: '2026-04-01'
  valid_until: '2026-06-30'
  description: Alice is tech lead on the processkit project for Q2 2026
---

Notes

  • end_binding closes a binding by setting valid_until to the current datetime — use this rather than deleting the entity.
  • resolve_bindings_for returns all active bindings for a given subject, useful for “who is currently assigned to what” queries.

3.12 - Scope

A bounded container for work — sprint, milestone, quarter, release, or project. Scopes give WorkItems, Processes, and Constraints a shared time and goal boundary.

ID prefixSCOPE
State machinescope
MCP serverscope-management
Skillscope-management (Layer 2)

State machine

planned → active → completed
        ↘ cancelled

completed and cancelled are terminal.

Fields

Required

FieldTypeDescription
namestring (1–200)Human-readable name
kindenumsprint · milestone · quarter · project · release · other
statestringCurrent state

Optional

FieldTypeDescription
starts_atdateStart date
ends_atdateEnd date
goalsstring[]Concrete, testable outcomes
descriptionstringLonger context
parentSCOPE-*Parent scope (a quarter contains sprints)
related_decisionsDEC-*[]Planning or retro decisions for this scope

Example

---
apiVersion: processkit.projectious.work/v1
kind: Scope
metadata:
  id: SCOPE-20260411_0909-BrightElm-sprint-7
  created: '2026-04-11T09:09:00Z'
spec:
  name: Sprint 7 — WildButter docs push
  kind: sprint
  state: active
  starts_at: '2026-04-11'
  ends_at: '2026-04-25'
  goals:
    - All primitive reference pages published
    - Hugo and Docsy local build green
    - First public deploy complete
  parent: SCOPE-20260410_q2-2026
---

Notes

  • Attach WorkItems to a Scope via a scope field on the WorkItem, or via a work-assignment Binding when richer tracking is needed.
  • Scope hierarchy (quarter → sprint) is modelled via the parent field.
  • transition_scope to active when work begins; to completed when the scope closes — this timestamps the lifecycle automatically.

3.13 - Discussion

A structured, multi-turn conversation exploring an open question. Discussions capture the back-and-forth of deliberation and produce (or fail to produce) DecisionRecords as outcomes.

ID prefixDISC
State machinediscussion
MCP serverdiscussion-management
Skilldiscussion-management (Layer 4)

State machine

active → resolved
       ↘ closed (no outcome)

resolved and closed are terminal.

Fields

Required

FieldTypeDescription
questionstringThe driving question — one crisp sentence
statestringCurrent state

Optional

FieldTypeDescription
participantsACTOR-*[]Actors participating
relatedDISC-*[]Related discussion IDs
outcomesDEC-*[]DecisionRecord IDs produced by this discussion
opened_atdatetimeWhen the discussion started
closed_atdatetimeWhen it was marked resolved or closed

Example

---
apiVersion: processkit.projectious.work/v1
kind: Discussion
metadata:
  id: DISC-20260411_0910-ClearWave-primitive-page-format
  created: '2026-04-11T09:10:00Z'
spec:
  question: What format should per-primitive reference pages follow?
  state: resolved
  participants: [ACTOR-claude, ACTOR-20260411_0906-owner]
  outcomes: [DEC-20260411_0911-SwiftMeadow-primitive-page-format]
  opened_at: '2026-04-11T09:10:00Z'
  closed_at: '2026-04-11T09:30:00Z'
---

Notes

  • Use add_outcome to attach a DecisionRecord after it has been created with record_decision. Both tools auto-log.
  • Discussions are the audit trail behind decisions — if a decision was reached after deliberation, the Discussion captures the reasoning path.
  • Transition to resolved when a Decision was reached; to closed when the question was abandoned or became moot.
  • The Markdown body (below the YAML frontmatter) is the space for the discussion thread — arguments, evidence, proposals, objections.

3.14 - Gate

A validation checkpoint in a process. Gates define what must be true before work can proceed. Evaluation results are LogEntries — gate.passed, gate.failed, or gate.waived.

ID prefixGATE
State machinenone
MCP servergate-management
Skillgate-management (Layer 3)

Fields

Required

FieldTypeDescription
namestring (1–100)Short kebab-case identifier
descriptionstringWhat this gate checks (one sentence)
kindenummanual · automated · hybrid
validatorstringProse description of the check (one–two sentences)

Optional

FieldTypeDescription
validator_commandstringCLI command for automated/hybrid gates
required_rolesROLE-*[]Roles authorised to sign off
blockingbooleantrue = work cannot proceed without passing (default: true)
evidence_requiredbooleantrue = gate.passed log must include artifact reference (default: false)

Example

---
apiVersion: processkit.projectious.work/v1
kind: Gate
metadata:
  id: GATE-20260411_0912-SteadyArch-smoke-tests-green
  created: '2026-04-11T09:12:00Z'
spec:
  name: smoke-tests-green
  description: All MCP server smoke tests must pass before tagging a release.
  kind: automated
  validator: Run `uv run scripts/smoke-test-servers.py` — exit 0 required.
  validator_command: uv run scripts/smoke-test-servers.py
  blocking: true
  evidence_required: false
---

Notes

  • Gates define what to check; the evaluation happens externally (by an agent, CI, or human). Log the result with log_event using event_type: gate.passed, gate.failed, or gate.waived.
  • evaluate_gate runs the validator_command (if set) and logs the result in one call.
  • Advisory gates (blocking: false) surface warnings without halting the process.
  • Attach gates to concrete v2 surfaces via workitem-gate or scope-gate Bindings. Legacy process-gate Bindings are migration-only.

3.15 - Migration

A pending, in-progress, or applied transition between two upstream processkit versions. Migrations are generated by aibox sync and represent the delta an agent must apply to bring the project’s context/ up to date.

ID prefixMIG
State machinemigration
MCP servermigration-management
Skillmigration-management (Layer 3)

State machine

pending → in-progress → applied
                      ↘ rejected

applied and rejected are terminal.

Fields

Required

FieldTypeDescription
sourcestringUpstream source identifier (processkit, processkit-acme, …)
from_versionstringVersion migrating FROM (semver tag)
to_versionstringVersion migrating TO (semver tag)
statestringCurrent state

Optional

FieldTypeDescription
source_urlstringGit URL of upstream (for re-fetch if needed)
generated_bystringWhat generated this (aibox sync, user, …)
generated_atdatetimeWhen the migration document was written
summarystringOne-line summary for listings
affected_filesobject[]Files touched — each with path, classification, and optional group
affected_groupsstring[]Logical groups affected (unit of auto-update)
planstringProject-specific migration plan drafted by agent
progress_notesobject[]Append-only notes: {timestamp, note, actor}
applied_atdatetimeWhen migration reached applied
applied_bystringActor ID that finalised the migration
rejected_reasonstringIf rejected, why
source_api_versionstringAPI version before a v2 conversion
target_api_versionstringAPI version after a v2 conversion
source_processkit_versionstringprocesskit version before conversion
target_processkit_versionstringprocesskit version after conversion
apply_modestringMigration apply mode (one-shot, etc.)

The migration-management MCP server manages migration state transitions and provides migrate_context_to_v2(dry_run=true) for the breaking v2 API conversion path.

affected_files classification values

ValueMeaning
changed-upstream-onlyUpstream changed it; project did not — safe to auto-apply
changed-locally-onlyProject customised it; upstream did not — no action needed
conflictBoth sides changed it — requires manual resolution
new-upstreamNew file added upstream — agent should install it
removed-upstreamFile removed upstream — agent should confirm removal

Example

---
apiVersion: processkit.projectious.work/v1
kind: Migration
metadata:
  id: MIG-20260411_0913-BrightHaven-v0-11-1-to-v0-12-0
  created: '2026-04-11T09:13:00Z'
spec:
  source: processkit
  from_version: v0.11.1
  to_version: v0.12.0
  state: applied
  summary: Add artifact-management skill and MCP server
  applied_at: '2026-04-11T06:40:00Z'
  applied_by: ACTOR-claude
---

Notes

  • Migrations live under context/migrations/pending/ until applied, then move to context/migrations/applied/.
  • aibox sync generates migrations automatically by diffing PROVENANCE.toml across versions.
  • conflict files require human review — the agent drafts options in the plan field but should not apply them unilaterally.
  • See Reference → Migration for the full migration model.

3.16 - Schedule

Legacy v1 time-based trigger or recurring cadence. In the SmoothTiger/SmoothRiver v2 direction, processkit no longer presents Schedule as a first-class shipped entity surface. Use Binding(type=time-window) with conditions.recurrence_rule for the durable contract; an external runner still performs execution.

ID prefixSCHED (legacy v1)
State machinenone
MCP servernone
Skillschedule-management (legacy authoring guidance)

v2 replacement

Use the binding-management server’s create_time_window path for time windows. pk-doctor’s v2_contracts check requires Binding(type=time-window) records to include conditions.recurrence_rule.

Fields

Required

FieldTypeDescription
namestringKebab-case identifier
descriptionstringHuman-readable summary
cadenceenumdaily · weekly · monthly · quarterly · adhoc · custom

Optional

FieldTypeDescription
cronstringStandard cron expression for machine scheduling
timezonestringIANA timezone name (e.g. Europe/Berlin)
triggersobject[]What this schedule fires (processes, reminders, events)
activebooleanfalse = suspended (default: true)
last_rundatetimeAdvisory — set by whoever runs the schedule
next_rundatetimeAdvisory — set by runner

Example

---
apiVersion: processkit.projectious.work/v1
kind: Schedule
metadata:
  id: SCHED-20260411_0915-CalmGlen-weekly-standup
  created: '2026-04-11T09:15:00Z'
spec:
  name: weekly-standup
  description: Fire the standup-context skill every Monday morning.
  cadence: weekly
  cron: "0 9 * * 1"
  timezone: Europe/London
  triggers:
    - kind: skill
      skill: standup-context
  active: true
---

Notes

  • Legacy v1 Schedule records are documentation for migration only. In v2, an external runner reads Binding(type=time-window) records and fires the target at the right time.
  • last_run and next_run are advisory fields set by the runner — not enforced by processkit on legacy records.
  • Scope a recurring cadence by binding the governed WorkItem, Artifact, or Scope through type: time-window; do not create new schedule-scope Bindings.

3.17 - Constraint

An explicit rule or limit the project must respect — budget ceiling, latency SLO, regulatory requirement, team capacity cap. Violations are LogEntries; constraints themselves do not change when violated.

ID prefixCONST
State machinenone
MCP servernone
Skillconstraint-management (Layer 3)

Fields

Required

FieldTypeDescription
namestringKebab-case identifier
descriptionstringOne-sentence statement of the constraint
kindenumbudget · slo · regulatory · capacity · dependency · policy · other
severityenumhard · soft · advisory

Optional

FieldTypeDescription
measurementstringHow to determine if the constraint is met
targetstringThreshold or boundary value
sourcestringWhere the constraint comes from (contract, regulation, decision)
activebooleanfalse = no longer in effect (default: true)
related_decisionsDEC-*[]Decisions that established or relaxed the constraint

Severity levels

LevelMeaning
hardCannot violate — work stops until resolved
softFlagged and tracked; can be overridden with justification
advisoryInformational — violation noted but no process impact

Example

---
apiVersion: processkit.projectious.work/v1
kind: Constraint
metadata:
  id: CONST-20260411_0916-SteadyMoss-api-latency-slo
  created: '2026-04-11T09:16:00Z'
spec:
  name: api-latency-slo
  description: MCP tool round-trip p99 latency must stay below 200ms.
  kind: slo
  severity: hard
  target: "< 200ms p99"
  measurement: |
    Measured via the observability pipeline from tool-call dispatch to
    server response. Alert fires if exceeded for 5 minutes.
  source: Customer SLA — contract clause 4.2
  related_decisions:
    - DEC-20260409_latency-slo-accepted
---

Notes

  • Constraint violations are logged via log_event with event_type: constraint.violated — the Constraint entity itself is not modified.
  • A hard constraint violation should surface as a blocked WorkItem or an urgent Discussion.
  • Bind a Constraint to a Scope via a constraint-scope Binding to make it scope-specific rather than project-wide.
  • Set active: false when a constraint is no longer in effect (SLA renegotiated, regulatory exemption granted).

3.18 - Category

A classification axis with a closed set of allowed values — priority levels, bug severity tiers, product areas. Use Category when the valid values are defined and enforced; use freeform labels for open-ended tagging.

ID prefixCAT
State machinenone
MCP servernone
Skillcategory-management (Layer 2)

Fields

Required

FieldTypeDescription
namestring (1–100)Category name (kebab-case)
descriptionstringWhat this axis classifies
axisstringLabel key used on entities (e.g. priority, severity)
valuesobject[]Allowed values — each with name (required), description, deprecated, children (optional)

Optional

FieldTypeDescription
applies_tostring[]Primitive kinds this applies to; empty = applies anywhere
defaultstringDefault value when unspecified
multibooleantrue = entity can carry multiple values (default: false)

Example

---
apiVersion: processkit.projectious.work/v1
kind: Category
metadata:
  id: CAT-20260411_0917-BrightFern-workitem-priority
  created: '2026-04-11T09:17:00Z'
spec:
  name: workitem-priority
  description: Business priority for work items.
  axis: priority
  applies_to: [WorkItem]
  default: medium
  values:
    - name: critical
      description: Blocks a release or customer. Drop everything.
    - name: high
      description: Important this sprint. Do before medium items.
    - name: medium
      description: Normal priority. Default.
    - name: low
      description: Nice to have. Defer if sprint is full.
---

Notes

  • Categories complement the type and priority fields already on WorkItem — use Category when you need a custom classification axis beyond the built-in enums.
  • deprecated: true on a value signals it should no longer be used on new entities, but keeps old entities valid.
  • Hierarchical value sets use the children field to model tree-shaped taxonomies (e.g. product area → sub-area).

3.19 - CrossReference

A lightweight, frontmatter-embedded relationship between two entities. CrossReference is not a file — it is a convention for fields in the spec block of any entity.

ID prefix— (not a file entity)
State machine
MCP serverindex-management (for querying)
Skillcross-reference-management (Layer 2)

When to use a CrossReference vs a Binding

Use a CrossReference when the relationship is:

  • Simple — no scope, no time bounds, no attributes of its own
  • Directional — one entity points at another

Use a Binding when the relationship has scope, time, or its own attributes.

SituationUse
“WorkItem A blocks WorkItem B”CrossReference (blocks field)
“Decision D governs WorkItem W”CrossReference (related_decisions)
“Alice is tech lead for Q2”Binding (scoped + time-bounded)

Conventional field names

processkit standardises these field names across entity kinds:

FieldPatternMeaning
parentBACK-* / SCOPE-*Hierarchy parent
childrenBACK-*[]Hierarchy children
blocksBACK-*[]This item blocks these items
blocked_byBACK-*[]These items block this one
supersedesDEC-*This decision replaces an older one
superseded_byDEC-*This decision was replaced by a newer one
related_decisionsDEC-*[]Decisions that govern or motivated this item
related_workitemsBACK-*[]WorkItems that motivated or implement a decision
outcomesDEC-*[]DecisionRecords produced by a Discussion
produces_toobjectFor Note promotion: {kind, id}

Example

# WorkItem with CrossReferences in spec
spec:
  title: Implement FTS5 search
  state: in-progress
  parent: BACK-epic-search-improvements
  blocks:
    - BACK-search-ux-polish
  blocked_by:
    - BACK-index-schema-locked
  related_decisions:
    - DEC-sqlite-for-index

Notes

  • CrossReferences are queryable via query_entities and search_entities in the index-management MCP server — the SQLite index tracks these relationships.
  • There is no separate CrossReference entity file. The relationship lives in the referring entity’s frontmatter.
  • When you find yourself wanting attributes on a cross-reference (e.g. “this relationship is valid from April to June”), that is the signal to promote it to a Binding.

3.20 - Context

A structured narrative document for long-lived ambient knowledge — owner identity, working style, team relationships, grooming reports, situational briefings. The value lives in the Markdown body.

ID prefixCTX (or custom, e.g. OWNER)
State machinenone
MCP servernone
Skillcontext-grooming (Layer 4)

Fields

Required

FieldTypeDescription
descriptionstringOne-sentence summary of what this document holds

Optional

FieldTypeDescription
purposestringWhy the document exists — when an agent should read it
scopestringWhere the context applies (project, owner, team, sprint)
tagsstring[]Freeform tags for retrieval
sensitivebooleantrue = body contains sensitive information (default: false)

Example

---
apiVersion: processkit.projectious.work/v1
kind: Context
metadata:
  id: OWNER-identity
  created: '2026-04-09T00:00:00Z'
spec:
  description: Owner identity, working style, and preferences for AI agents.
  purpose: |
    Read at session start to calibrate communication style and technical
    depth. Load before any substantive work begins.
  scope: owner
  sensitive: false
---

## Identity

Name: ...
Role: ...
Timezone: ...

## Working style

...

Notes

  • Context entities use the Markdown body (below the YAML frontmatter) for their primary content. The spec block is metadata only.
  • Custom ID prefixes (e.g. OWNER-identity, CTX-team-norms) are idiomatic — the CTX- prefix is the default but not required.
  • Sensitive context (sensitive: true) should live under context/**/private/ to be excluded from git tracking and the docs-site build.
  • Context grooming (context-grooming skill) prunes stale Context documents periodically — documents that have not been read or updated for a long time are candidates for archiving.

3.21 - Process

Legacy v1 declarative workflow definition. In the SmoothTiger/SmoothRiver v2 direction, processkit no longer presents Process as a first-class shipped entity surface. Use a process-instance WorkItem for a concrete run and an Artifact for the reusable process definition.

ID prefixPROC (legacy v1)
State machinenone
MCP servernone
Skillprocess-management (legacy authoring guidance)

v2 replacement

Use:

  • WorkItem with spec.type: process-instance for a workflow run.
  • Artifact with spec.kind describing the reusable process definition.
  • Gate and Binding records for policies that apply to the run.

pk-doctor’s v2_contracts check flags v2 process-instance WorkItems that do not point at a process definition.

Fields

Required

FieldTypeDescription
namestringKebab-case identifier
descriptionstringOne-sentence summary
stepsobject[]Ordered list of steps (see below)
definition_of_donestringAcceptance criterion for the whole process

Optional

FieldTypeDescription
triggersstring[]Event types that kick off the process
rolesstring[]Role names involved
parallelbooleantrue = steps run in parallel (default: false)
retryablebooleantrue = process can re-run on failure (default: true)

Step fields

FieldTypeDescription
namestringRequired — step identifier
rolestringRole responsible for this step
descriptionstringWhat the step does
uses_skillstringSkill ID the agent invokes
inputsstring[]Inputs expected at this step
outputsstring[]Outputs produced
gatesGATE-*[]Gates that must pass before proceeding
on_failureenumhalt · retry · skip · escalate

Example

---
apiVersion: processkit.projectious.work/v1
kind: Process
metadata:
  id: PROC-20260411_0918-SureElm-code-review
  created: '2026-04-11T09:18:00Z'
spec:
  name: code-review
  description: Review a pull request before merge.
  triggers: [pr.opened, pr.review-requested]
  roles: [developer, reviewer]
  steps:
    - name: author-self-check
      role: developer
      uses_skill: code-review
    - name: peer-review
      role: reviewer
      uses_skill: code-review
      gates: [GATE-no-blocking-comments]
    - name: merge
      role: developer
      gates: [GATE-ci-passed, GATE-code-review-passed]
  definition_of_done: PR merged with approval and CI green.
---

Notes

  • processkit does not execute processes. The agent (or human) walks the steps and logs progress via log_event.
  • Gate references in steps are pointers to Gate entities — create the Gate first, then reference its ID.
  • Formal process definitions (bug-fix, code-review, feature-development, release) are planned as shipped YAML files in a future release.

3.22 - StateMachine

Legacy v1 state/transition graph entity. In the SmoothTiger/SmoothRiver v2 direction, processkit no longer presents StateMachine as a first-class shipped entity surface. State machines still exist as validation machinery used by MCP servers, but users should not model new workflow records as StateMachine entities.

ID prefixSM (legacy v1)
State machinenone (meta-primitive)
MCP servernone
Skillstate-machine-management (legacy authoring guidance)

v2 replacement

Use the owning MCP server for lifecycle transitions. It loads the appropriate implementation contract and returns structured errors for invalid transitions. Project workflows should be expressed with WorkItems, Artifacts, Gates, and Bindings rather than new StateMachine records.

Fields

Required

FieldTypeDescription
descriptionstringWhat this state machine governs
initialstringStarting state for new entities
statesobjectMap of state name → {description, transitions[]}

Optional

FieldTypeDescription
terminalstring[]States with no outgoing transitions

Transition fields (within each state)

FieldTypeDescription
tostringTarget state
guardstringProse description of when this transition is allowed
on_enterstringSide effect description when entering target state
required_rolestringRole required to make this transition

Default state machines shipped by processkit

PrimitiveStates
WorkItembacklog → in-progress → review → done (+ blocked, cancelled)
DecisionRecordproposed → accepted / rejected → superseded
Migrationpending → in-progress → applied / rejected
Scopeplanned → active → completed / cancelled
Discussionactive → resolved / closed
Notefleeting → insight / promoted / archived

Example — custom state machine

---
apiVersion: processkit.projectious.work/v1
kind: StateMachine
metadata:
  id: SM-20260411_0919-ClearRidge-rfc-lifecycle
  created: '2026-04-11T09:19:00Z'
spec:
  description: RFC lifecycle for architecture proposals.
  initial: draft
  terminal: [accepted, withdrawn]
  states:
    draft:
      description: Being written — not ready for review.
      transitions:
        - to: in-review
          guard: Author marks RFC ready.
    in-review:
      description: Open for comments from stakeholders.
      transitions:
        - to: accepted
          required_role: tech-lead
        - to: draft
          guard: Major revision needed.
        - to: withdrawn
          guard: Author withdraws.
    accepted:
      description: Accepted — implementation may proceed.
    withdrawn:
      description: RFC withdrawn by author.
---

Notes

  • Legacy state machine definitions may exist in context/state-machines/ during v1 migration, but they are not first-class v2 entities.
  • MCP servers load the state machine for a given kind and enforce valid transitions — invalid transition attempts return a structured error.
  • For v2, change lifecycle behavior in the owning MCP server or a reviewed implementation contract, then migrate affected records explicitly. Do not create new StateMachine records.

4 - Skills

The skill package format, the category hierarchy, and the shipped catalog.

A skill in processkit is a directory containing agent instructions, examples, assets, and optionally a Python MCP server. Skills are how processkit gives agents domain-specific intelligence — not just instructions, but the conventions, gotchas, and decision rules of a domain expert.

The v1 installer copies skills from the producer payload into the consuming project’s context/ tree. They remain visible and locally reviewable; Rust does not compile them into the CLI, and Python remains the implementation language for skill MCP servers.

Skill package layout

src/context/skills/<category>/<skill-name>/
  SKILL.md              ← agent instructions (Intro / Overview / Gotchas / Full reference)
  examples/             ← example outputs
  assets/               ← templates, reference data, reusable artifacts
  references/           ← optional deep-dive material (keeps SKILL.md under 5 000 words)
  scripts/              ← optional helper scripts
  mcp/                  ← optional Python MCP server

The four-section structure

Every SKILL.md is organized so agents can stop reading as soon as they have enough context:

SectionContent
Intro1–3 sentences — enough to decide “is this skill relevant?”
OverviewKey workflows and common operations — enough to act on typical cases
Gotchas7 agent-specific failure modes — where agents most often go wrong
Full referenceEdge cases, field-by-field specs, troubleshooting

The Gotchas section is the highest-signal content: 7 provider-neutral failure modes, each with a bold title, the specific failure pattern, and the specific countermeasure.

Frontmatter

Each SKILL.md opens with YAML frontmatter:

---
name: workitem-management
description: |
  Creates, transitions, and queries WorkItems — the task-tracking primitive
  in processkit. Use when managing backlog items, updating work item state,
  or querying items by status, owner, or priority.
metadata:
  processkit:
    apiVersion: processkit.projectious.work/v1
    id: SKILL-workitem-management
    version: "1.0.0"
    created: 2026-04-06T00:00:00Z
    category: process
    layer: 2
    uses:
      - skill: event-log
        purpose: "records state transitions as auditable log entries"
    provides:
      primitives: [WorkItem]
      mcp_tools: [create_workitem, transition_workitem, query_workitems]
      assets: [workitem, workitem-bug, workitem-story]
---

See Skills → Format for the complete specification.

Catalog

The exact catalog is release-generated and validated by the MCP manifest. Avoid using a static skill count as a maturity claim.

CategoryCountExamples
Processkit operations40+workitem-management, decision-record, processkit-gateway, task-router, skill-gate
Engineering and devops45+python-best-practices, fastapi-patterns, terraform-basics, incident-response
Data, AI, and research20+data-science, rag-engineering, llm-evaluation, research-with-confidence
Product, design, and documents25+prd-writing, user-research, frontend-design, docx-authoring
Role and coordination workflows10+session-handover, standup-context, retrospective, team-manager

All skills are Pattern 5 (domain-specific intelligence): they encode what an expert in the domain carries in their head — conventions, gotchas, and decision rules — so the agent reasons like a specialist, not a generalist.

Browsing the skill catalog

Three ways to find skills:

On GitHub — Browse the source tree directly: src/context/skills/ is organized into 7 category subdirectories (processkit/, engineering/, devops/, data-ai/, product/, documents/, design/). Each skill directory contains a SKILL.md with the full description, gotchas, and reference.

From a release tarball — Every GitHub release includes a processkit-vX.Y.Z.tar.gz with all src/ content. Download and unpack to inspect or diff skills without cloning the full repo. Release assets live at: github.com/projectious-work/processkit/releases

In an installed project — Skills are installed under context/skills/<category>/<skill-name>/SKILL.md. The task-router MCP server’s route_task(task_description) call returns the matching skill, any legacy process override metadata, and the recommended MCP tool in a single call. skill-finder (find_skill, list_skills) is called internally by task-router and remains available directly. The index-management MCP server’s search_entities tool can query skill metadata from the SQLite index.

Where to go next

  • Format — the full skill package format specification
  • Hierarchy — the layered skill graph (uses: relationships)
  • Catalog → Process — start browsing skills by category

4.1 - Skill Package Format

This page summarizes the skill package format. The authoritative source is src/context/skills/FORMAT.md in the processkit repo.

Directory layout

src/context/skills/<category>/<skill-name>/
  SKILL.md              ← required — three-level agent instructions
  INDEX.md              ← optional — human-readable overview
  examples/             ← recommended — example outputs
  templates/            ← recommended — YAML frontmatter entity scaffolds
  references/           ← optional — deep-dive reference material
  mcp/                  ← optional — Python MCP server
    server.py
    mcp-config.json
    README.md

Required frontmatter fields

FieldPurpose
apiVersionAlways processkit.projectious.work/v1 at v0.x.
kindAlways Skill.
metadata.idSKILL-<skill-name>
metadata.nameKebab-case; matches directory name
metadata.versionSemver, independent of processkit release
metadata.createdISO 8601 UTC
spec.descriptionOne-sentence summary (shown in listings)
spec.categoryOne of the registered categories
spec.layerInteger 0–4, or null for non-process skills

Optional fields

FieldPurpose
spec.usesSkills this depends on (strictly lower layer for process skills)
spec.providesWhat the agent gains: primitive kinds, MCP tools, templates
spec.when_to_useTrigger description for routing
spec.replacesID of a skill this one overrides (for community forks)

Categories

process, language, framework, infrastructure, architecture, design, data, ai, api, security, observability, database, performance, meta.

The provides block

A promise to consumers — what an agent gains by activating this skill:

provides:
  primitives: [WorkItem]
  mcp_tools: [create_workitem, transition_workitem, query_workitems]
  templates: [workitem, workitem-bug, workitem-story]
  processes: [backlog-grooming]

Installers and release checks can cross-check these promises against the actual files shipped in the skill.

MCP server conventions (v0.3.0+)

Skills ship Python MCP servers as standalone scripts with PEP 723 inline dependencies:

#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.10"
# dependencies = ["mcp[cli]>=1.0,<2.0"]
# ///
from mcp.server.fastmcp import FastMCP
server = FastMCP("<skill-name>")
...
if __name__ == "__main__":
    server.run(transport="stdio")

Consumers need only Python 3.10 or newer and uv.

4.2 - Skill Hierarchy

Process-primitive skills form a strict layered DAG. A skill’s spec.uses field may only reference skills in lower layers. Cycles are validation errors.

The layers

LayerRoleSkills
0Foundationindex-management, id-management, event-log
1Primitive managementrole-management, actor-profile
2Core entitiesworkitem-management, decision-record, scope-management, category-management, cross-reference-management, binding-management
3Workflow policygate-management, constraint-management; legacy/migration guidance for process-management, state-machine-management, schedule-management
4Cross-cuttingdiscussion-management, metrics-management

Layer 0 has three skills with one intra-layer edge. index-management and id-management are the absolute foundation — they depend on nothing. event-log is also Layer 0 but uses: [index-management, id-management], so it conceptually sits “atop” them. This is the only intra-layer edge in the entire hierarchy. The strict-downward rule applies to Layers 1+ unchanged.

What the layers mean

  • Layer 0 — the foundation that every entity-creating skill depends on. index-management provides the read side (look up entities by ID, kind, state, text). id-management provides the write side (allocate unique IDs in the configured format). event-log is also at Layer 0 but uses both — the only intra-layer edge in the hierarchy.
  • Layer 1 — management for the “participants” of processes: Actors (who does things) and Roles (what things they do).
  • Layer 2 — management for the primary work artifacts: WorkItems, DecisionRecords, Scopes. Depends on Layers 0–1.
  • Layer 3 — workflow policy: Gates and Constraints tie Layer 2 entities together. Process, Schedule, and StateMachine skills remain as legacy/migration guidance; v2 expresses runs as WorkItems, definitions as Artifacts, recurrence as time-window Bindings, and lifecycle enforcement through MCP server contracts.
  • Layer 4 — cross-cutting concerns that reference everything: Discussions produce decisions and reference work items; metrics-management records metric specifications as artifacts and observations as LogEntries. This is a skill-layer placement, not a Metric primitive.

Technical/language skills are unlayered

Skills in categories like language, framework, infrastructure, database, data, ai, security, observability, performance, design are layer: null. They don’t fit the layered hierarchy — they describe how to do engineering things, not how to manage process artifacts. Such skills can still use spec.uses for other technical skills (e.g. fastapi-patterns uses python-best-practices).

Validation

Phase 5 of the DISC-002 plan adds DAG validation to the index MCP server:

  • Every spec.uses entry must reference an existing skill.
  • For process-primitive skills, each referenced skill’s spec.layer must be strictly less than the referencing skill’s spec.layer.
  • No cycles are permitted.

4.3 - Catalog

Every shipped skill, grouped by category.

The shipped skills by category. Each entry states what the skill covers and when an agent should reach for it.

4.3.1 - Process Skills

Skills for managing project workflows, team coordination, and operational processes. Most process-primitive skills have an accompanying MCP server that enforces schema validation and state-machine rules.


workitem-management

Creates, transitions, and queries WorkItems — the task-tracking primitive in processkit. Use when managing backlog items, updating work item state, or querying items by status, owner, or priority.

Triggers: When the user asks to create a ticket, update a work item, query the backlog, or track progress on a task. Tools: create_workitem, transition_workitem, query_workitems, get_workitem, link_workitems Layers: Layer 2 (depends on event-log, actor-profile)

Key capabilities:

  • Create WorkItems with type (task, story, bug, epic, spike, chore) and priority (critical, high, medium, low)
  • Transition through the default state machine: backlog → in-progress → review → done (with blocked as a side state)
  • Link parent/child WorkItems for epics and subtasks
  • Query by state, type, priority, owner, or label
  • All state transitions auto-append a LogEntry via event-log
Example usage

User asks to create a ticket for a new feature. Agent calls generate_id to get a BACK- ID, then create_workitem with title, type story, and priority high. Later the user starts work — agent calls transition_workitem to move it to in-progress.


decision-record

Captures architectural and product decisions as DecisionRecord entities (ADR pattern). Use when the team makes a significant choice with rationale, alternatives, and implications.

Triggers: When the user says “write a decision”, “document this ADR”, “record why we chose X”, or “capture this architectural decision”. Tools: record_decision, transition_decision, query_decisions, get_decision, supersede_decision, link_decision_to_workitem Layers: Layer 2 (depends on event-log)

Key capabilities:

  • Record decisions with status (proposed, accepted, rejected), rationale, alternatives considered, and implications
  • Link decisions to WorkItems for traceability
  • Supersede old decisions when context changes
  • Query by status, tag, or date
Example usage

Team decides to use SQLite for local dev instead of PostgreSQL. Agent records a DecisionRecord with the rationale (“zero-config, no Docker dependency for contributors”), alternatives considered, and implications. Status starts as proposed; on approval it transitions to accepted.


artifact-management

Registers and retrieves completed deliverables — documents, datasets, builds, diagrams, URLs, runbooks. Use when cataloguing a produced output so future agents and humans can find it.

Triggers: When the user says “register an artifact”, “catalog this document”, “store this deliverable”, or “link this design file”. Tools: create_artifact, get_artifact, query_artifacts, update_artifact Layers: Layer 2 (no state machine — Artifact is a catalogue record)

Key capabilities:

  • Two usage patterns: self-hosted (Markdown body in the entity file) and pointer (external URL or file path via location)
  • Tag artifacts for filtering (kind, labels)
  • Query by kind, tag, or title substring
  • Update metadata on existing artifacts
Example usage

After generating a runbook, agent calls create_artifact with kind: document, title: "Deploy Runbook — v0.12.0", and stores the Markdown body directly in the artifact file. A design file lives in Figma — agent creates a pointer artifact with location: "https://figma.com/...".


event-log

Writes auditable LogEntry records for any project event. Use when you want an immutable record of something that happened.

Triggers: When the user says “log this event”, “audit trail”, “record that we did X”, or when any entity-mutating MCP server fires a side-effect log. Tools: log_event, query_events, recent_events Layers: Layer 0 (foundation — no dependencies)

Key capabilities:

  • Append-only — LogEntries are never updated or deleted
  • Entity-mutating MCP servers (create, transition, link) auto-append a LogEntry without the caller doing anything extra
  • Query by actor, entity, event type, or date range
  • recent_events returns the last N entries across all entities
Example usage

Agent explicitly logs a manual step: “Deployed v0.12.0 tarball to GitHub Releases”. Separately, every transition_workitem call automatically appends a log entry recording the before/after state.


note-management

Captures, reviews, and promotes fleeting ideas and insights using the Zettelkasten method. Use when the user wants to record an observation, link related ideas, or build a personal knowledge base.

Triggers: When the user says “remember this”, “note this idea”, “capture this”, or “link this to another note”. Tools: create_note, capture_inbox_item, claim_inbox_item, complete_inbox_item, fail_inbox_item Layers: Layer 2

Key capabilities:

  • Three note types: fleeting (raw capture), insight (permanent note, never discarded), reference (literature note)
  • links field for typed Zettelkasten edges: elaborates, contradicts, supports, is-example-of, see-also, refines, sourced-from
  • Each link requires a context sentence explaining why the connection matters — tags group, links argue
  • Notes stored under context/notes/
  • Hook inbox lifecycle for interrupt, ambient, and next-cycle items
Example usage

During research the user observes: “FTS5 trigram tokeniser can match partial words without prior tokenisation.” Agent creates a fleeting note. Later the user promotes it to an insight and links it to a related note about search UX with relation supports.


session-handover

Writes an end-of-session handover document before the agent shuts down or the container restarts. Use to preserve state across context resets.

Triggers: When the user says “write a handover”, “shutting down”, “container restart”, “end of session”, or when context is approaching its limit. Tools: None (file-based via SKILL.md instructions) Layers: Layer 4

Key capabilities:

  • Captures: current task state, open decisions, blockers, what was completed, and suggested next actions
  • Stores as a LogEntry with a generated LOG- ID under context/logs/
  • Includes a generate_id call and date-sharded path derivation
  • Designed to be the first thing the next agent reads at session start
Example usage

Before shutdown, agent writes a handover capturing the in-progress WorkItem IDs, the open Discussion about the schema change, and the three concrete next steps for the incoming session.


standup-context

Writes a standup update in Done / Doing / Next / Blockers format. Use at the start of a work session, for daily standups, or for async team updates.

Triggers: When the user says “write a standup”, “daily update”, “what did we do yesterday”, or “status update for the team”. Tools: None (file-based via SKILL.md instructions) Layers: Layer 4

Key capabilities:

  • Reads open and recently-completed WorkItems to populate Done / Doing
  • Reads Discussion entities for blockers
  • Outputs a clean, copy-pasteable standup
  • Optionally stores as a LogEntry for the audit trail

status-briefing

Generates a session-start orientation from the current project state. Use at the beginning of a session to get a fast, structured catch-up.

Triggers: When the user says “status briefing”, “catch me up”, “state of things”, or “what’s on the board”. Tools: Reads query_entities, recent_events via index-management Layers: Layer 4

Key capabilities:

  • Summarises open WorkItems by state and priority
  • Surfaces recent LogEntries (what changed since last session)
  • Highlights open Discussions and pending Decisions
  • Reports any pending Migrations

context-grooming

Periodically prunes and compacts the project context to keep it navigable. Use when context/ has grown stale or cluttered.

Triggers: When the user says “groom the context”, “clean up context”, or when the entity count in any directory is getting unwieldy. Tools: index-management for enumeration; per-kind MCP servers for transitions Layers: Layer 4

Key capabilities:

  • Identifies done WorkItems older than N days as candidates for archiving
  • Surfaces Discussions in open state that have had no activity
  • Detects Notes in fleeting state that have not been promoted
  • Proposes a grooming plan — does not auto-archive without confirmation

release-semver

Plans and executes a semantic versioning release. Use when preparing a new version of a project or library.

Triggers: When the user says “plan the release”, “version bump”, “cut a release”, or “prepare vX.Y.Z”. Tools: None (checklist-driven via SKILL.md instructions) Layers: Layer 4

Key capabilities:

  • Determine bump type (patch/minor/major) from change audit
  • Update CHANGELOG and PROVENANCE
  • Run smoke tests before tagging
  • Commit, tag, push, build release tarball, create GitHub release
  • processkit-specific: stamp-provenance.sh and build-release-tarball.sh are the canonical scripts

retrospective

Facilitates team or project retrospectives — what worked, what didn’t, action items. Use at the end of a sprint, milestone, or project phase.

Triggers: When the user says “let’s do a retro”, “what went well?”, “lessons learned”, or “end of sprint review”. Tools: None Layers: Layer 4

Key capabilities:

  • Scope the retrospective (time period or milestone)
  • Gather input in three categories: What Worked, What Didn’t, What to Try Next
  • Action items must be specific, assignable, and time-bound
  • Store as a LogEntry or Artifact in context/

incident-response

Guides production incident handling — triage, communicate, fix, postmortem. Use when something is broken in production.

Triggers: When the user reports a production issue or says “production is down”, “users are affected”, “we have an incident”. Tools: None Layers: Layer 4

Key capabilities:

  • Triage within first 5 minutes: assess user impact, identify recent changes, evaluate rollback options
  • Communicate to stakeholders with status, impact, and ETA
  • Mitigate first, fix later: rollback or temporary workaround
  • Postmortem within 48 hours: timeline, root cause, action items, blameless approach

estimation-planning

Software estimation and planning — story points, velocity tracking, scope negotiation, technical debt budgeting. Use when estimating work or planning sprints.

Triggers: When the user asks to estimate work, plan a sprint, negotiate scope, or asks “how should I estimate this?”. Tools: None Layers: Layer 4

Key capabilities:

  • Story points vs time estimates: Fibonacci sizing, relative complexity
  • Planning poker with anchoring-bias prevention
  • Cone of uncertainty: communicate estimates as ranges with confidence
  • Velocity tracking and MoSCoW prioritisation
  • Three-point estimation with PERT formula

postmortem-writing

Blameless postmortem writing with timeline, root cause analysis, and corrective actions. Use when writing incident postmortems.

Triggers: When writing an incident postmortem, conducting a post-incident review, or asking “how do I write a blameless postmortem?”. Tools: None Layers: Layer 4

Key capabilities:

  • Structured template: summary, impact, timeline, root cause, corrective actions, lessons learned
  • 5 Whys root cause analysis down to systemic/process issues
  • Corrective actions in prevent/detect/mitigate categories, each with owner and due date
  • Blameless culture: systems-focused language, passive voice for human errors

4.3.2 - Language Skills

Language-specific conventions, patterns, and best practices.


python-best-practices

Python conventions and patterns – typing, testing, project layout, tooling. Use when writing or reviewing Python code.

Triggers: When the user is working with Python code and asks about conventions, project structure, typing, testing, or says “how should I structure this Python project?”. Tools: None References: None

Key capabilities:

  • Project layout: src/ layout with pyproject.toml, use uv for dependency management
  • Type hints on all public function signatures with from __future__ import annotations
  • Testing with pytest: fixtures, parametrize, test naming test_<function>_<scenario>_<expected>
  • Code style: ruff format and ruff check, prefer dataclasses/Pydantic over dicts, pathlib over os.path
  • Error handling: raise specific exceptions, custom exception classes, never bare except:
Example usage

User asks to set up a new Python project. The agent creates pyproject.toml with project metadata and dependencies, src/ layout, tests/ directory, ruff config, and basic __init__.py.


rust-conventions

Rust patterns and conventions – error handling, module structure, clippy compliance. Use when writing or reviewing Rust code.

Triggers: When the user is working with Rust code and asks about patterns, error handling, module organization, or says “how should I structure this in Rust?”. Tools: None References: None

Key capabilities:

  • Error handling: anyhow::Result for apps, thiserror for libraries, .context() on all ? operations
  • Module structure: one module per file, thin main.rs/lib.rs, group by domain
  • Naming: PascalCase types, snake_case functions, SCREAMING_SNAKE constants, builder pattern
  • Clippy compliance: build with cargo clippy -- -D warnings, prefer &str over &String
  • Testing: unit tests in #[cfg(test)] mod tests, integration tests in tests/, descriptive assert_eq! messages
Example usage

User asks to add error handling to a function. The agent replaces .unwrap() calls with ? and .context(), changes return type to anyhow::Result<T>, and adds meaningful error messages that help diagnose failures.


typescript-patterns

TypeScript project patterns – strict mode, type safety, project setup. Use when writing or reviewing TypeScript code.

Triggers: When the user is working with TypeScript and asks about project setup, type patterns, strict mode, or says “how should I type this?”. Tools: None References: None

Key capabilities:

  • Project setup: strict mode in tsconfig.json, noUncheckedIndexedAccess, committed lockfile
  • Type safety: avoid any, use unknown with type guards, explicit return types on public functions
  • Discriminated unions for state modeling, as const for literal types, satisfies operator
  • Use zod or similar for runtime validation of external data
  • Error handling: custom error classes, Result types in library code, validate all external inputs
  • Testing with vitest or jest, type-level testing with expectTypeOf
Example usage

User asks “How should I handle API responses?” The agent defines a response type with zod schema, validates the response at the boundary, and uses discriminated unions for success/error handling downstream.


go-conventions

Go idioms and conventions including error handling, interfaces, goroutine patterns, and testing. Use when writing Go code, reviewing Go projects, or designing Go package layouts.

Triggers: When the user is working with Go code and asks about idiomatic patterns, error handling, concurrency, package organization, or testing strategies. Tools: Bash(go:*), Read, Write References: references/go-patterns.md

Key capabilities:

  • Error handling: return errors as last value, wrap with fmt.Errorf and %w, use errors.Is/errors.As
  • Interfaces: accept interfaces, return concrete types, keep interfaces small (1-3 methods), define at consumption site
  • Goroutine patterns: context.Context as first parameter, errgroup.Group for fan-out/fan-in, clear lifecycle ownership
  • Package layout: organize by domain, avoid util/common packages, internal/ for private packages
  • Testing: table-driven tests, testify/assert, httptest, t.Helper(), go test -race
  • Go proverbs: share memory by communicating, clear is better than clever, make the zero value useful
  • Code style: follow gofmt unconditionally, group imports, exported names get doc comments
Example usage

User needs a worker pool that processes jobs from a channel. The agent creates a pool using errgroup.Group with configurable workers, each reading from a shared job channel. Uses context.Context for cancellation and returns the first error encountered, with graceful shutdown draining remaining jobs.


java-patterns

Modern Java 17+ patterns including records, sealed classes, Stream API, and Spring Boot conventions. Use when writing Java code, reviewing Java projects, or modernizing legacy Java.

Triggers: When the user is working with Java code and asks about modern language features, Spring Boot conventions, Stream API patterns, or says “how should I modernize this Java code?”. Tools: Bash(mvn:*), Bash(gradle:*), Read, Write References: None

Key capabilities:

  • Modern Java 17+ features: records, sealed classes, pattern matching with instanceof, switch expressions, text blocks
  • Records and sealed classes for algebraic data types with exhaustive switch handling
  • Stream API: filter -> map -> collect pipelines, groupingBy, flatMap, proper Optional usage
  • Spring Boot: constructor injection, thin controllers, @Transactional at service layer, @ConfigurationProperties, @RestControllerAdvice
  • Dependency injection: prefer constructor injection, use interfaces for contracts, avoid circular dependencies
  • Testing with JUnit 5 and Mockito: @ParameterizedTest, AssertJ assertions, test slices (@WebMvcTest, @DataJpaTest)
  • Code organization: package by feature, single responsibility, prefer composition over inheritance
Example usage

User says “Convert this class with getters/setters to modern Java.” The agent replaces the POJO with a record, removes boilerplate methods, adds a compact constructor for validation, and updates all call sites to use the record’s accessor methods.


sql-style-guide

SQL formatting and naming conventions for tables, columns, queries, migrations, and constraints. Use when writing SQL, reviewing database code, or establishing SQL style guidelines.

Triggers: When the user is writing SQL queries, designing schemas, creating migrations, or asks “how should I format this SQL?” or “what naming convention should I use for tables?”. Tools: None References: None

Key capabilities:

  • Table and column naming: snake_case, singular table names, is_/has_ for booleans, _at for timestamps
  • Keyword capitalization: SQL keywords in UPPERCASE, identifiers in lowercase
  • Query formatting: one clause per line, leading commas, explicit JOIN syntax, meaningful table aliases
  • Comment conventions: -- for single-line, explain WHY not WHAT
  • Migration file naming: sequential timestamps, one structural change per migration, include both up and down
  • Constraint naming: pk_, fk_, uq_, ck_, ix_ prefixes with table and column names
  • Query best practices: WHERE EXISTS over WHERE IN, CTEs for complex queries, avoid SELECT *
Example usage

User asks to create a schema for a task management app. The agent designs tables with singular names (task, project, user), snake_case columns, explicit constraint names, timestamp columns with _at suffix, and boolean columns with is_ prefix.


latex-authoring

Comprehensive LaTeX document authoring with LuaLaTeX, modern packages, math, TikZ, and bibliography management. Use when writing or editing LaTeX documents.

Triggers: When the user asks to write or edit LaTeX documents, set up document classes and preambles, create math equations or TikZ diagrams, or manage bibliographies. Tools: None References: references/packages.md, references/math-reference.md, references/tikz-reference.md

Key capabilities:

  • Document classes: article, book, report, beamer, standalone, and when to use each
  • LuaLaTeX vs pdfLaTeX: prefer LuaLaTeX for new projects (Unicode, system fonts, Lua scripting)
  • Essential packages: geometry, fontspec, amsmath, siunitx, tabularray, tikz, biblatex, tcolorbox
  • Document structure: one sentence per line, split with \input{}, preamble in separate file
  • Bibliography with BibLaTeX and Biber backend
  • Math typesetting: inline, display, multi-line environments, custom commands, SI units with siunitx
  • TikZ for programmatic vector graphics with common libraries
  • Common mistakes to avoid: $$...$$ for display math, missing \label after \caption
Example usage

User asks to set up a LaTeX paper with LuaLaTeX. The agent creates a main.tex with \documentclass{article}, a preamble.tex loading geometry, fontspec, amsmath, biblatex, and siunitx, sets up section structure with \input{}, and provides a latexmk build command.

4.3.3 - Infrastructure Skills

Skills for containers, orchestration, networking, system administration, and CI/CD.


dockerfile-review

Dockerfile best practices review – layer optimization, caching, security, image size. Use when writing or reviewing Dockerfiles.

Triggers: When the user asks to review a Dockerfile, optimize an image, or says “why is my image so big?”, “is this Dockerfile correct?”, or “help me with Docker”. Tools: None References: None

Key capabilities:

  • Layer optimization: combine related RUN commands, order from least to most frequently changing
  • Caching: copy dependency manifests first, install, then copy source
  • Security: don’t run as root, never COPY secrets, pin base images with digest, remove package caches
  • Size reduction: slim/alpine base images, multi-stage builds, --no-install-recommends
  • Correctness: use COPY over ADD, set WORKDIR instead of cd, exec form for CMD/ENTRYPOINT
Example usage

User says “Review my Dockerfile.” The agent reads it and identifies that dependency installation and source copy are in the same layer (cache-busting), apt lists aren’t cleaned up, and the container runs as root. Provides specific fixes for each issue.


ci-cd-setup

CI/CD pipeline setup – GitHub Actions, testing, linting, deployment. Use when setting up or improving continuous integration and deployment.

Triggers: When the user asks to “set up CI”, “add GitHub Actions”, “automate tests”, “add deployment”, or wants to improve their build pipeline. Tools: None References: None

Key capabilities:

  • Pipeline stages in order: lint (fastest feedback), test (unit then integration), build, deploy
  • GitHub Actions basics: trigger on push/PR, specific action versions, cache dependencies, set timeouts
  • Testing in CI: same commands as local dev, matrix builds when needed, fail fast
  • Security: use GitHub Secrets, permissions key for token scope, pin third-party actions to SHA
  • Best practices: keep CI under 5 minutes for PRs, require CI pass before merge, run expensive checks only on main
Example usage

User asks to set up CI for a Rust project. The agent creates .github/workflows/ci.yml with lint (clippy), test (cargo test), and build steps, with cargo caching for faster runs.


kubernetes-basics

Kubernetes cluster management, resource definitions, networking, storage, Helm, and troubleshooting. Use when working with Kubernetes manifests, kubectl commands, Helm charts, or debugging pod/service issues.

Triggers: When writing or editing Kubernetes YAML manifests, running kubectl or helm commands, debugging pods/services/networking/storage, or managing Helm charts. Tools: Bash(kubectl:*), Bash(helm:*), Bash(k9s:*), Read, Write References: references/resource-cheatsheet.md, references/cluster-architecture.md, references/troubleshooting.md

Key capabilities:

  • Cluster context management: confirm active cluster and namespace before changes
  • Core resources: Deployments (stateless), StatefulSets (stateful), DaemonSets (per-node), Jobs/CronJobs
  • Networking: ClusterIP, NodePort, LoadBalancer services; Ingress for HTTP routing; Network Policies
  • Storage: PersistentVolumes, PersistentVolumeClaims, StorageClasses, volumeClaimTemplates
  • Configuration: ConfigMaps and Secrets, prefer volume mounts over env vars
  • Helm: repo management, install/upgrade/rollback, helm template for inspection, pin chart versions
  • Troubleshooting workflow: events, describe, logs, exec, top
  • Safe changes: kubectl diff before apply, --dry-run=client for validation, rollout undo for rollback
Example usage

User has a pod stuck in CrashLoopBackOff. The agent runs kubectl describe pod to check events for OOM or probe failures, kubectl logs --previous to see logs from the crashed container, and inspects the pod YAML for resource limits and command issues.


dns-networking

DNS resolution, IP addressing, subnetting, network protocols, and diagnostic tools. Use when configuring DNS records, debugging connectivity, setting up networking, or troubleshooting network issues.

Triggers: When setting up or modifying DNS records, debugging DNS resolution or connectivity, configuring firewalls, analyzing HTTP/TLS issues, calculating subnets, or diagnosing latency and routing problems. Tools: Bash(dig:*), Bash(nslookup:*), Bash(traceroute:*), Bash(curl:*), Bash(ss:*), Read, Write References: references/protocol-reference.md, references/troubleshooting-tools.md

Key capabilities:

  • DNS fundamentals: record types (A, AAAA, CNAME, MX, TXT, SRV, NS, SOA, PTR), TTL management
  • IP addressing and subnetting: CIDR notation, private ranges (RFC 1918), quick subnet math
  • Common protocols: TCP vs UDP, HTTP/HTTPS, DNS, SSH, SMTP/IMAP
  • TLS and HTTPS: handshake process, debugging expired certificates and hostname mismatches
  • Port management: listing listeners with ss, well-known vs ephemeral port ranges
  • Firewall basics with ufw and iptables
  • Load balancing concepts: round-robin DNS, reverse proxy (Layer 7), Layer 4 LB
  • Diagnostic workflow: DNS resolution, reachability, route tracing, port checks, application testing
Example usage

User reports a DNS record not propagating after a change. The agent checks the current authoritative answer vs cached answer with dig @ns1.provider.com and dig @8.8.8.8, runs dig +trace for the full resolution chain, and advises waiting for the old TTL to expire if the authoritative server shows the new value.


terraform-basics

Infrastructure-as-code with Terraform/OpenTofu. Resources, providers, state, modules, and plan/apply workflow. Use when writing Terraform configs, managing cloud infrastructure, or reviewing IaC code.

Triggers: When writing or editing .tf files, planning/applying/destroying infrastructure, managing state and backends, creating modules, or reviewing IaC for best practices. Tools: Bash(terraform:*), Bash(tofu:*), Read, Write References: None

Key capabilities:

  • Resources and providers: pin provider versions in required_providers, descriptive resource names
  • Variables with types, descriptions, and validation; outputs with descriptions
  • Data sources to reference existing infrastructure without managing it
  • State management: remote backends (S3 + DynamoDB), never edit state manually, terraform import
  • Modules for reuse: focused on single concern, pin versions in production
  • Plan/apply/destroy workflow: init, fmt, validate, plan -out, apply
  • Best practices: one state per environment, prevent_destroy on critical resources, tag all resources, moved blocks for refactoring
Example usage

User needs to provision an EC2 instance. The agent writes Terraform config with a security group, AMI data source, typed variables, and outputs. Uses terraform plan -out=tfplan followed by terraform apply tfplan for safe deployment.


container-orchestration

Docker Compose patterns for multi-service architectures. Health checks, networking, volumes, and service dependencies. Use when designing docker-compose files, debugging container networking, or managing multi-container applications.

Triggers: When writing Docker Compose files, designing multi-service architectures, debugging container networking, setting up health checks, managing volumes, or configuring environment variables. Tools: Bash(docker:*), Bash(docker-compose:*), Read, Write References: references/compose-patterns.md

Key capabilities:

  • Compose file structure: services, networks, and volumes at top level
  • Build vs image: build for developed services, image for third-party
  • Health checks with depends_on: condition: service_healthy for proper startup ordering
  • Networking: custom networks for traffic isolation, service name as hostname, expose vs ports
  • Volume strategies: named volumes (persistent), bind mounts (dev), tmpfs (sensitive/cache)
  • Environment management: .env files with overrides, never put secrets in docker-compose.yml
  • Profiles for optional services (e.g., debug tools)
  • Common commands: up -d, logs -f, exec, down -v, config for validation
Example usage

User has a service that cannot connect to the database. The agent checks both services are on the same network, verifies the db is healthy with docker compose exec db pg_isready, tests connectivity from the app container, and inspects environment variables for correct database host configuration.


linux-administration

Essential Linux system administration for developers. File permissions, process management, systemd, journald, cron, and disk management. Use when managing Linux servers, debugging system issues, or writing system scripts.

Triggers: When managing file permissions, investigating processes, creating systemd services, querying logs with journalctl, setting up cron jobs, diagnosing disk issues, managing users, or installing packages. Tools: Bash, Read, Write References: references/commands-cheatsheet.md, references/systemd-reference.md

Key capabilities:

  • File permissions and ownership: rwx model, numeric and symbolic notation, special bits (setuid, setgid, sticky)
  • Process management: ps aux, pgrep, kill with SIGTERM before SIGKILL, lsof, ss
  • User and group management: useradd, usermod -aG, prefer useradd for scripting
  • Systemd services: create unit files, systemctl commands, always daemon-reload after edits
  • Journald logging: journalctl -u, filter by time and priority, manage journal size
  • Cron jobs: crontab format, common schedules, always redirect output
  • Disk and filesystem management: df -h, du -sh, lsblk, emergency disk space cleanup
  • Package management with apt (Debian/Ubuntu) and dnf (RHEL/Fedora)
Example usage

User needs to diagnose high disk usage on a server. The agent runs df -h to check filesystem usage, du -sh /* | sort -rh to find the largest directories, drills into the biggest directory, and cleans up old logs with journalctl --vacuum-size and apt autoremove.


shell-scripting

Bash scripting best practices including error handling, argument parsing, and shellcheck compliance. Use when writing shell scripts, reviewing bash code, or automating tasks with shell commands.

Triggers: When writing new shell scripts, reviewing bash code, adding error handling, parsing command-line arguments, or fixing shellcheck warnings. Tools: Bash(shellcheck:*), Bash(bash:*), Read, Write References: references/bash-patterns.md

Key capabilities:

  • Script header: shebang (#!/usr/bin/env bash) and strict mode (set -euo pipefail)
  • Variable quoting: always double-quote expansions, ${var:-default} for defaults, ${var:?error} for required
  • Argument parsing with positional args and getopts for options
  • Functions with local variables, return values via stdout
  • Error handling and cleanup with trap cleanup EXIT
  • Arrays for safe file path handling with find -print0 and read -d ''
  • Common pitfalls: never parse ls, use [[ ]] over [ ], $(command) over backticks
  • Shellcheck compliance: run on every script, disable warnings locally with comments, never globally
Example usage

User needs a script with argument parsing. The agent writes a script with shebang, strict mode, a usage function, getopts for options, input validation, and a trap for temp file cleanup on exit.


dependency-audit

Audits project dependencies for vulnerabilities and outdated packages. Use when checking security posture or planning dependency updates.

Triggers: When the user asks to “check dependencies”, “audit security”, “update packages”, “are my dependencies safe?”, or before a release to verify dependency health. Tools: None References: None

Key capabilities:

  • Identify the package manager and run its audit tool: cargo audit, pip-audit, npm audit, govulncheck
  • Review findings by severity: critical/high (fix immediately), medium (plan for current sprint), low (track)
  • Update strategy: one dependency at a time, full test suite after each, check changelogs for breaking changes
  • Check for outdated packages: cargo outdated, pip list --outdated, npm outdated
  • Ongoing maintenance: monthly reviews, Dependabot/Renovate for automated PRs, document pinned versions
Example usage

User asks “Are my dependencies secure?” The agent runs the appropriate audit tool, summarizes findings by severity, and recommends specific version bumps for vulnerable packages. Flags any dependencies with no maintained alternatives.


repo-management

Repository stewardship across issues, change requests, commits, and pushes. Use when reconciling open issues or PRs/MRs, merging ready work, or committing and pushing local repository changes.

Triggers: When the user asks to “check all open issues”, “check all PRs”, “merge ready PRs”, “repo reconcile”, “commit and push all”, or “clean up the repository”. Tools: processkit-repo-management MCP server References: None

Key capabilities:

  • Provider detection for GitHub, GitLab, Gitea, Forgejo/Codeberg, Bitbucket Cloud, Azure DevOps, and SourceHut remotes
  • Local git inspection: branch, upstream, dirty state, ahead/behind, and push readiness
  • GitHub issue and PR listing through gh when authenticated
  • Guarded issue comments/closes, PR merges, local commits, and pushes
  • Dry-run reconciliation plans with blockers for unsupported providers, auth gaps, draft PRs, failing checks, and missing upstreams
Example usage

User asks “check all open issues and PRs, resolve what is ready, commit and push.” The agent detects the provider, lists supported remote work, plans blockers and safe actions, commits intended local changes, pushes the current branch, and only closes or merges remote items with evidence and required confirmation.


secret-management

Guides secure handling of secrets – env vars, .env files, vault patterns. Use when dealing with API keys, passwords, tokens, or credentials.

Triggers: When the user needs to handle API keys, passwords, tokens, database credentials, or asks “where should I put this secret?”, “is this safe?”, or “how do I manage credentials?”. Tools: None References: None

Key capabilities:

  • Never commit secrets to git: add .env to .gitignore, check history for leaked secrets, rotate if compromised
  • Local development: .env files with dotenv pattern, .env.example with placeholder values committed
  • CI/CD: platform secret stores (GitHub Secrets, GitLab CI Variables), OIDC tokens over long-lived credentials
  • Production: secrets managers (Vault, AWS Secrets Manager), rotate on 90-day schedule, short-lived tokens, least privilege
  • Code patterns: read from environment variables, never hardcode, never log secrets, separate secrets per environment
Example usage

User needs to add an API key for the payment provider. The agent adds PAYMENT_API_KEY= to .env.example, updates .gitignore to include .env, reads the key from os.environ["PAYMENT_API_KEY"] in code, and documents the required variable.

4.3.4 - Architecture Skills

Skills for software architecture, design patterns, and system design.


software-architecture

Analyzes codebases for architectural patterns and quality. Use when designing systems, creating ADRs, reviewing structure, or generating architecture diagrams.

Triggers: Designing systems, creating ADRs, reviewing code structure, generating C4 diagrams, applying SOLID/DRY/KISS principles Tools: None References: patterns.md

Key capabilities:

  • Analyze existing architecture by mapping module organization, dependency directions, and identifying violations (circular deps, layer skipping, leaky abstractions)
  • Suggest architecture patterns matched to project type (layered, hexagonal, modular monolith, microservices, pipe-and-filter, event-driven)
  • Create Architecture Decision Records (ADRs) with context, decision, and consequences
  • Review code for architectural violations: god modules, tight coupling, missing boundaries
  • Generate C4 diagrams (System Context, Container, Component) using Mermaid syntax
Example usage

“Review this project’s architecture” – Maps the dependency graph, identifies that controllers directly import database models (layer violation), suggests introducing a service layer with repository traits, and provides a C4 Level 3 component diagram of the proposed structure.


event-driven-architecture

Event-driven system design including event sourcing, CQRS, pub/sub, saga patterns, and message broker selection. Use when designing event-driven systems, implementing messaging, or reviewing async architectures.

Triggers: Designing event-driven systems, choosing message brokers, implementing event sourcing or CQRS, designing saga patterns, debugging async architecture issues Tools: None References: messaging-patterns.md

Key capabilities:

  • Evaluate whether event-driven design is a good fit for the system at hand
  • Choose messaging patterns: pub/sub, point-to-point, request-reply, competing consumers
  • Select message brokers (Kafka, RabbitMQ, NATS, SQS/SNS, Redis Streams) based on throughput, ordering, replay, and operational requirements
  • Implement event sourcing with append-only event streams, snapshots, and schema evolution
  • Design CQRS with separate write and read models, handling eventual consistency
  • Implement saga patterns (orchestration vs. choreography) for distributed transactions
  • Ensure reliability with idempotent consumers, dead letter queues, outbox pattern, and schema registries
Example usage

“Design an order processing system” – Analyzes the workflow (order placed, payment processed, inventory reserved, shipment created), recommends Kafka for event backbone with event sourcing on the order aggregate, designs an orchestration saga with compensating actions, and defines event schemas with Avro and a schema registry.


domain-driven-design

Domain-Driven Design strategic and tactical patterns. Bounded contexts, aggregates, value objects, and context mapping. Use when modeling complex domains, designing microservice boundaries, or reviewing domain models.

Triggers: Modeling complex business domains, defining microservice boundaries, reviewing domain models, creating ubiquitous language, refactoring monoliths Tools: None References: ddd-building-blocks.md

Key capabilities:

  • Establish ubiquitous language with precise domain term definitions aligned between code and domain experts
  • Strategic design: identify bounded contexts by mapping business capabilities and linguistic boundaries
  • Context mapping with patterns: Shared Kernel, Customer-Supplier, Conformist, Anti-Corruption Layer, Open Host Service, Published Language
  • Tactical design: aggregate design with small aggregates, single root, transactional boundaries, and ID-based references
  • Model entities (identity-based), value objects (attribute-based, immutable), and domain events (past-tense, immutable facts)
  • Design repositories, domain services, and factories following DDD principles
  • Identify anti-patterns: anemic domain model, god aggregate, leaking context, shared database
Example usage

“Design a domain model for an online store” – Identifies bounded contexts (Catalog, Ordering, Payment, Shipping, Inventory), defines aggregates (Product, Order with OrderLine, Shipment), uses value objects for Money, Address, and SKU, and maps context relationships with ACLs at integration boundaries.


system-design

System design methodology from requirements through capacity estimation to component design and trade-offs. Use when designing distributed systems, evaluating architectures, or preparing system design discussions.

Triggers: Designing distributed systems from scratch, evaluating scalability and reliability, performing capacity estimation, discussing architectural trade-offs Tools: None References: estimation-cheatsheet.md

Key capabilities:

  • Gather functional and non-functional requirements (scale, latency, availability, consistency, durability, cost)
  • Back-of-envelope capacity estimation: users to QPS, storage, bandwidth, and compute
  • High-level design with 5-10 major components following data flow from client inward
  • Component deep dives: API design, data model, scaling strategy, failure handling, caching
  • Trade-off analysis: consistency vs. availability, latency vs. throughput, simplicity vs. scalability
  • Apply scalability patterns: horizontal scaling, sharding, read replicas, caching layers, async processing, rate limiting, circuit breakers
Example usage

“Design a URL shortener” – Functional: create short URL, redirect, analytics. Estimates ~40 writes/s, ~4000 reads/s (100:1 ratio), ~10TB storage over 5 years. Designs a stateless API service with Redis cache for hot URLs, sharded database for URL mapping, Base62 encoding, CDN for redirect caching, and async event stream for analytics.

4.3.5 - Design & Visual Skills

Skills for frontend development, visual design, and creative production.


excalidraw

Generates Excalidraw diagrams programmatically as JSON. Use when creating architecture diagrams, flowcharts, or hand-drawn-style visuals for documentation.

Triggers: Creating architecture diagrams, flowcharts, system diagrams, or hand-drawn-style visuals for documentation Tools: None References: json-schema.md

Key capabilities:

  • Generate Excalidraw JSON files with proper structure (elements, appState, version 2 format)
  • Create element types: rectangles, ellipses, diamonds, lines, arrows, text, with configurable styles
  • Bind text labels to shapes for labeled diagrams
  • Follow layout guidelines: grid alignment (multiples of 20), consistent spacing, readable font sizes
  • Apply a semantic color palette (primary, secondary, success, warning, danger, neutral)
  • Produce architecture diagrams, flowcharts, and sequence-style diagrams
  • Embed in documentation as .excalidraw, SVG, or PNG
Example usage

“Create an architecture diagram for a web app with React frontend, Node API, and PostgreSQL” – Generates Excalidraw JSON with three labeled rectangles arranged left-to-right, connected by arrows labeled “HTTP/REST” and “SQL”, using blue for frontend, green for API, yellow for database.


frontend-design

Frontend architecture and UI design – component hierarchies, accessibility, performance, state management. Use when designing or reviewing frontend applications.

Triggers: Designing frontend architecture, building component hierarchies, implementing accessibility, optimizing performance, structuring React/Next.js projects Tools: None References: accessibility-checklist.md

Key capabilities:

  • Design component architecture with single-responsibility, container vs. presentational separation, and composition over configuration
  • Apply semantic HTML first (landmarks, correct elements, ARIA only when needed)
  • Implement WCAG 2.2 AA accessibility: keyboard navigation, focus management, color contrast, target size, motion preferences
  • Choose state management by complexity: useState, Context, Zustand/Jotai/Redux, TanStack Query, React Hook Form
  • Apply React/Next.js patterns: Server Components, Client Components, Suspense streaming, SSG/SSR/ISR
  • Optimize Core Web Vitals: LCP, INP, CLS with specific techniques
  • Select styling approaches: Tailwind CSS, CSS Modules, Vanilla CSS, CSS-in-JS with trade-off analysis
  • Structure Next.js App Router projects with route groups, layouts, and feature-based organization
Example usage

“Design the component structure for a dashboard” – Proposes a layout with Server Component shell (DashboardLayout), Suspense boundaries around data widgets, client components only for interactive charts and filters, and shared ui/ primitives for cards, tables, and badges.


infographics

Creates data-driven infographics and charts as SVG. Use when visualizing data, creating charts, or designing informational graphics.

Triggers: Creating charts, graphs, data visualizations, infographics, or visual summaries from data Tools: None References: best-practices.md

Key capabilities:

  • Generate standalone SVG files with proper viewBox, responsive scaling, and semantic structure
  • Map data to visuals: identify the message, choose encoding (position, length, angle, area, color), apply visual hierarchy
  • Select chart types based on data relationship: line for trends, bar for comparison, histogram for distribution, scatter for correlation, treemap for hierarchy
  • Apply visual design: 3-5 color palette, typography hierarchy, generous whitespace, direct data labels
  • Ensure accessibility: 4.5:1 contrast ratio, patterns alongside color, <title> and <desc> for screen readers
  • Avoid common pitfalls: truncated y-axis, 3D effects, pie charts with many slices, dual y-axes, rainbow colormaps
  • Alternative formats when appropriate: Mermaid, ASCII art, CSV with narrative
Example usage

“Create a bar chart comparing these quarterly revenues” – Generates a horizontal bar chart SVG with labeled axes, consistent color, data labels on each bar, a clear title, and source note. Uses a single brand color with opacity variation for visual hierarchy.


logo-design

Creates SVG logos with proper scalability, color theory, and variant generation. Use when designing logos, icons, or brand marks.

Triggers: Designing logos or brand marks, generating favicons, reviewing logo scalability, applying color theory to branding Tools: None References: design-principles.md

Key capabilities:

  • Apply logo design principles: simplicity (recognizable at 16x16), memorability, timelessness, versatility, appropriateness
  • Construct SVG logos with clean geometric shapes, proper viewBox, optimized paths, and meaningful groups
  • Apply color theory: monochromatic, complementary, analogous, triadic, split-complementary schemes with 2-3 color maximum
  • Handle typography in logos: font personality, custom ligatures, text-to-path conversion, optical spacing
  • Generate logo variants: full logo, icon/mark only, favicon (16x16, 32x32), monochrome, reversed (dark mode), social banner
  • Test and validate: render at multiple sizes, test on varied backgrounds, simulate colorblindness, verify single-color reproduction
Example usage

“Create a logo for my CLI tool called ‘flux’” – Designs a geometric mark suggesting flow/movement, pairs it with a clean sans-serif wordmark. Generates SVG with full logo, icon-only, monochrome, and reversed variants. Explains color choices and scaling behavior.


tailwind

Tailwind CSS v4 patterns – utility-first styling, responsive design, dark mode, component extraction. Use when building or reviewing Tailwind-based UIs.

Triggers: Building UIs with Tailwind CSS, styling components, setting up Tailwind, implementing responsive layouts or dark mode Tools: None References: cheatsheet.md

Key capabilities:

  • Set up Tailwind v4 projects with @import "tailwindcss" and @theme design tokens (no config file needed)
  • Apply utility-first principles: compose styles in markup, group by concern, avoid arbitrary values
  • Extract components in the framework (React/Vue/Svelte), not with @apply
  • Implement responsive design: mobile-first breakpoints, container queries, content width constraints
  • Configure dark mode with semantic color tokens and .dark class overrides
  • Use OKLCH color space, color-mix() via opacity modifiers, and multi-brand theming
  • Optimize performance: automatic unused CSS elimination, avoid dynamic class construction
  • Ensure accessibility: focus-visible: styles, motion-reduce:, sr-only, contrast compliance
Example usage

“Make this layout responsive” – Starts with a single-column mobile layout, adds sm: and lg: breakpoints for multi-column grids, uses container queries for self-contained components, and tests at 320px minimum width.


pixijs-gamedev

PixiJS 2D rendering and game development including sprites, animations, interactions, and WebGL/Canvas rendering. Use when building PixiJS applications, creating 2D games, or implementing interactive graphics.

Triggers: Building 2D games or interactive graphics with PixiJS, managing sprites, animation loops, event handling, or WebGL rendering Tools: Bash(npm:*) Bash(npx:*) Read Write References: api-cheatsheet.md

Key capabilities:

  • Set up PixiJS Application with await app.init(), responsive canvas, HiDPI rendering
  • Manage sprites and textures: Assets.load(), Spritesheet atlases, anchor centering, texture caching
  • Build display hierarchies with Containers, child transforms, zIndex sorting, ParticleContainer for bulk sprites
  • Implement animation: app.ticker.add() with deltaTime, GSAP tweening, AnimatedSprite frame playback
  • Handle interaction and events: eventMode, pointer events, custom hitArea, drag patterns, cursor styles
  • Draw vector graphics with Graphics(): shapes, chained fills/strokes, shared GraphicsContext
  • Apply filters and effects: BlurFilter, ColorMatrixFilter, DisplacementFilter, AlphaFilter
  • Load assets with bundles, progress callbacks, and lazy loading for secondary assets
  • Optimize performance: ParticleContainer, texture atlases, object pooling, GPU memory management
Example usage

“Set up a basic PixiJS game with a moving character” – Creates an Application, loads a character spritesheet via Assets, creates an AnimatedSprite, adds it to the stage, and uses app.ticker.add() to update position based on keyboard input.


mobile-app-design

Mobile app UX design including touch targets, navigation patterns, platform conventions, and accessibility. Use when designing mobile interfaces, reviewing mobile UX, or adapting web designs for mobile.

Triggers: Designing mobile interfaces, reviewing mobile UX, adapting web designs for iOS and Android, implementing touch interactions Tools: None References: platform-guidelines.md

Key capabilities:

  • Size touch targets correctly: 44x44pt (iOS) / 48x48dp (Android) minimum, with 8pt gaps between targets
  • Choose navigation patterns: tab bar (3-5 destinations), navigation drawer (5+), stack navigation, modal sheets
  • Design responsive layouts: smallest screen first (375pt/360dp), 4pt/8pt spacing grid, Dynamic Type support
  • Follow iOS vs. Android conventions: back navigation, button styles, alerts, typography, icons
  • Implement gesture patterns: tap, long press, swipe, pull to refresh, pinch to zoom – with visible alternatives
  • Ensure accessibility: screen reader support, 4.5:1 contrast, font scaling, reduced motion, VoiceOver/TalkBack testing
  • Design offline-first: cached content, offline indicators, action queuing, optimistic UI, conflict resolution
  • Handle push notifications: contextual permission requests, grouping, deep linking, in-app controls
  • Create onboarding flows: 3-5 screens max, show value first, progressive disclosure, skip option on every screen
Example usage

“Design the navigation for a banking app” – Recommends a bottom tab bar with 4 tabs (Accounts, Transfers, Cards, More), stack navigation for account details, a modal bottom sheet for quick transfer, and biometric authentication before sensitive actions. Places the primary CTA in the thumb-reachable zone.

4.3.6 - Data & Analytics Skills

Skills for data science, data engineering, and analytics workflows.


data-science

Data analysis workflow from import through modeling and communication. Covers tidy data, EDA, statistical reasoning, and visualization. Use when analyzing datasets, building statistical models, exploring data, or communicating findings.

Triggers: Analyzing datasets, exploring data, building statistical models, creating visualizations, cleaning messy data, communicating findings Tools: Bash(python:*) Bash(jupyter:*) Read Write References: tidy-data-principles.md, statistical-methods.md, visualization-guidelines.md

Key capabilities:

  • Import and clean data: inspect shape/dtypes/nulls, handle missing data explicitly, parse dates, validate assumptions
  • Reshape data to tidy form (one variable per column, one observation per row) using melt/pivot
  • Conduct exploratory data analysis: univariate distributions, bivariate relationships, outlier detection, groupby aggregations
  • Apply statistical reasoning: state the question first, check assumptions, report effect sizes alongside p-values, use confidence intervals
  • Perform feature selection: remove zero-variance features, handle multicollinearity, use domain knowledge then data-driven methods
  • Follow model selection workflow: start simple (baseline), add complexity only when justified, use cross-validation, document decisions
  • Visualize with best practices: titles, axis labels, colorblind-friendly palettes, annotations, publication-quality export
  • Communicate results: lead with findings, plain language, show uncertainty, include actionable “so what”
Example usage

“I have a CSV of customer transactions. Help me understand churn patterns.” – Loads the CSV, prints shape/dtypes/nulls, creates tidy time-series per customer, runs EDA with churn-rate distributions and cohort analysis, tests whether usage frequency differs between churned/retained groups (t-test with effect size), and produces annotated visualizations summarizing the key drivers.


data-pipeline

Data pipeline patterns including ETL/ELT, batch vs streaming, idempotency, and orchestration. Use when designing data pipelines, reviewing data workflows, or troubleshooting data processing.

Triggers: Designing data pipelines, choosing batch vs. streaming, implementing data ingestion or transformation, setting up orchestration, debugging pipeline failures Tools: Bash Read Write References: None

Key capabilities:

  • Choose between ETL and ELT based on target system capabilities and governance requirements
  • Decide batch vs. streaming: start with batch unless explicit real-time requirement, micro-batch as middle ground
  • Ensure idempotency: upserts, partition overwrite on rerun, deduplication by natural key hash
  • Implement data quality checks at each stage: row counts, null checks, value range validation, fail fast on violations
  • Manage schemas with registries, backward compatibility, versioning, and field documentation
  • Design backfill strategies with date-range parameters, partition overwrite, and progress tracking
  • Set up orchestration (Airflow, Prefect, Dagster) with explicit DAG dependencies, retries with exponential backoff, and SLA tagging
  • Monitor pipelines with alerts on failure/SLA breach, metadata logging, and dead letter queues for failed records
Example usage

“Design a pipeline to load daily sales data from an API into our warehouse” – Designs an ELT pipeline: extract (API call with pagination, save raw JSON to cloud storage), load (bulk insert into staging), transform (SQL in warehouse to clean, deduplicate, join). Adds date-range parameters for backfills, idempotent loads via partition overwrite, row-count checks, and an Airflow DAG with retries.


data-visualization

Data visualization best practices including chart selection, color accessibility, and dashboard design. Use when creating charts, designing dashboards, or reviewing data presentations.

Triggers: Creating charts, designing dashboards, choosing visualization types, improving chart readability, reviewing data presentations Tools: Bash(python:*) Read Write References: chart-selection.md

Key capabilities:

  • Select chart types by data relationship: bar for comparison, line for trend, histogram for distribution, scatter for relationship
  • Apply color and accessibility: colorblind-friendly palettes (viridis, cividis), sequential/diverging/categorical schemes, 7-color maximum
  • Annotate insights: max/min values, threshold lines, trend-change events, direct labels instead of legends
  • Design dashboard layouts: most important metric top-left, consistent grid, grouped by domain, filters at top, 6-8 visualizations max
  • Tell stories with data: lead with conclusion, context-finding-implication structure, progressive disclosure, highlight the relevant
  • Choose static vs. interactive: matplotlib/seaborn for reports, plotly/Altair/D3 for dashboards with tooltips and zoom
  • Avoid common mistakes: truncated y-axis on bars, dual y-axes, overplotting, missing units, default titles, excess decimal places
Example usage

“This dashboard has 15 charts and stakeholders say it is overwhelming” – Audits for redundancy, groups remaining charts by business domain, moves detail charts to drill-down pages, keeps 6 key metrics on the main view, and adds a summary card row at the top with KPIs and sparklines.


feature-engineering

Feature engineering for ML including encoding, imputation, scaling, selection, and time-series features. Use when preparing data for ML models, selecting features, or engineering new features from raw data.

Triggers: Preparing data for ML models, encoding categorical variables, handling missing data, creating new features, selecting features, building time-series features Tools: Bash(python:*) Read Write References: None

Key capabilities:

  • Encode categorical variables: one-hot (< 15 values), ordinal (natural order), target encoding (high cardinality, cross-validated), frequency encoding
  • Handle missing data: understand missingness mechanism (MCAR/MAR/MNAR), median/mode imputation, binary indicator columns, KNN/MICE for correlated features
  • Scale features: StandardScaler for linear models, MinMaxScaler for neural networks, RobustScaler for outlier-heavy data; tree models need no scaling
  • Select features: filter methods (correlation, mutual information), wrapper methods (RFE), embedded methods (L1, tree importance, permutation importance)
  • Engineer time-series features: lag values, rolling statistics, seasonal extraction (hour/day/month with sin/cos encoding), difference features, expanding statistics
  • Create text features: TF-IDF, count vectorizer, pre-trained embeddings, extracted features (length, sentiment, readability)
  • Build interaction and derived features: multiplication, ratios, polynomial terms, domain-driven binning, log transforms
  • Prevent data leakage: fit transformers on training data only, respect temporal ordering, use sklearn Pipeline
Example usage

“I have a dataset with user_id, city, purchase_amount, and timestamp. How should I engineer features?” – Target-encodes city with cross-validated means, extracts day_of_week/hour/is_weekend from timestamp, creates lag features for previous purchase amounts per user, adds rolling 7-day and 30-day purchase means, and creates a days_since_last_purchase feature, all wrapped in a sklearn Pipeline.


data-quality

Data quality framework covering completeness, accuracy, consistency, validation rules, and data contracts. Use when implementing data validation, setting up data quality checks, or defining data contracts.

Triggers: Implementing data validation, setting up quality checks for pipelines, defining data contracts between teams, investigating data anomalies Tools: Bash Read Write References: None

Key capabilities:

  • Evaluate data against six dimensions: completeness, accuracy, consistency, timeliness, uniqueness, validity
  • Define validation rules: schema validation, range checks, format checks, referential integrity, business rules, freshness checks – categorized by severity (error vs. warning)
  • Detect anomalies: track metrics over time (row counts, null rates, distinct values), alert on threshold deviations, monitor distribution shifts and schema changes
  • Define data contracts: formal agreements on schema, SLAs, quality thresholds, ownership – versioned and machine-readable (JSON Schema, protobuf, YAML)
  • Implement Great Expectations patterns: expectation suites per table, core expectations (row count, not null, unique, in set), pipeline integration
  • Set up data observability: metadata instrumentation, lineage graphs, health dashboards, automated root cause analysis
  • Place quality checks at pipeline boundaries with stored results, configurable thresholds, and the five critical checks (row count, null rate, duplicate rate, freshness, schema match)
Example usage

“Set up data quality checks for our customer table” – Implements checks across all six dimensions: completeness (null rate for email, name, created_at), uniqueness (customer_id has no duplicates), validity (email matches regex, status in allowed enum), consistency (country matches postal code format), timeliness (most recent created_at within 24 hours), and accuracy (spot check against CRM export).

4.3.7 - AI & ML Skills

Skills for AI/ML development, RAG pipelines, prompt engineering, and model evaluation.


ai-fundamentals

Core ML/AI concepts including model types, training pipelines, evaluation metrics, and neural network architectures. Use when explaining AI concepts, choosing model approaches, designing ML solutions, or reviewing AI-related code.

Triggers: Explaining ML/AI concepts, choosing model architectures, designing training pipelines, selecting evaluation metrics, debugging model performance (overfitting, leakage, class imbalance) Tools: None References: ml-concepts.md, math-foundations.md

Key capabilities:

  • Classify problems by learning paradigm: supervised, unsupervised, reinforcement, self-supervised
  • Match model types to problems: linear models for baselines, tree-based (XGBoost/LightGBM) for tabular data, neural networks for unstructured data, probabilistic models for uncertainty
  • Design correct training pipelines: data prep, train/val/test split before preprocessing, feature engineering, training, hyperparameter tuning, regularization, final evaluation
  • Select evaluation metrics by task: F1/AUC-ROC for classification, RMSE/MAE for regression, NDCG/MAP for ranking, BLEU/ROUGE for generation
  • Understand neural network architectures: MLP, CNN, RNN/LSTM, Transformer, GAN, VAE, diffusion models
  • Explain modern LLM concepts: attention, tokenization, pre-training + fine-tuning, RLHF, prompting strategies, scaling laws
  • Identify common pitfalls: data leakage, overfitting, underfitting, class imbalance, distribution shift, metric mismatch
Example usage

“Choose an approach for tabular customer churn prediction” – With 50K labeled rows of structured data, recommends gradient-boosted trees (XGBoost/LightGBM) with stratified k-fold cross-validation for the imbalanced target. Reports F1 and AUC-ROC. Baselines with logistic regression first, only considers neural approaches if tree models plateau.


rag-engineering

Retrieval-Augmented Generation pipeline design including document ingestion, chunking, embedding, vector stores, retrieval strategies, and evaluation. Use when building RAG systems, optimizing retrieval quality, or debugging RAG pipelines.

Triggers: Building RAG pipelines, choosing chunking/embedding/vector store strategies, debugging poor retrieval quality or hallucinations, evaluating RAG systems Tools: Bash Read Write References: chunking-strategies.md, retrieval-patterns.md, evaluation.md

Key capabilities:

  • Design end-to-end RAG architecture: indexing (parse, chunk, embed, store) and query (embed, retrieve, construct prompt, generate)
  • Ingest documents from PDF, HTML, and code with metadata extraction (source, title, section, page, date)
  • Choose chunking strategies: fixed-size with overlap, sentence-based, semantic chunking, recursive character, document-structure-aware
  • Select embedding models by domain, dimensionality, context window, and cost (OpenAI, nomic, bge, voyage)
  • Choose vector stores: FAISS for prototyping, Chroma for local dev, pgvector for Postgres shops, Qdrant for production, Pinecone for zero ops
  • Implement retrieval strategies: dense, sparse (BM25), hybrid search with RRF, reranking with cross-encoders, MMR for diversity, parent-document retrieval, multi-query
  • Construct effective prompts: context ordering, window budgeting, citation numbering, chunk deduplication, low-similarity handling
  • Evaluate with RAGAS metrics: context precision, context recall, faithfulness, answer relevance – using golden datasets of 50-100 triples
Example usage

“RAG answers miss relevant information” – Diagnoses by checking context recall against what should have been retrieved. Tries hybrid search (BM25 + dense), adds reranking with a cross-encoder, experiments with smaller chunk sizes, and tests each change against the eval set.


prompt-engineering

Prompt design patterns for LLMs including few-shot, chain-of-thought, structured output, and injection defense. Use when crafting prompts, optimizing LLM outputs, or building prompt-based features.

Triggers: Crafting or refining LLM prompts, improving output quality and consistency, designing system prompts, implementing structured output, defending against prompt injection Tools: None References: techniques-catalog.md

Key capabilities:

  • Structure prompts with role/context, task, constraints, examples, and input – using delimiters for separation
  • Apply core techniques: zero-shot, few-shot (2-5 diverse examples), chain-of-thought, self-consistency, structured output with JSON schema
  • Design system prompts: persona definition, hard constraints, output format, domain knowledge – versioned and tested
  • Tune temperature and sampling: 0.0-0.3 for factual/code, 0.5-0.8 for creative, top-p as alternative, appropriate max tokens and stop sequences
  • Defend against prompt injection: input sanitization, delimited input sections, output validation, privilege separation, canary tokens
  • Build reusable prompt templates with variable slots and systematic iteration (test on 10-20 inputs, identify failure modes, add constraints)
  • Evaluate prompts systematically: build eval sets of 20-50 pairs, score pass/fail or rubric-based, track metrics across versions
Example usage

“Classify support tickets into categories” – Designs a few-shot prompt with 3-5 example tickets per category including edge cases. Uses temperature 0.0 for consistency. Requests JSON output with category and confidence. Validates output schema programmatically and measures accuracy against a labeled test set.


llm-evaluation

LLM output evaluation including automated metrics, LLM-as-judge, A/B testing, and regression testing. Use when evaluating model outputs, building eval pipelines, or comparing prompt versions.

Triggers: Measuring LLM output quality, comparing prompt or model versions, building automated evaluation pipelines, setting up regression testing, detecting bias Tools: None References: None

Key capabilities:

  • Build evaluation datasets: 50-100 representative input/expected-output pairs from real usage, including edge cases, with metadata labels
  • Apply automated metrics: text overlap (BLEU, ROUGE, exact match), semantic similarity (BERTScore, embedding similarity), task-specific (Pass@k for code, schema compliance)
  • Implement LLM-as-judge: rubric with 3-5 criteria scored 1-5, temperature 0.0, mitigations for position bias, multi-judge averaging, calibration against human ratings
  • Conduct human evaluation: 3+ raters per example, clear rubrics, blinded to version, Cohen’s kappa for agreement
  • Run A/B testing: same eval set, automated + LLM-as-judge scoring, distribution comparison, significance testing, regression checking
  • Set up regression testing: golden test suite with expected outputs, threshold-based pass/fail in CI, trend alerting
  • Detect bias and safety issues: demographically diverse inputs, stereotyping/toxicity checks, red-teaming, refusal rate monitoring
  • Evaluate RAG pipelines with RAGAS: context precision, context recall, faithfulness, answer relevance
Example usage

“Systematically evaluate our customer support chatbot” – Builds a JSONL eval set from production logs, defines a rubric (accuracy, helpfulness, tone, escalation appropriateness), implements LLM-as-judge scoring, sets up a CI job that runs evals on every prompt change, and flags regressions beyond 5% on any metric.


embedding-vectordb

Vector embeddings and vector database patterns including model selection, similarity metrics, and index tuning. Use when building semantic search, choosing vector stores, or optimizing embedding pipelines.

Triggers: Choosing embedding models, selecting or migrating vector databases, optimizing semantic search, implementing hybrid search, tuning vector index parameters Tools: None References: None

Key capabilities:

  • Select embedding models: commercial (OpenAI text-embedding-3, Cohere embed-v3, Voyage) and open-source (nomic, bge, e5-mistral, MiniLM) with trade-offs on quality, dimensions, context window, latency, and cost
  • Use Matryoshka embeddings for dimension reduction (3072 to 1024 or 512) without retraining
  • Choose similarity metrics: cosine similarity (default), dot product (when magnitude matters), Euclidean (spatial clustering)
  • Select vector databases: FAISS (prototyping), pgvector (Postgres), Chroma (local dev), Qdrant (production), Weaviate (multimodal), Pinecone (managed), Milvus (billions of vectors)
  • Tune index types: HNSW (default, tune M/ef_construction/ef_search), IVF (large datasets, tune nlist/nprobe), PQ (memory-constrained)
  • Implement hybrid search: dense + sparse (BM25) with Reciprocal Rank Fusion
  • Configure metadata filtering and multi-tenancy with pre-filter strategy
  • Optimize embedding pipelines: batch processing, content-hash caching, normalization, chunk-before-embed ordering, monitoring
Example usage

“Add semantic search to a documentation site” – Recommends text-embedding-3-small for embedding, pgvector if Postgres is available (otherwise Qdrant). Implements hybrid search with BM25 for exact terms and dense retrieval for semantic matches. Chunks docs by section headers at 512 tokens and sets up a 50-query eval set to tune retrieval.


ml-pipeline

ML pipeline design including data versioning, experiment tracking, model deployment, and drift monitoring. Use when building ML pipelines, setting up MLOps, or reviewing ML infrastructure.

Triggers: Building ML pipelines from data to deployment, setting up experiment tracking, choosing deployment patterns, implementing drift monitoring, designing ML CI/CD Tools: Bash Read Write References: pipeline-stages.md

Key capabilities:

  • Design reproducible pipeline architecture: data collection through versioning, feature engineering, training, evaluation, registry, deployment, monitoring
  • Version data with DVC, Delta Lake, or immutable datasets in object storage with naming conventions
  • Set up feature stores (Feast, Tecton, Hopsworks) for consistent online/offline feature access, or skip for simple projects
  • Track experiments with MLflow, W&B, or Neptune: log git hash, dataset version, hyperparameters, metrics per epoch, model artifacts, environment
  • Manage model registry: versioned models with staging/production/archived lifecycle, model cards, promotion gates
  • Choose deployment patterns: shadow (validation), canary (gradual rollout), A/B test (business metrics), blue-green (instant rollback), feature flag (kill switch)
  • Monitor for drift: data drift (KS test, PSI), concept drift (prediction distribution shift, business metric tracking), operational metrics (latency, error rate, resource utilization)
  • Implement ML CI/CD: unit tests and smoke training on CI, full evaluation + bias checks + shadow deployment + canary rollout on CD
Example usage

“Debugging model degradation in production” – Checks data drift dashboard for feature distribution changes, looks for upstream pipeline failures, compares recent feature distributions to training data using PSI. If drift detected, identifies which features drifted and traces to root cause. If no drift, checks for concept drift by comparing predictions on recent labeled data. Recommends retraining on recent data if drift is confirmed.

4.3.8 - API & Integration Skills

Skills for API design, protocol patterns, and system integration.


api-design

REST API design including resource naming, HTTP methods, status codes, pagination, versioning, and OpenAPI specs. Use when designing APIs, reviewing API contracts, or writing OpenAPI/Swagger documentation.

Triggers: Designing a new REST API or extending an existing one, reviewing API contracts, writing OpenAPI/Swagger docs, choosing pagination or versioning strategies, defining error response formats. Tools: Bash Read Write References: rest-conventions.md, openapi-patterns.md

Key capabilities:

  • Resource naming conventions (plural nouns, kebab-case, shallow nesting)
  • HTTP method-to-CRUD mapping with correct status codes
  • Cursor-based and offset-based pagination patterns
  • Filtering and sorting via query parameters
  • URI path versioning and header versioning strategies
  • Consistent error response envelope format
  • Rate limiting headers (X-RateLimit-Limit, Remaining, Reset)
  • HATEOAS links for discoverable APIs
  • OpenAPI 3.1 spec authoring with reusable components
  • API design review checklist (8-point verification)
Example usage

Design a REST API for managing orders in an e-commerce system. The agent designs endpoints (POST, GET, PATCH, DELETE for /v1/orders and sub-resources), writes an OpenAPI 3.1 spec with shared schemas for Order, LineItem, Payment, and PaginatedResponse, and includes error envelope and rate limit headers.


graphql-patterns

GraphQL schema design, resolver patterns, N+1 prevention with DataLoader, and federation. Use when designing GraphQL APIs, implementing resolvers, or optimizing GraphQL performance.

Triggers: Designing a GraphQL schema, implementing resolvers, diagnosing N+1 query problems, adding pagination, setting up federation, evolving a schema without breaking clients. Tools: Bash Read Write References: None

Key capabilities:

  • Schema design from the client perspective (types, queries, mutations, subscriptions)
  • Resolver patterns (root, field, default) with thin resolver architecture
  • N+1 problem diagnosis and DataLoader batching/caching solution
  • Relay Connection Spec cursor-based pagination
  • Domain errors as union types for type-safe error handling
  • Apollo Federation with @key directives and subgraph composition
  • Schema evolution rules (safe additions, deprecation with @deprecated, breaking change avoidance)
  • Automatic persisted queries (APQ) for bandwidth and security
Example usage

A list query fetching 50 projects takes 3 seconds. The agent identifies N+1 queries (1 for projects + 50 for owner + 50 for taskCount), implements DataLoader for both fields, and drops response time to 120ms.


grpc-protobuf

Protocol Buffers schema design and gRPC service patterns including streaming, error handling, and backward compatibility. Use when designing gRPC services, writing .proto files, or implementing gRPC clients/servers.

Triggers: Designing .proto files, implementing gRPC services (unary, streaming), choosing communication patterns, handling errors with gRPC status codes, ensuring backward compatibility, adding interceptors. Tools: Bash(protoc:*) Bash(grpcurl:*) Read Write References: proto-conventions.md

Key capabilities:

  • Proto3 schema design with proper packaging, enums (UNSPECIFIED zero value), and timestamps
  • Four gRPC service patterns: unary, server streaming, client streaming, bidirectional
  • Dedicated Request/Response wrapper messages per RPC
  • Error handling with gRPC status codes (INVALID_ARGUMENT, NOT_FOUND, UNAVAILABLE, etc.)
  • Rich error details using google.rpc.Status with BadRequest/ErrorInfo
  • Backward compatibility rules and reserved field management
  • Interceptor chains for auth, logging, metrics, and validation
  • Tooling guidance: buf for linting/breaking change detection, grpcurl for invocation
Example usage

A price field needs to change from int32 to int64 but clients already use it. The agent adds a new price_cents (int64) field with a new number, deprecates the old field, populates both during migration, and runs buf breaking to confirm no violations.


webhook-integration

Webhook design and consumption including signature verification, idempotency, retry handling, and security. Use when implementing webhooks, designing event notification systems, or debugging webhook deliveries.

Triggers: Designing a webhook system for event notifications, implementing a webhook consumer, adding HMAC-SHA256 signature verification, debugging failed deliveries or duplicate processing, setting up dead letter queues. Tools: Bash(curl:*) Read Write References: None

Key capabilities:

  • Payload design with unique event IDs, dotted type names, and stable envelope format
  • HMAC-SHA256 signature verification with constant-time comparison and replay prevention
  • Idempotency via event ID deduplication with TTL-bounded storage
  • Retry handling with exponential backoff (sender) and async processing (consumer)
  • Dead letter queues for exhausted retries with replay tooling
  • Out-of-order event handling with version/sequence numbers
  • Local testing with ngrok/cloudflared and payload inspection tools
  • Security hardening: TLS-only, IP allowlisting, payload size limits, vault-stored secrets
Example usage

A webhook consumer processes some events twice and misses others. The agent finds missing idempotency checks (retries reprocessed) and synchronous heavy processing causing sender timeouts. Adds event ID dedup with a DB unique constraint, moves processing to a background queue, and returns 202 immediately. Success rate rises from 74% to 99.8%.

4.3.9 - Security Skills

Skills for application security, authentication, and threat analysis.


dependency-audit

Audits project dependencies for vulnerabilities and outdated packages. Use when checking security posture or planning dependency updates.

Triggers: Checking dependencies, auditing security, updating packages, verifying dependency health before a release. Tools: None References: None

Key capabilities:

  • Multi-ecosystem audit tool selection (cargo audit, pip-audit, npm audit, govulncheck)
  • Severity-based triage: critical/high (fix immediately), medium (this sprint), low (when convenient)
  • Update strategy: one dependency at a time, full test suite after each, changelog review
  • Outdated package detection (cargo outdated, pip list –outdated, npm outdated)
  • Ongoing maintenance: monthly reviews, Dependabot/Renovate automation, pinned version documentation
Example usage

User asks “Are my dependencies secure?” The agent runs the appropriate audit tool for the project’s package manager, summarizes findings by severity, and recommends specific version bumps for vulnerable packages. Flags any dependencies with no maintained alternatives.


secret-management

Guides secure handling of secrets – env vars, .env files, vault patterns. Use when dealing with API keys, passwords, tokens, or credentials.

Triggers: Handling API keys, passwords, tokens, database credentials, or asking where to store secrets and how to manage credentials. Tools: None References: None

Key capabilities:

  • Git secret prevention: .gitignore setup, history scanning, immediate rotation if committed
  • Local development: .env files with dotenv pattern, .env.example with placeholders
  • CI/CD: platform secret stores (GitHub Secrets, GitLab CI Variables), OIDC tokens over long-lived credentials
  • Production: secrets managers (Vault, AWS/GCP Secret Manager), 90-day rotation, least-privilege access
  • Code patterns: environment variable reads, no hardcoding, secret redaction in logs, per-environment isolation
Example usage

User needs to add an API key for a payment provider. The agent adds PAYMENT_API_KEY= to .env.example, updates .gitignore to include .env, reads the key from os.environ["PAYMENT_API_KEY"] in code, and documents the required variable.


auth-patterns

Authentication and authorization patterns including OAuth2, JWT, session management, and RBAC/ABAC. Use when implementing login flows, securing APIs, managing tokens, or designing permission systems.

Triggers: Implementing OAuth2 login flows, working with JWTs, designing session management, building RBAC or ABAC permission systems, securing API endpoints, reviewing authentication code. Tools: Bash Read Write References: oauth-flows.md, jwt-reference.md

Key capabilities:

  • OAuth2 flow selection by client type (Authorization Code, PKCE, Client Credentials, Device Authorization)
  • JWT best practices: validation (signature, exp, iss, aud), short expiry, RS256/ES256, JWKS rotation
  • Token refresh pattern with single-use rotating refresh tokens
  • Session management: cryptographic IDs, server-side storage, HttpOnly/Secure/SameSite cookies, idle and absolute timeouts
  • RBAC with permission-to-role mapping and role-to-user assignment
  • ABAC with policy evaluation based on subject, resource, action, and context attributes
  • API key patterns: prefixed keys, hashed storage, scoped permissions
  • CORS configuration with explicit origins (never wildcard with credentials)
  • Security review checklist (8-point verification for auth implementations)
Example usage

Add Google OAuth login to a React SPA. The agent implements the full PKCE flow: generates code_verifier and code_challenge, redirects to Google, exchanges the authorization code for tokens, stores the access token in memory (not localStorage), sets up silent refresh, and adds logout with token revocation.


secure-coding

Secure coding practices based on OWASP Top 10. Injection prevention, XSS mitigation, CSRF protection, input validation, and security headers. Use when reviewing code for security, implementing auth, or hardening web applications.

Triggers: Reviewing code for security vulnerabilities, implementing input validation or output encoding, adding security headers, preventing injection attacks, implementing CSRF protection, auditing for secrets exposure, hardening before production. Tools: Bash Read Write References: owasp-checklist.md

Key capabilities:

  • Input validation: allowlist over denylist, type/length/range/format checks, server-side enforcement
  • Context-aware output encoding (HTML body, attributes, JavaScript, URL, CSS)
  • Injection prevention: parameterized SQL queries, subprocess argument lists (no shell=True)
  • CSRF protection: anti-CSRF tokens, SameSite cookies, Origin/Referer verification
  • Security headers: CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy
  • Secrets management: environment variables, .gitignore patterns, per-environment isolation
  • Dependency security: regular audits, pinned versions, minimized dependency tree
  • Security review checklist (10-point verification covering input, output, auth, headers, secrets, deps)
Example usage

Review an Express.js app for security issues. The agent identifies SQL queries built with string concatenation, user input rendered without escaping, missing CSRF tokens, absent security headers, and a hardcoded API key. Writes fixes for each issue including parameterized queries, output encoding, csurf middleware, helmet with strict CSP, and environment variable migration.


threat-modeling

Threat modeling using STRIDE methodology. Data flow diagrams, trust boundaries, attack surface mapping, and risk assessment. Use when analyzing system security, designing secure architectures, or conducting security reviews.

Triggers: Designing a new system handling sensitive data, reviewing architecture for security, conducting threat assessments, identifying trust boundaries and attack surfaces, prioritizing security work by risk. Tools: None References: None

Key capabilities:

  • STRIDE methodology: Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege
  • Data flow diagram creation with processes, data stores, data flows, external entities, and trust boundaries
  • Trust boundary identification across network segments, privilege levels, and service boundaries
  • Systematic STRIDE analysis applied to each component and data flow
  • Risk assessment matrix (likelihood x impact) with Critical/High/Medium/Low ratings
  • Mitigation strategies mapped to each STRIDE category (MFA, encryption, audit logging, rate limiting, etc.)
  • Attack surface mapping across network, application, authentication, data, infrastructure, and human vectors
  • Structured output format with system description, DFD, assets, threat table, and prioritized recommendations
Example usage

Pre-launch security review focused on highest risks. The agent identifies missing webhook signature verification in the payment flow (Critical), no rate limiting on registration (High), admin panel accessible without VPN (Critical), and file uploads without type validation (High). Produces a prioritized punch list with specific mitigations.

4.3.10 - Observability Skills

Skills for logging, monitoring, tracing, and alerting in production systems.


logging-strategy

Structured logging strategy including log levels, correlation IDs, context propagation, and PII avoidance. Use when designing logging, reviewing log statements, or setting up log aggregation.

Triggers: Designing a logging approach, reviewing existing log statements, setting up log aggregation (ELK, Loki, CloudWatch), adding correlation IDs, deciding what to log and what to avoid. Tools: Bash Read Write References: structured-logging.md

Key capabilities:

  • Six log levels with clear usage guidance (TRACE through FATAL) and rules for choosing between them
  • Structured logging (JSON/key-value) over unstructured text for machine parseability
  • Correlation IDs: generate request_id at system boundary, propagate via X-Request-ID header, include in every log line
  • W3C Trace Context propagation with trace_id and span_id for distributed systems
  • MDC (Mapped Diagnostic Context) for transparent ID propagation
  • What to log: request summaries, state transitions, decision points, errors, performance data, lifecycle events, retries, external calls
  • What NOT to log: PII, secrets, sensitive business data, high-cardinality user input
  • Log aggregation: centralized systems, JSON ingestion, retention policies (hot/warm/cold), rotation by size or time
  • Performance considerations: lazy evaluation, avoid logging in tight loops, sampling, async appenders
  • Anti-pattern detection: log-and-throw, everything-at-INFO, string concatenation, missing context, swallowed exceptions
Example usage

A REST API in Python has no structured logging. The agent recommends replacing the stdlib logging formatter with structlog, configures a processor chain adding timestamp, level, service, and request_id with JSON output, adds middleware to generate and propagate request_id, and sets log level via environment variable.


metrics-monitoring

Application metrics and monitoring using RED/USE methods, Prometheus patterns, and SLO-based alerting. Use when instrumenting applications, designing dashboards, or setting up monitoring.

Triggers: Instrumenting an application with metrics, designing monitoring dashboards, setting up alerting, choosing metric types, defining SLIs/SLOs, applying observability methodology (RED, USE, golden signals). Tools: Bash Read Write References: metric-types.md

Key capabilities:

  • Four Golden Signals (Google SRE): latency, traffic, errors, saturation
  • RED method for request-driven services: rate, errors, duration (p50/p95/p99)
  • USE method for infrastructure resources: utilization, saturation, errors
  • Prometheus metric types: counter, gauge, histogram, summary with naming conventions
  • Dashboard design: golden signals first, percentile latency, layered dashboards, deployment markers
  • Alerting thresholds: symptom-based over cause-based, SLO burn-rate alerting, baseline-derived thresholds, multi-window alerting
  • SLI/SLO/SLA framework: quantitative indicators, target objectives, error budgets, budget-based feature freezes
  • Instrumentation checklist: endpoint RED metrics, dependency metrics, queue depth, connection pools, business metrics, runtime metrics
Example usage

Define SLOs for an e-commerce platform. The agent proposes three SLIs: availability (non-5xx > 99.95%), latency (p99 checkout < 1s at 99.9%), correctness (order-inventory match > 99.99%). Sets 30-day rolling windows, calculates error budgets (22 min/month for availability), and recommends multi-window burn-rate alerts.


distributed-tracing

Distributed tracing with OpenTelemetry including spans, traces, context propagation, and sampling strategies. Use when instrumenting distributed systems, debugging request flows, or setting up tracing infrastructure.

Triggers: Instrumenting a distributed system with tracing, debugging requests spanning multiple services, setting up OpenTelemetry, choosing sampling strategies, understanding latency across service boundaries. Tools: Bash Read Write References: None

Key capabilities:

  • Core concepts: traces, spans (with parent-child tree structure), context propagation, baggage
  • OpenTelemetry architecture: SDK, API, Exporter, Collector, auto-instrumentation
  • Instrumentation strategy: auto-instrumentation first, then manual spans for business logic
  • Span naming (component.operation), attributes (HTTP, DB, business context), and error recording
  • Context propagation: W3C Trace Context (traceparent/tracestate), B3, message queues, async boundaries
  • Head-based sampling: probabilistic and rate-limiting approaches
  • Tail-based sampling via OTel Collector: error-based, latency-based, and policy-based rules
  • Trace analysis for debugging: critical path identification, gap detection, fast-vs-slow comparison, waterfall analysis
  • Common pitfalls: missing propagation, over-instrumentation, sensitive data in attributes, no production sampling, broken async traces
Example usage

A checkout endpoint sometimes takes 10 seconds but usually 200ms. The agent searches for slow traces, examines the waterfall, and identifies 9 seconds spent calling the inventory service which makes sequential DB queries per item. Slow traces correlate with large carts (>20 items). Recommends batching the DB query and adding a cart.item_count span attribute.


alerting-oncall

Alert design and on-call practices including severity levels, runbooks, SLO-based alerting, and escalation policies. Use when designing alerts, writing runbooks, or improving on-call processes.

Triggers: Designing alerts for a service, writing runbooks, reducing alert fatigue, setting up escalation policies, implementing SLO-based alerting, improving on-call processes. Tools: None References: None

Key capabilities:

  • Alert severity levels: P1 (immediate, page), P2 (30 min, page), P3 (4 hours, ticket), P4 (1 business day, ticket)
  • Page vs ticket decision framework based on user impact and intervention urgency
  • SLO-based burn-rate alerting with multi-window thresholds (14.4x/5min+1hr for P1, 6x/30min+6hr for P2, 3x/2hr+24hr for P3)
  • Runbook template: what it means, likely causes, diagnosis steps, mitigation, escalation
  • Alert fatigue prevention: track volume (<2 pages/shift target), weekly review, merge related alerts, auto-resolve transients
  • Escalation policies: primary to secondary (10 min P1, 30 min P2), to engineering lead (1hr P1, 4hr P2), incident declaration
  • On-call handoff practices: consistent timing, written summaries, acknowledgment, shadow rotations for new members
  • Incident communication: dedicated channel, initial summary, 15-30 min updates, status page, post-incident review within 48 hours
Example usage

A team gets paged 15 times a week, mostly false alarms. The agent audits 30 days of alerts, categorizes by action taken (mitigated/auto-resolved/no-action), identifies the top 3 noisy alerts, raises thresholds or converts them to tickets, implements alert grouping, and sets a target of <2 pages per on-call shift with weekly alert review.

4.3.11 - Database Skills

Skills for SQL, data modeling, NoSQL patterns, and schema migrations.


sql-patterns

SQL query patterns, schema design, and optimization. Joins, CTEs, window functions, indexing, and anti-patterns. Use when writing SQL queries, designing schemas, optimizing database performance, or reviewing database code.

Triggers: Writing or optimizing SQL queries (joins, CTEs, window functions), designing or reviewing schemas, analyzing EXPLAIN plans, choosing indexing strategies, fixing slow queries, implementing pagination or analytical queries. Tools: Bash Read Write References: query-patterns.md, schema-design.md

Key capabilities:

  • Query construction: join types (INNER, LEFT, FULL OUTER, CROSS), CTEs over nested subqueries, window functions (RANK, LAG, SUM OVER)
  • Aggregation evaluation order: WHERE, GROUP BY, HAVING, window functions
  • Query optimization process: EXPLAIN plan reading, index verification, early filtering, anti-pattern avoidance
  • Anti-patterns: SELECT *, functions on indexed columns, NOT IN with NULLs, correlated subqueries, missing LIMIT, implicit type conversions
  • Indexing strategy: B-tree, Hash, GIN, GiST, composite (leftmost prefix rule), partial, covering (INCLUDE)
  • Transactions and concurrency: isolation levels (READ COMMITTED, REPEATABLE READ, SERIALIZABLE), SELECT FOR UPDATE, deadlock handling
  • Schema design basics: normalize to 3NF by default, surrogate keys, timestamps, foreign keys, named constraints
Example usage

A query is slow. The agent runs EXPLAIN ANALYZE, identifies a sequential scan on a 2M-row table caused by a function call on an indexed column in the WHERE clause. Rewrites the condition to use a range comparison, confirms the index is now used, and shows before/after execution times.


database-modeling

Data modeling approaches including ER diagrams, normalization, denormalization trade-offs, and schema evolution. Use when designing database schemas, evaluating data models, or planning schema migrations.

Triggers: Designing a database schema for a new feature or project, evaluating an existing data model, choosing between normalized and denormalized designs, modeling complex relationships, planning schema evolution. Tools: None References: modeling-patterns.md

Key capabilities:

  • Requirements gathering: entities, cardinality, access patterns, data volume, consistency requirements
  • Conceptual modeling with Mermaid ER diagrams and standard cardinality notation
  • Normalization to 3NF: atomic values (1NF), full key dependency (2NF), no transitive dependencies (3NF)
  • Denormalization trade-offs: summary tables, embedded lookups, materialized views – only when measured performance problems exist
  • Relationship patterns: junction tables, polymorphic associations, single/class-table inheritance, adjacency lists, nested sets, materialized paths, JSONB columns
  • Schema evolution: expand/contract pattern, nullable additions, additive-only changes, independent API/schema versioning
  • Polyglot persistence decisions: PostgreSQL as default, with guidance for Elasticsearch, Redis, TimescaleDB, Neo4j, MongoDB, Kafka by data type
Example usage

Model a comment system where comments can belong to posts, images, or videos. The agent presents three options: polymorphic association with commentable_type + commentable_id, separate junction tables per parent type, and shared parent table with class-table inheritance. Recommends separate junction tables for foreign key integrity, with a union view for display queries.


nosql-patterns

NoSQL database patterns for document, key-value, graph, and wide-column stores. Access-pattern-driven design and consistency models. Use when choosing or designing NoSQL data models.

Triggers: Choosing between NoSQL database types, designing document/key-value/graph/wide-column data models, optimizing access patterns, understanding consistency models, migrating between relational and NoSQL. Tools: None References: None

Key capabilities:

  • Store type selection: document (MongoDB), key-value (Redis, DynamoDB), wide-column (Cassandra), graph (Neo4j) – matched to access patterns
  • Access-pattern-driven design: list operations first, design data to serve queries directly, accept duplication
  • Document store patterns: embedding vs referencing decision criteria, bucket pattern for time-series
  • Key-value patterns: colon-separated hierarchical key naming, TTL caching, rate limiting with INCR+EXPIRE, sorted sets, streams
  • DynamoDB single-table design: composite PK/SK keys, multiple entity types per table, GSIs for alternate access patterns
  • Consistency models: strong, eventual, causal, read-your-writes – with practical guidance on when to use each
  • CAP theorem: AP vs CP trade-offs, default to eventual consistency unless stale reads cause financial or safety harm
Example usage

Design a Redis caching layer for an API. The agent proposes cache-aside with TTL-based expiration, keys following resource🆔variant naming, SET with EX for individual resources, sorted sets for paginated list caches, DEL on write-through for invalidation, and a circuit breaker fallback to the database if Redis is unreachable.


database-migration

Schema migration workflows including zero-downtime migrations, data backfills, and rollback strategies. Use when planning database migrations, reviewing migration scripts, or troubleshooting migration failures.

Triggers: Writing or reviewing schema migrations, planning zero-downtime migrations for production, backfilling data after schema changes, setting up migration tooling, rolling back failed migrations, avoiding locking and data loss. Tools: Bash Read Write References: None

Key capabilities:

  • Migration file structure: up/down scripts, sequential versioning, one logical change per migration, immutable once applied
  • Zero-downtime expand/contract pattern: add new structure, backfill and update code, remove old structure
  • Safe operations by database: PostgreSQL and MySQL compatibility matrix for ALTER TABLE operations
  • PostgreSQL-specific: CREATE INDEX CONCURRENTLY, NOT NULL with NOT VALID + VALIDATE CONSTRAINT
  • Data backfills: batch processing (1,000-10,000 rows), throttling with sleep between batches, replication lag monitoring
  • Rollback strategies: down migrations, forward-fix, point-in-time recovery (PITR) as last resort
  • Pre-production checklist: backup confirmation, staging test with production-like data, execution time measurement, rollback command ready
  • Version tracking with schema_migrations table; tool support for Flyway, Alembic, Knex, Diesel, Ecto, and others
  • Common pitfalls: large table locking, missing FK indexes, DDL inside long transactions, NULL handling during backfill, irreversible migrations without backup
Example usage

Rename the username column to handle without downtime. The agent plans a 3-step expand/contract migration: add handle column, deploy dual-write code and backfill in 5,000-row batches, then drop username once all reads are migrated. Writes three migration files with up/down scripts.

4.3.12 - Framework & SEO Skills

Skills for specific frameworks and search engine optimization.


reflex-python

Reflex Python web framework for building full-stack apps in pure Python. Components, state management, and deployment. Use when building Reflex apps, designing component hierarchies, or managing app state.

Triggers: When building web apps with Reflex, designing components, managing state, routing, or creating full-stack Python web applications. Tools: Bash(reflex:*) Bash(python:*) Read Write References: component-reference.md

Key capabilities:

  • App structure: initialization, entry points, page decorators, file-based routing, configuration
  • Component system: layout (box, flex, grid), display (text, heading, image), input (input, select, checkbox), feedback (alert, toast, spinner)
  • State management with rx.State classes, typed vars, event handlers, computed vars, and substates
  • Event handling: on_click, on_change, two-way binding, background tasks, event chaining
  • Styling with Radix UI design tokens, responsive props, light/dark themes
  • Routing with dynamic segments, programmatic navigation, on_load events, and 404 handling
  • Database integration via built-in SQLModel with automatic migrations
  • Deployment to Reflex Cloud or self-hosted via Docker

??? example “Example usage” Build a todo app: Defines a TodoState with a list of todos and input field, creates event handlers for add/delete/toggle, builds UI with rx.input, rx.button, and rx.foreach(TodoState.todos, render_todo) to render the list dynamically.


fastapi-patterns

FastAPI patterns including dependency injection, Pydantic models, async endpoints, middleware, and testing. Use when building FastAPI applications, designing API endpoints, or reviewing FastAPI code.

Triggers: When building APIs with FastAPI, designing endpoints, implementing dependency injection, authentication, or testing FastAPI applications. Tools: Bash(python:*) Bash(uvicorn:*) Read Write References: endpoint-patterns.md

Key capabilities:

  • Route definitions with HTTP method decorators, path/query parameters, and APIRouter modules
  • Pydantic models for request/response: separate Create/Update/Response schemas, validation with Field()
  • Dependency injection with Depends(), chained dependencies, Annotated for reusable deps, yield-based cleanup
  • Async endpoint patterns: when to use async def vs def, pairing with async libraries
  • Middleware: CORS, custom timing, trusted hosts, GZip compression
  • Authentication: OAuth2 password flow, JWT decoding, API key headers, scopes
  • Background tasks, WebSocket support, and structured error handling
  • Testing with TestClient, dependency overrides, async tests, and WebSocket testing

??? example “Example usage” REST API for a blog: Creates Pydantic schemas for PostCreate, PostResponse, CommentCreate, defines APIRouter modules for /posts and /posts/{id}/comments, implements CRUD handlers with SQLAlchemy dependency injection, and adds pagination to list endpoints.


pandas-polars

DataFrame operations with pandas and polars including groupby, joins, reshaping, and performance optimization. Use when manipulating tabular data, choosing between pandas and polars, or optimizing DataFrame code.

Triggers: When working with tabular data, performing DataFrame operations, data transformations, cleaning data, aggregating by group, or choosing between pandas and polars. Tools: Bash(python:*) Read Write References: api-comparison.md

Key capabilities:

  • Choosing between pandas (mature ecosystem, exploratory work, <1GB) and polars (faster, lower memory, lazy evaluation, 1GB+)
  • DataFrame I/O: Parquet over CSV, dtype enforcement, chunked reading, column selection
  • Selection and filtering with expressions (polars) and .loc[]/.iloc[] (pandas)
  • GroupBy and aggregation with named columns, window functions (over() in polars)
  • Joins and merges with explicit join types, duplicate checking, anti-joins
  • Reshaping with pivot and melt/unpivot for wide and long formats
  • Missing data handling: null counts, fill strategies, interpolation
  • String and datetime operations across both libraries
  • Performance optimization: lazy evaluation, avoiding apply(), categorical dtypes

??? example “Example usage” Process a large CSV with group statistics: Uses polars lazy mode to scan the CSV, applies filters before collection, groups by the requested column with multiple aggregations in one .agg() call, sorts results, and writes output to Parquet for downstream use.


flutter-development

Flutter/Dart development including widget architecture, state management, navigation, and cross-platform patterns. Use when building Flutter apps, choosing state management, or designing responsive mobile layouts.

Triggers: When building mobile or cross-platform apps with Flutter, designing widgets, managing state, adding navigation, or creating responsive layouts. Tools: Bash(flutter:*) Bash(dart:*) Read Write References: widget-catalog.md

Key capabilities:

  • Widget architecture: StatelessWidget vs StatefulWidget, composition over inheritance, const constructors
  • Layout system: Row, Column, Expanded, Flexible, Stack, ListView.builder, responsive design with LayoutBuilder
  • State management options: setState (local), Provider (lightweight DI), Riverpod (type-safe), BLoC (event-driven)
  • Navigation with GoRouter: declarative routes, nested navigation with ShellRoute, redirect guards, deep linking
  • Theming with Material 3, ColorScheme.fromSeed, dark mode support, custom TextTheme
  • Networking with http/dio, json_serializable, FutureBuilder/StreamBuilder, repository pattern
  • Platform channels for native code integration (MethodChannel, EventChannel)
  • Testing: unit, widget (testWidgets, pumpWidget), integration, and golden tests
  • Performance: const widgets, ListView.builder, RepaintBoundary, DevTools profiling

??? example “Example usage” Product list with search and pull-to-refresh: Creates a StatefulWidget with a search TextField, uses ListView.builder for efficient rendering, implements RefreshIndicator for pull-to-refresh, fetches products from a repository, and shows loading/error/empty states.


seo-optimization

SEO optimization including on-page SEO, technical SEO, Core Web Vitals, structured data, and mobile-first indexing. Use when optimizing websites for search engines, implementing structured data, or improving page performance.

Triggers: When optimizing a website for search engines, working with meta tags, structured data, page speed, Core Web Vitals, or mobile-first indexing. Tools: Bash(curl:*) Bash(lighthouse:*) Read Write References: technical-seo-checklist.md

Key capabilities:

  • On-page SEO: title tags, meta descriptions, heading hierarchy, alt text, internal links, URL structure
  • Technical SEO: robots.txt, XML sitemaps, canonical URLs, hreflang, redirect chains, index control
  • Structured data with JSON-LD: Article, Product, FAQ, BreadcrumbList, Organization schemas
  • Core Web Vitals optimization: LCP (<2.5s), INP (<200ms), CLS (<0.1) with specific fix strategies
  • Page speed: render-blocking resources, image compression (WebP/AVIF), CDN, minification, Brotli/gzip
  • Mobile-first indexing: responsive design, viewport meta, touch targets, content parity
  • Internal linking strategy: content hubs, descriptive anchor text, orphan page detection
  • Security and trust signals: HTTPS, HSTS, E-E-A-T authorship

??? example “Example usage” SEO audit of a Next.js site: Checks meta tags on key pages, verifies sitemap.xml and robots.txt, validates structured data with Rich Results Test, runs Lighthouse for Core Web Vitals, checks canonical URLs, and produces a prioritized list of fixes sorted by expected impact.

4.3.13 - Performance Skills

Skills for performance analysis, optimization, and load testing.


performance-profiling

Performance analysis methodology and profiling techniques for CPU, memory, and I/O. Flame graphs, benchmarking, and regression detection. Use when optimizing performance, profiling bottlenecks, or reviewing performance-critical code.

Triggers: When identifying bottlenecks, profiling CPU/memory/I/O, interpreting flame graphs, setting up benchmarks, or optimizing slow code paths. Tools: Bash Read Write References: profiling-tools.md

Key capabilities:

  • Follow the full performance analysis cycle: Identify, Measure, Profile, Optimize, Verify
  • CPU profiling with sampling profilers and flame graph generation
  • Memory profiling to detect leaks, allocation pressure, and unbounded growth
  • I/O profiling for disk, network, and database bottlenecks (N+1 queries, connection pooling, slow queries)
  • Benchmarking with statistical significance and regression detection
  • Flame graph interpretation: reading X-axis (alphabetical, not time), Y-axis (stack depth), and differential flame graphs
  • Common optimization patterns: algorithmic improvements, batching, caching, pooling, lazy evaluation, data layout

??? example “Example usage” Slow API endpoint: Measures end-to-end latency, profiles the handler, discovers 80% of time spent in 47 sequential database queries (N+1 problem). Rewrites as a single JOIN query, reducing response time from 3 seconds to 120ms.


caching-strategies

Caching patterns including cache-aside, write-through, TTL strategies, cache invalidation, and HTTP caching. Use when designing caching layers, optimizing response times, or debugging cache-related issues.

Triggers: When adding caching to reduce latency, choosing caching patterns, configuring HTTP caching headers, debugging stale data or cache stampede issues, or designing invalidation strategies. Tools: None References: None

Key capabilities:

  • Choose the right caching pattern: cache-aside, read-through, write-through, write-behind
  • Design TTL strategies with jitter to prevent thundering herd on expiration
  • Cache invalidation via event-driven, tag-based, or versioned key approaches
  • HTTP caching configuration: Cache-Control, ETag, CDN caching with s-maxage and Surrogate-Key
  • Prevent cache stampede with locking (mutex), probabilistic early expiration (XFetch), and stale-while-revalidate
  • Cache warming strategies for deploys and predictable access patterns

??? example “Example usage” Product page too slow: Profiles the endpoint and finds 3 database queries per request. Implements cache-aside with Redis: product data (TTL 10min), category tree (TTL 1hr), user-specific pricing (TTL 60s, private). Adds stale-while-revalidate to HTTP headers. Response time drops to 45ms on cache hit.


concurrency-patterns

Concurrency and parallelism patterns including async/await, threads, actors, channels, and deadlock prevention. Use when designing concurrent systems, debugging race conditions, or choosing between concurrency models.

Triggers: When choosing between threads, async/await, or actors; designing concurrent pipelines; debugging deadlocks or race conditions; implementing producer-consumer or fan-out/fan-in patterns. Tools: None References: patterns-catalog.md

Key capabilities:

  • Distinguish concurrency from parallelism and choose based on I/O-bound vs CPU-bound bottlenecks
  • Choose the right model: async/await, OS threads, green threads, actors, channels, or thread pools
  • Manage shared state safely with Mutex, RwLock, and atomic operations
  • Prevent deadlocks via lock ordering, try-lock with timeout, reduced lock scope, and lock-free algorithms
  • Detect and fix race conditions using ThreadSanitizer, cargo miri, and pattern recognition (TOCTOU, partial init)
  • Implement backpressure with bounded channels, rate limiting, load shedding, and reactive streams

??? example “Example usage” Go service deadlocks under load: Enables mutex profiling with GODEBUG=mutexprofile, identifies two goroutines acquiring locks on userCache and sessionCache in opposite orders. Fixes by establishing consistent lock ordering and reducing the critical section.


load-testing

Load testing methodology including test types, scenario design, and capacity planning. Use when planning load tests, analyzing test results, or setting up performance testing in CI.

Triggers: When planning or running load tests, choosing tools, designing test scenarios, analyzing results, estimating capacity, or setting up performance testing in CI pipelines. Tools: Bash Read Write References: None

Key capabilities:

  • Choose the right test type: smoke, load, stress, spike, and soak/endurance tests
  • Design realistic scenarios with user journeys, think time, traffic distribution, and authentication
  • Capture essential metrics: latency percentiles (p50/p95/p99), throughput (RPS), error rate, and resource utilization
  • Tool selection guidance: k6, Locust, Gatling, wrk, hey, vegeta
  • Identify bottlenecks from results: linear latency climb, periodic spikes, error thresholds, throughput plateaus
  • Capacity planning: find throughput ceiling, calculate headroom, estimate scaling needs
  • CI integration with performance gates and relative thresholds

??? example “Example usage” Pre-Black Friday load test: Designs a test plan with smoke test first, then load test at 2x normal traffic, then stress test at 5x to find the breaking point. Uses k6 with scenarios modeling the top 5 user journeys weighted by actual traffic distribution. Configures thresholds at p95 < 500ms and error rate < 0.1%.

5 - Packages

The package tiers, from a minimal bootstrap context to a fully managed workspace.

Packages are opinionated bundles of skills. Pick one tier as your starting point, then add or remove skills through your installer or local package metadata when you need a narrower context.

In v1 alpha, profiles are release-owned visible files. Select one with processkit plan --profile <name> and install the reviewed plan. The native installer records ownership; do not assemble a v1 profile by copying selected directories manually.

The five tiers

PackageExtendsBest for
minimalSolo developers, side projects, early-stage experiments
managedminimalSmall teams who want a shared backlog and cadence rituals
softwaremanagedEngineering teams building production software systems
researchmanagedData science, ML, and research-heavy projects
productsoftwareFull product teams: engineering + design + product ops

managed is the recommended default. Start there and add skills as needed rather than starting with software or product.

What each tier adds

Each tier is cumulative — higher tiers include everything below them.

TierKey additions over the tier below
minimalBacklog (WorkItem), event-log, actor-profile, git-workflow, debugging, testing-strategy, error-handling
managedRoles, decisions (DecisionRecord), scopes, standup, session-handover, retrospective, release-semver, code-review, refactoring, TDD, documentation, dependency-management
softwareArchitecture, API design, databases, infrastructure (Docker, k8s, Terraform), security (OWASP, auth), observability, performance
researchData science, data pipeline, data quality, feature engineering, pandas/polars, RAG, ML pipeline, prompt engineering, LaTeX, infographics
productFrontend design, mobile design, logo design, FastAPI, TypeScript, Flutter, Tailwind, Reflex, SEO, PRD writing, user research

How composition works

Packages compose via spec.extends. The effective skill set of a package is the union of its parent(s)’ effective skill sets plus its own includes.skills. Cycles are not allowed.

minimal ── managed ── software ── product
                   └─ research

Using a package

With the v1 CLI:

processkit plan \
  --root . \
  --distribution /path/to/processkit-v1.0.0-alpha.5 \
  --profile software \
  --harness codex

Managed v0 installers can continue to expose package selection through their configuration. For example, aibox uses:

# aibox.toml
[processkit]
source = "https://github.com/projectious-work/processkit.git"
version = "v0.28.4"

[context]
packages = ["software"]

Creating a project package

For deeper customization, create your own package file under context/packages/:

---
apiVersion: processkit.projectious.work/v1
kind: Package
metadata:
  id: PKG-my-team
  name: my-team
  version: "1.0.0"
spec:
  description: "Custom bundle for my team."
  extends: [managed]
  includes:
    skills:
      - rust-conventions
      - auth-patterns
      - logging-strategy
---

then reference it from your installer or package selection config:

[context]
packages = ["my-team"]

Source files

Each tier is defined in a YAML file in src/.processkit/packages/ : minimal.yaml, managed.yaml, software.yaml, research.yaml, product.yaml. The YAML is the source of truth; these docs pages summarize the intent.

Why packages are standalone

processkit packages are content, not environment machinery:

  • Reusable content. The skills, schemas, and MCP servers in processkit work with any compatible agent harness or MCP client. They are not tied to a specific devcontainer implementation.
  • Forkable catalog. Organisations can maintain a private fork of processkit with custom skills, schemas, and MCP servers. That fork is consumable by any installer that can copy the release files and launch the MCP commands.
  • Independent release cadence. Content (skills, primitives) changes more frequently than infrastructure. Keeping packages in processkit lets users update process content without changing their harness.

5.1 - minimal

Intended for: solo developers and small side projects. Extends: — (the base tier)

The lightest footprint package. Just enough structure to track work and debug effectively — no roles, no scopes, no governance artifacts.

Included skills

  • event-log — foundation: probabilistic append-only event log
  • actor-profile — basic Actor entities
  • workitem-management — WorkItem creation and transitions
  • git-workflow — branch/commit/PR conventions
  • debugging — systematic debug workflow
  • testing-strategy — unit vs integration vs E2E guidance
  • error-handling — cross-language patterns

When to upgrade

  • You’re joining a team → managed
  • You need formal decision records, scopes, and process artifacts → managed
  • You’re building production software → software
  • You’re doing data/ML work → research
  • You need the kitchen sink → product

Source

src/packages/minimal.yaml

5.2 - managed

Intended for: small teams with a shared backlog and process cadences. Extends: minimal

The recommended default. Adds roles, decisions, scopes, and all lightweight process artifacts (standups, retros, session handovers) on top of minimal.

What managed adds on top of minimal

Process primitives and cross-cutting process skills: role-management, decision-record, scope-management, category-management, cross-reference-management, binding-management, process-management, state-machine-management, gate-management, schedule-management, constraint-management, discussion-management, metrics-management.

process-management, schedule-management, and state-machine-management are included for legacy v1 migration guidance. They are not first-class v2 primitive authoring surfaces.

metrics-management remains a managed-package skill, but Metric is no longer a primitive. Metric specifications are tracked as artifacts and observations as LogEntries or external time-series data.

Lightweight process artifacts: backlog-context, decisions-adr, standup-context, session-handover, context-archiving, retrospective, estimation-planning, code-review, documentation, refactoring, tdd-workflow, incident-response, postmortem-writing, release-semver, integration-testing, dependency-management.

When to upgrade

  • You need production-grade infrastructure, observability, and security skills → software
  • You need data/ML skills → research
  • You need design + frontend + everything → product

Source

src/packages/managed.yaml

5.3 - software

Intended for: software engineering teams building production systems. Extends: managed

The “serious software team” tier. Adds architecture, API, database, infrastructure, security, observability, and performance skills on top of managed.

Highlights

  • Architecture: software-architecture, system-design, domain-driven-design, event-driven-architecture, concurrency-patterns
  • API: api-design, graphql-patterns, grpc-protobuf, webhook-integration
  • Database: database-modeling, database-migration, sql-patterns, sql-style-guide, nosql-patterns, caching-strategies
  • Infrastructure: ci-cd-setup, container-orchestration, dockerfile-review, kubernetes-basics, terraform-basics, linux-administration, dns-networking, shell-scripting
  • Security: auth-patterns, secret-management, secure-coding, threat-modeling, dependency-audit
  • Observability: logging-strategy, metrics-monitoring, alerting-oncall, distributed-tracing
  • Performance: performance-profiling, load-testing

When to upgrade

Only if you also need design, mobile, frontend framework skills → product.

Source

src/packages/software.yaml

5.4 - research

Intended for: research teams, data science projects, ML engineering. Extends: managed

Managed plus data, ML, AI, and research-documentation skills.

Highlights

  • Data: data-science, data-pipeline, data-quality, data-visualization, feature-engineering, pandas-polars, database-modeling, sql-patterns
  • AI/ML: ai-fundamentals, ml-pipeline, prompt-engineering, llm-evaluation, embedding-vectordb, rag-engineering, code-generation
  • Research authoring: latex-authoring, documentation, infographics, excalidraw
  • Infrastructure bits research projects touch: shell-scripting, container-orchestration

Source

src/packages/research.yaml

5.5 - product

Intended for: end-to-end product development teams. Extends: software

The most comprehensive tier. Software plus design, mobile, framework, and product-specific skills. Use when engineering, design, research, and operations all live in the same repository.

What product adds on top of software

  • Design: frontend-design, mobile-app-design, logo-design
  • Framework: fastapi-patterns, tailwind, typescript-patterns, flutter-development, reflex-python
  • Data subset: data-visualization, feature-engineering, ai-fundamentals, prompt-engineering, llm-evaluation
  • Language conventions: python-best-practices, rust-conventions, go-conventions, java-patterns
  • Documentation: latex-authoring, excalidraw, infographics
  • Product ops: seo-optimization, agent-management

When NOT to use product

If you don’t actually need design, mobile, or framework skills — stick with software. The product tier is large and expecting every team to manage it is false economy.

Source

src/packages/product.yaml

6 - Processes

Process templates that sequence skills into a repeatable workflow.

A v1 Process was a declarative workflow definition: a sequence of steps, roles, gates, and definition of done. In the SmoothTiger/SmoothRiver v2 direction, processkit does not ship Process as a first-class entity surface. A concrete run is a process-instance WorkItem; a reusable definition is an Artifact; gates and bindings hold the enforceable policy around the run.

processkit still does not execute workflows. Agents, humans, schedulers, or CI systems perform the work and record progress through MCP tools.

This remains true in v1 alpha: the Rust CLI owns release and filesystem lifecycle, while Python MCP tools and visible process definitions own domain workflow behavior.

Shape

Legacy v1 shape:

---
apiVersion: processkit.projectious.work/v1
kind: Process
metadata:
  id: PROC-code-review
spec:
  name: code-review
  description: "Review a pull request before merge."
  triggers: [pr.opened, pr.review-requested]
  roles: [developer, reviewer]
  steps:
    - name: author-self-check
      role: developer
      uses_skill: code-review
    - name: peer-review
      role: reviewer
      uses_skill: code-review
      gates: [GATE-no-blocking-comments]
    - name: approval
      role: reviewer
      gates: [GATE-code-review-passed]
    - name: merge
      role: developer
      gates: [GATE-ci-passed, GATE-code-review-passed]
  definition_of_done: "PR merged with approval and CI green."
---

v2 shape

For v2 documentation and checks, use:

  • WorkItem with spec.type: process-instance for the run.
  • Artifact for a process definition, referenced from the WorkItem.
  • Gate for pass/fail checkpoints.
  • Binding for policy, budget, scope, and time-window relationships.

pk-doctor’s v2_contracts check verifies that process-instance WorkItems point at a definition.

See also

7 - Installer and releases

Standalone installation, trust, compatibility, and integrations.

The v1 standalone installer makes processkit independently installable, updatable, verifiable, and removable. Release policy is carried by the signed processkit distribution rather than hard-coded into downstream tools.

v1.0.0-alpha.5 implements the local lifecycle, exact-version bootstrap, native runtime diagnosis, MCP supervision, and trust boundary. Four-platform publication requires locally produced and natively smoke-tested outputs from each supported host architecture; no hosted build service is used.

7.1 - CLI and automation interfaces

Human lifecycle commands and the stable automation protocol.

processkit has two deliberately separate command interfaces. Human lifecycle commands optimize for reviewable output and safe project operation. The machine interface uses a versioned JSON request and result contract for aibox and other automation.

Release and development status: v1.0.0-alpha.5 supports the local lifecycle commands below except doctor and mcp. The v1.x-dev line adds read-only native diagnosis and MCP supervision for the next prerelease. Commands in “Target human lifecycle” remain planned unless listed as current.

Current v1 alpha commands

The current prerelease supports:

processkit plan
processkit install
processkit update
processkit verify
processkit verify-release
processkit doctor
processkit mcp verify
processkit mcp prepare
processkit mcp prepare --offline
processkit mcp serve --transport stdio
processkit mcp proxy --url http://127.0.0.1:8000/mcp
processkit inspect-compatibility
processkit migrate-v0
processkit recover
processkit uninstall
processkit execute --request request.json

plan, install, update, compatibility inspection, and migrate-v0 currently require an explicit local release directory through --distribution. Mutating commands also require --yes. This makes the alpha suitable for offline use and for callers that already acquire and verify an exact release.

migrate-v0 --plan-only emits exact-release and corpus dispositions without modifying either the source or the empty target. Omit --plan-only and add --yes only after every blocking finding is resolved.

For example:

processkit plan \
  --root . \
  --distribution /path/to/processkit-v1.0.0-alpha.5 \
  --profile managed \
  --harness codex

Target human lifecycle

The human-facing CLI will grow into these lifecycle groups without changing the Python implementation of the MCP servers:

processkit init
processkit plan
processkit install
processkit update
processkit verify
processkit inspect
processkit migrate
processkit recover
processkit uninstall
processkit package
processkit harness
processkit mcp

Human commands will eventually resolve an exact canonical version and verify its signed release metadata before planning. --distribution will remain the explicit offline and development override. Moving branches and unverified latest URLs are not release identities.

The Rust mcp command will diagnose and supervise the installed Python gateway. It will not become a second MCP implementation. Direct uv run .../server.py configurations remain supported.

Stable machine interface

Automation uses:

processkit execute --request request.json

The request and result use the versioned installer schema. The request names the target root, operation, release input, profiles, harnesses, and mutation acknowledgement. The command emits one result envelope. Callers must use its status and the process exit code rather than parse human output.

The execute protocol remains the opaque aibox integration boundary. New human commands may compile their intent into the same internal operations, but they must not silently change the versioned machine contract.

See the installer contract for transaction, ownership, and recovery guarantees and aibox integration for the consumer protocol.

7.2 - Generated CLI Reference

Generated from the processkit v1.0.0-alpha.5 executable.

Do not edit this page by hand. Regenerate it with uv run scripts/generate-v1-docs.py.

Native lifecycle CLI for processkit projects

Usage: processkit <COMMAND>

Commands:
  plan                   Produce a deterministic, non-mutating installation plan
  install                Install a verified release into a new or empty target project
  recover                Roll back or finalize incomplete installer transactions
  uninstall              Remove unchanged files owned by a prior installation
  update                 Update unchanged managed files from a verified release
  verify-release         Verify a signed local release against an explicit local trust store
  verify                 Verify installed provenance and report managed-path drift
  inspect-compatibility  Inspect a legacy processkit tree without mutating it
  migrate-v0             Transition an exact v0 release into a fresh v1 target
  doctor                 Diagnose the installed project and Python MCP runtime without mutation
  mcp                    Verify or supervise the shipped Python MCP gateway
  execute                Execute one versioned installer request and emit one result envelope
  help                   Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

7.3 - Rust Library API

Supported typed integration surface for the processkit executable.

The processkit crate exposes the versioned request envelope used by processkit execute --request. The supported alpha surface is intentionally small:

  • API_VERSION identifies the machine protocol;
  • Operation enumerates supported lifecycle operations; and
  • InstallerRequest constructs and serializes typed request envelopes.

Build and test the API documentation with:

cargo test --doc --locked --manifest-path installer/Cargo.toml
cargo doc --locked --no-deps --manifest-path installer/Cargo.toml

Public items follow semantic versioning within the v1 release line. Modules and functions not reachable from the crate root are internal implementation details and may change between prereleases. Filesystem transactions, release verification, and lifecycle execution remain behind the executable boundary; the library does not offer an alternate mutation path.

7.4 - Installer Contract

Trust, ownership, transaction, and automation guarantees for the v1 lifecycle CLI.

Alpha.4 status: Implemented for explicit local distributions and signed local releases. Canonical online release acquisition is not implemented.

The standalone installer consumes only a release directory or verified archive explicitly supplied by its caller. It has no built-in release URL, package layout, MCP inventory, or harness policy.

The release-owned contract is under .processkit/installer/. Protocol processkit.projectious.work/installer/v1alpha1 supports deterministic planning plus transactional install, update, uninstall, and recovery. copy/v1 and preserve-user/v1 are the closed payload operations.

Consumers invoke the opaque request/result boundary:

processkit execute --request installer-request.json

The request selects an operation, arbitrary target root, release directory, profiles, harness intent, and explicit mutation acknowledgement. The command prints exactly one JSON result. A non-zero exit and status: invalid indicate an unsuccessful request.

Target-local state belongs in .processkit/state.json; it is never copied back into a release payload. Every mutation uses a target-local lock, staging tree, backups, and persisted action journal. After interruption, a caller runs a recover request; recovery either rolls back the old state or finalizes the new state and refuses ambiguous evidence.

Harness adapters consume the canonical MCP catalogue and own only their named managed keys. Existing unrelated JSON keys survive install and uninstall.

Release creation and verification are local operations. Repository scripts run the authoritative tests, build the archive, sign a release envelope with a locally held Ed25519 key, and verify it against a local trust-store document. The Rust executable verifies the exact signed envelope bytes and archive digest natively. Updates reject downgrades and same-version equivocation. No hosted CI or publication service is part of the contract.

The authoritative local gate is:

scripts/test-installer-local.sh

It includes Rust formatting, Clippy, unit/integration tests, signature and tamper tests, an arbitrary-directory lifecycle pilot, contract validation, package smoke testing, and the derived-project health check.

The implementation is split across focused release, request, planning, transaction, state, compatibility, output, and typed-error modules. A separate reusable Rust library crate and fully documented public API remain future refactoring work.

7.5 - Python MCP runtime contract

Supported Python, uv, dependency, cache, and transport behavior.

Python is an intentional processkit runtime dependency. It implements the MCP servers; it is not required by the Model Context Protocol itself. The native Rust CLI owns installation and lifecycle safety. Native diagnostics and process supervision wrap that Python implementation; they do not reimplement MCP behavior.

Current alpha requirements

  • Python 3.10 or newer must be discoverable by uv.
  • uv must support PEP 723 script metadata.
  • The installed gateway script and processkit shared Python library must be readable from the selected project root.
  • The first preparation may require network access to populate the uv cache.
  • Direct uv run startup remains a supported compatibility and development interface.

Every shipped MCP entry point declares its Python constraint and dependencies in a PEP 723 block. The gateway currently declares:

requires-python = ">=3.10"
dependencies = [
  "mcp[cli]>=1.0,<2.0",
  "pyyaml>=6.0",
  "jsonschema>=4.0",
  "jinja2>=3.1",
  "httpx>=0.27",
  "sqlite-vec>=0.1.0",
]

The release manifest records a digest of every server dependency header. Changing a header requires regenerating that manifest and restarting the server.

The release also ships .processkit/installer/runtime/python-uv.json. This deterministic policy is generated exclusively from the MCP servers under the release’s src/context/ producer tree. It records each server header, its dependency profile, and an aggregate digest. Installed projects receive it as .processkit/runtime/python-uv.json.

The release also installs a universal, hash-checked requirements lock at .processkit/runtime/python-requirements.lock. The policy binds its SHA-256. Runtime preparation refuses a missing, symlinked, unhashed, or digest-mismatched lock and passes the lock directly to uv.

Dependency and cache behavior

uv resolves PEP 723 dependencies and stores downloaded artifacts and environments in its user cache. Operators may select a separate cache through UV_CACHE_DIR. The cache must remain outside processkit’s managed project content; normal MCP startup must not modify context/, src/context/, or tracked configuration.

Resolved runtime versions and distributions are locked with hashes. A cold offline installation still requires a prepared cache because wheels are not embedded in the release. Prepare the locked runtime into the selected cache:

processkit mcp prepare --root .
processkit mcp prepare --root . --cache-dir /absolute/cache/path

Then prove that the same policy is usable without network resolution:

processkit mcp prepare --root . --offline
processkit mcp prepare --root . \
  --cache-dir /absolute/cache/path \
  --offline \
  --json

Offline verification fails if the cache directory is absent, symlinked, or cannot satisfy any dependency profile. Preparation validates the installed policy identity, aggregate digest, profile digests, representative server paths, dependency strings, and Python constraints before invoking uv without a shell.

Startup and transport

Direct gateway startup is:

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport stdio

The gateway also supports streamable HTTP on loopback and a stdio proxy. A non-loopback HTTP listener requires an explicit deployment security layer; processkit does not expose it remotely by default.

The v1.x-dev line implements the first read-only native diagnostic:

processkit doctor --root . --json
processkit doctor --root . --category drift

It validates the project root and doctor script, probes uv, launches the authoritative Python doctor without a shell, and wraps its structured result in processkit.projectious.work/runtime/v1alpha1. It intentionally exposes no fix flags.

The v1.x-dev line also implements the native supervision interface:

processkit mcp verify
processkit mcp prepare
processkit mcp prepare --offline
processkit mcp serve --transport stdio
processkit mcp serve --transport streamable-http
processkit mcp proxy --url http://127.0.0.1:8000/mcp

These commands validate a regular, non-symlink gateway path and launch uv with a direct argument vector, without shell interpretation. The child is scoped to the canonical project root and its exit status is preserved. Streamable HTTP and proxy URLs are restricted to explicit loopback hosts; remote exposure remains an operator-owned deployment concern.

Diagnostic contract

The native doctor preserves Python findings, reports whether it is running on a local host or in a container, and lists deferred host-only checks with stable IDs, severity, and remediation. The host-only IDs are host.docker-engine, host.filesystem-permissions, and host.network-release-access.

Runtime failures cover:

  • missing or unsupported Python;
  • missing or incompatible uv;
  • unreadable gateway or shared-library paths;
  • invalid PEP 723 metadata;
  • unavailable, unsafe, or incomplete runtime cache;
  • gateway initialization or startup timeout;
  • invalid harness projection;
  • optional semantic-index degradation.

Missing optional sqlite-vec acceleration must not be confused with failure of the canonical file-backed entity operations. Diagnostic output must never include environment secrets, provider credentials, private signing material, or private TeamMember memory.

7.6 - Release Production

Build, sign, verify, and publish processkit releases with bound host evidence.

The v1 release path is agent-first, human-operable, and entirely local. Maintainer-controlled machines invoke the same repository scripts and bind their native results to one tagged commit. No GitHub Actions or hosted build service participates.

One-time key setup

Keep the private key outside the repository. The public key may be copied to the local trust store of every machine that installs official releases.

scripts/processkit-keygen-local.sh \
  "$HOME/.config/processkit/keys/release.pem" \
  "$HOME/.config/processkit/trust.d/release.pub.pem"

Back up the private key securely. Losing it prevents producing a release under that identity. Disclosing it requires creating a new key identity and removing the compromised public key from local trust stores.

Validate and create a release

scripts/release-local.sh v1.0.0-alpha.5 \
  "$HOME/.config/processkit/keys/release.pem" \
  "$HOME/.config/processkit/trust.d/release.pub.pem"

The command runs the complete local validation suite, builds a reproducible archive, creates an integrity envelope, signs it with Ed25519, and verifies the result. It produces the archive, native installer executable, checksum sidecars, release JSON, and signature under dist/. The signed envelope contains a required installerAssets matrix. A local alpha or beta release contains the current Rust host target. Multi-host production uses local Linux and macOS machines to build each executable independently, copies their outputs into one trusted finalization workspace, and then binds the matrix:

scripts/finalize-release-local.sh v1.0.0-alpha.5 \
  /secure/release.pem \
  /secure/release.pub.pem \
  aarch64-unknown-linux-gnu \
  x86_64-unknown-linux-gnu \
  aarch64-apple-darwin \
  x86_64-apple-darwin

Finalization fails if any named asset is absent, duplicated, symlinked, or unsafe. The resulting signature binds every target, filename, digest, and byte size. Each local host executes scripts/build-host-artifact.sh, verifies tag and commit provenance, and natively smoke-tests its binary. Merely naming a target never manufactures or validates it.

Exact-version bootstrap

The non-root bootstrap installs a native executable only after checking its checksum, signed-envelope membership, signature, and the canonical Ed25519 key fingerprint published in release/processkit-v1-signing-public.pem:

scripts/install-processkit.sh v1.0.0-alpha.5

It detects Linux x86_64/ARM64 and macOS x86_64/ARM64, installs to $HOME/.local/bin by default, and refuses floating versions. Supplying the Operators may override the fingerprint only when intentionally selecting a different trusted release identity.

Verify after copying

scripts/verify-release-local.sh \
  dist/processkit-v1.0.0-alpha.5.release.json \
  dist/processkit-v1.0.0-alpha.5.release.sig \
  "$HOME/.config/processkit/trust.d/release.pub.pem"

Copying or publishing these files is a separate operation. Any filesystem, server, removable medium, or artifact host may be used. Publication does not confer trust; the signature and local public key do.

Agent operation

Agents should use explicit absolute key paths, capture exit status, retain the complete stderr log, and report the generated file paths and public-key fingerprint. They must never print or copy private-key contents. A failed local gate stops release creation.

Native consumer verification

The shell verifier remains the human-operable release-side check. The Rust installer also verifies releases against the versioned JSON trust store:

processkit verify-release \
  --envelope dist/processkit-v1.0.0-alpha.5.release.json \
  --signature dist/processkit-v1.0.0-alpha.5.release.sig \
  --trust-store "$HOME/.config/processkit/trust-store.json"

Both verifiers bind the exact envelope bytes, Ed25519 key identity, semantic version, archive filename, byte size, SHA-256, and top-level directory. They also bind every installer target, filename, byte size, and SHA-256, rejecting duplicate targets or files. The envelope separately binds the release descriptor and PROVENANCE.toml inside the archive; extraction verifies both digests and requires the provenance tag to match the release version.

Legacy trees can be inspected independently before installation. See v0 to v1 compatibility inspection .

7.7 - Evidence-bound Release Process

Repository-owned, resumable release orchestration for processkit maintainers.

Issue #151 defines the aibox-style release ritual adopted by processkit.

Version-line authority

The requested semantic version determines the only branch permitted to tag:

VersionRequired branch
stable v0v0.x-release
v1 alpha, beta, or RCv1.x-pre-release
stable v1v1.x-release

Resolve the mapping without mutation:

scripts/maintain.sh release-branch v1.0.0-alpha.5

Promotion into protected branches happens through pull requests. Never force-push a release branch.

Candidate evidence

Evidence belongs to an exact candidate:

dist/release-evidence/<version>/<commit>/
├── binding.json
├── RELEASE-STATE.md
├── RELEASE-DOCTORS.md
├── logs/
└── <step>.passed

The binding records version, commit, clean tree, branch, Rust, Python, uv, and host target. A step marker is reused only within that binding.

Phase zero

scripts/maintain.sh release vX.Y.Z --steps phase0

This writes dependency/toolchain state and runs pk-doctor plus the release audit. Errors block. Warnings and actionable findings require a tracked release-deferrals/vX.Y.Z.md with rationale, owner, issue, and expiry.

Candidate checks

scripts/maintain.sh release vX.Y.Z --steps checks

Independent audit, installer, and production-documentation gates run with bounded concurrency and retain separate logs. The documentation gate requires:

  • release-notes/vX.Y.Z.md;
  • README, contribution, license, security, conduct, maintenance, and support files; and
  • a complete Hugo build, generated-link check, and contrast check.

Build and signing

Set absolute paths to the private and public Ed25519 keys:

export PROCESSKIT_RELEASE_PRIVATE_KEY=/secure/release.pem
export PROCESSKIT_RELEASE_PUBLIC_KEY=/secure/release.pub.pem
scripts/maintain.sh release vX.Y.Z --steps build

The build delegates to the existing local release pipeline and stops on any test, artifact, checksum, signature, or package-acceptance failure.

Publication and verification

After reviewing the evidence:

scripts/maintain.sh release vX.Y.Z --steps publish,verify

Publication:

  1. rechecks the designated release branch and clean candidate;
  2. requires all prerequisite evidence;
  3. creates and pushes an annotated tag;
  4. creates a GitHub release from tracked curated notes with all matching archive, checksum, signature, key, and native assets; and
  5. deploys the production documentation.

Final verification downloads the public assets, checks archive digests, records GitHub release metadata, and records the remote peeled tag.

Recovery and resumption

Rerun the same command on the same candidate. Passed step markers are reused. Changing the commit creates a new evidence directory and reruns the selected steps. Publication is deliberately not inferred from a local green run.

If a tag or release was partially published, inspect remote state before continuing. The orchestrator fails closed when the tag already exists instead of overwriting public history.

Host-only phase

release-host verifies the exact tag, full source commit, and clean checkout before building and natively running processkit --version. It emits the binary, checksum, and local-host provenance. Maintainers run that contract on local x86_64 and arm64 Linux and macOS hosts, then copy the outputs into the finalization workspace. Collected assets are signed into one release envelope; a release must not claim a target without its native smoke evidence.

7.8 - Installer Threat Model

Trust boundaries and adversarial requirements for release and target inputs.

Alpha.4 status: Traversal, symlink, forged-journal, signature, digest, downgrade, same-version equivocation, and interruption paths have automated coverage. The “before beta” items below remain open hardening targets.

The installer treats an archive, descriptor, manifest, catalog, adapter, and target filesystem as untrusted until validated. It must reject absolute or parent-traversal paths, archive links and path escapes, duplicate normalized destinations, unsupported operations, unverified assets, and target symlink escapes. It must not execute release-supplied code.

Before beta, tests must cover archive size/count limits, TOCTOU and symlink races, interrupted application/recovery, malformed provenance, downgrade policy, MCP command-array injection, and secret redaction in plans and state.

7.9 - v0 Compatibility

Read-only evidence and migration boundary for v0 projects.

v1.x development status: Exact-release inspection and a guarded fresh-target transition are implemented. Native in-place migration and automatic legacy-entity transformation are not supported.

The v1 installer identifies legacy processkit evidence without consulting aibox, harness, devcontainer, or MCP configuration files.

processkit inspect-compatibility \
  --root /path/to/legacy-tree \
  --distribution /path/to/processkit-v1-release \
  --json

An exact-release result requires every immutable anchor in a shipped compatibility manifest to match. The beta manifests cover v0.27.1 and v0.28.4 release trees. A partial installed project may be classified only as legacy-project-candidate; its exact version is never guessed.

Compatibility inspection is read-only. Detection does not mutate the inspected tree and does not authorize an in-place install.

Transition an exact release

Create an empty directory outside the legacy tree, review the compatibility result, and first generate a non-mutating plan:

mkdir /path/to/fresh-v1-project
processkit migrate-v0 \
  --source /path/to/exact-v0-release \
  --root /path/to/fresh-v1-project \
  --distribution /path/to/processkit-v1-release \
  --profile managed \
  --harness codex \
  --plan-only \
  --json

Resolve every blocking finding, review the dispositions and hashes, then omit --plan-only and acknowledge installation:

processkit migrate-v0 \
  --source /path/to/exact-v0-release \
  --root /path/to/fresh-v1-project \
  --distribution /path/to/processkit-v1-release \
  --profile managed \
  --harness codex \
  --yes \
  --json

The command accepts only an exact v0.27.1 or v0.28.4 release match. The target must be empty, separate from the source, and outside the source tree. It installs v1 transactionally in the target and reports the matched manifest, source release, target release, and corpus disposition. The source stays read-only.

The result includes a deterministic corpus plan for every supported project-owned root, including artifacts, bindings, roles, and TeamMembers in addition to actors, decisions, discussions, gates, logs, migrations, notes, scopes, and work items. Each entry binds its source SHA-256 and reports one of:

  • copy-compatible for a structurally compatible mutable entity;
  • preserve-immutable for a LogEntry or applied Migration; or
  • a blocking finding for invalid frontmatter, an unsupported API version, unsafe links, missing identity, or a kind/directory mismatch.

Every entry includes an explicit fieldLoss array. It is empty for the currently accepted v2 envelopes. The planner rejects the migration before installation when any finding is blocked.

Exact v0.27.1 and v0.28.4 release manifests are the ownership baseline. Only files present in the selected source project are planned, every accepted file must carry the expected kind and identity, and ambiguity blocks the complete plan rather than guessing ownership.

After review, the mutating command installs v1 and applies every accepted corpus entry through a second journaled transaction. Mutable entities and immutable LogEntries/applied Migrations are copied byte-for-byte, remain user-owned, and are not added to the installer’s managed-file inventory. Installation state records the source release, compatibility manifest, corpus plan SHA-256, entry count, and complete typed plan. processkit verify re-checks every migrated path against the persisted source digest and reports missing, unsafe, or modified migrated entities as provenance drift.

If the process stops during corpus application, run:

processkit recover --root /path/to/fresh-v1-project --yes --json

Recovery uses the distinct pre-migration and migrated state hashes to roll back partially applied entities without changing the source. The recovered target remains a valid fresh v1 installation; select a new empty target before retrying migrate-v0.

In-place migration remains unsupported. Mixed-root migration is supported only for an exact recognized release into a separate empty target; a structural lookalike or downstream manager lock file cannot establish provenance.

7.10 - aibox Integration

Consume the processkit v1 machine protocol without duplicating lifecycle policy.

Alpha.5 status: The opaque request/result protocol and direct-CLI/aibox installed-state parity contract are implemented. The v0 compatibility bridge remains available for gradual downstream adoption.

aibox should treat processkit as an opaque local executable. It creates a versioned JSON request, invokes processkit execute --request <path>, parses the single JSON result, and does not duplicate processkit ownership policy.

The producer integration checkpoint is the schema bundle under src/.processkit/installer/schemas/, the executable built from installer/, and these local gates:

scripts/test-installer-local.sh
scripts/test-installer-pilot-local.sh
scripts/test-aibox-parity-local.sh

The stable request fields are apiVersion, operation, root, distributionPath, envelopePath, signaturePath, trustStorePath, profiles, harnesses, and yes. Plan, install, and update accept either a development distributionPath or the three signed-release paths. Production consumers use the signed-release form. Mutation operations require yes: true.

The stable result core is apiVersion, status, changes, conflicts, warnings, and errors. Install additionally returns the committed state. Callers must use status and the process exit code, not human output.

Cancellation is process cancellation. A subsequent recover request is the only supported interruption repair path. Retries are safe after recovery; the target lock prevents concurrent mutations. Installation state and transaction evidence contain no private release key.

For the first integration increment, aibox should:

  1. build or obtain the standalone executable;
  2. validate the shipped schema bundle;
  3. replace its provisional fixture call with execute;
  4. run plan, install, cancellation/recovery, update, and uninstall in a disposable project;
  5. compare normalized direct-CLI and execute-envelope installed state.

The readiness signal for removing the provisional adapter is a tagged processkit prerelease containing this protocol and a passing scripts/test-installer-local.sh result on both repositories.

For M5, pin the immutable v1.0.0-alpha.5 release, not a branch or moving reference. The aibox consumer test must download the archive, release envelope, signature, public key, and matching native installer from that GitHub release, verify the signed envelope, then exercise the opaque request contract. Keep the v0 compatibility bridge enabled; this prerelease is an explicit project opt-in and does not change the default processkit line.

8 - MCP Servers

The gateway, per-skill servers, and the legacy aggregate bridge — plus what each harness supports.

processkit skills ship Python MCP servers that give agents mechanical correctness on top of probabilistic reasoning. For entity work, agents should use the MCP tools rather than hand-editing files: write tools validate schemas, enforce state machines, and append LogEntries where the server owns the side effect.

This Python implementation is intentional in v1. The native Rust CLI owns release trust and content lifecycle; it does not replace the MCP servers.

Status

The exact server inventory is release-generated and validated by the MCP manifest. Alpha.4 release acceptance exposes 199 gateway tools. Servers ship across processkit’s primitive, workflow, projection, routing, gateway, guard, and devops skills. Most ship default mcp-config.json fragments. aggregate-mcp remains an alternate compatibility entry point and does not register itself by default; context-archiving also ships a server script without a default config fragment.

Server scripts live under context/skills/<category>/<skill>/mcp/server.py. Processkit operation servers share a Python utility library at context/skills/_lib/processkit/.

The current direction is gateway first for harnesses that pay startup cost per stdio process. Per-skill servers remain canonical, but clients may register one gateway process instead of the granular set when they want one provider-neutral processkit tool surface.

processkit itself is usable without aibox. aibox is an installer and supervisor that can fetch processkit content, merge harness config, and manage a devcontainer. A user may also install the files by another method and point any MCP-capable harness at the shipped Python server commands directly.

Layer 0 — Foundation

ServerTools
index-managementreindex, query_entities, get_entity, search_entities, query_events, list_errors, stats
id-managementgenerate_id, validate_id, list_used_ids, format_info
event-loglog_event, query_events, recent_events

Layer 1 — Identity

ServerTools
actor-profilecreate_actor, get_actor, update_actor, deactivate_actor, list_actors
role-managementcreate_role, create_role_template, get_role, update_role, list_roles, link_role_to_actor
team-managerTeamMember identity, active interlocutor, consistency, and agent-card helpers

Layer 2 — Core entities

ServerTools
workitem-managementcreate_workitem, create_process_instance, create_sep_handoff, transition_workitem, query_workitems, get_workitem, link_workitems
decision-recordrecord_decision, transition_decision, query_decisions, get_decision, supersede_decision, link_decision_to_workitem
artifact-managementcreate_artifact, get_artifact, query_artifacts, update_artifact
note-managementprepare_hook_inbox_dirs, create_note, capture_inbox_item, claim_inbox_item, complete_inbox_item, fail_inbox_item
scope-managementcreate_scope, get_scope, list_scopes, transition_scope
gate-managementcreate_gate, create_gate_template, get_gate, list_gates, evaluate_gate
binding-managementcreate_binding, create_time_window, create_budget_application, end_binding, query_bindings, resolve_bindings_for
discussion-managementopen_discussion, get_discussion, list_discussions, transition_discussion, add_outcome
migration-managementlist_migrations, get_migration, start_migration, apply_migration, reject_migration, migrate_context_to_v2
model-recommenderlist_models, get_profile, query_models, compare_models, get_pricing, check_availability, get_config, set_config

Layer 3 — Workflow and projections

ServerTools
agent-cardproject_agent_card
eval-gate-authoringcollect_run_outputs, codify_eval, calibrate_judge, bind_eval_to_runs
security-projectionsproject_agent_ids_rule, project_tetragon_tracing_policy

Gateway

ServerTools
processkit-gatewaylist_gateway_tools, gateway_health, plus imported per-skill tools
aggregate-mcplist_aggregate_tools plus imported per-skill tools

processkit-gateway is the provider-neutral gateway entry point. It can run as a direct stdio server, as a streamable HTTP daemon, or behind a lightweight stdio proxy for harnesses that only support command-backed MCP. Eager stdio remains the simplest mode. Daemon mode can use a catalog-backed lazy registration path so the gateway lists tools without importing every backing skill server at startup.

aggregate-mcp is the legacy one-process compatibility bridge. Both gateway surfaces keep unique tool names unchanged. If two source servers expose the same helper name, later duplicates are registered as <skill_slug>__<tool_name>.

Devops

ServerTools
repo-managementdetect_repo_provider, inspect_repo_state, list_repo_issues, list_repo_change_requests, plan_repo_reconcile, resolve_repo_issue, merge_change_request, commit_local_changes, push_current_branch, run_repo_reconcile

Routing (cross-layer)

ServerTools
skill-finderfind_skill, list_skills
task-routerroute_task — returns skill + process override + MCP tool in one call
skill-gateacknowledge_contract, check_contract_acknowledged, skip_decision_record

A standalone smoke test (no MCP transport, just direct function calls) runs all servers via:

uv run scripts/smoke-test-servers.py

Runtime requirements

Each MCP server is a standalone Python script using PEP 723 inline dependency metadata:

#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.10"
# dependencies = ["mcp[cli]>=1.0,<2.0"]
# ///
from mcp.server.fastmcp import FastMCP
server = FastMCP("<skill-name>")
...
if __name__ == "__main__":
    server.run(transport="stdio")

Consumers need only Python ≥ 3.10 and uv — both already present in aibox containers. First run pays a small cost for uv to resolve and cache dependencies; subsequent runs are near-instant.

Cold offline preparation is not yet a supported guarantee. See the Python MCP runtime contract .

Transport

Per-skill servers and aggregate-mcp use stdio. processkit-gateway supports stdio and streamable HTTP:

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport stdio

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport streamable-http --host 127.0.0.1 --port 8000 \
  --path /mcp

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  stdio-proxy --url http://127.0.0.1:8000/mcp

The streamable HTTP daemon binds to localhost by default. Do not expose it on a non-local interface unless a deployment layer adds explicit authentication and network policy.

Configuration

Most skills that ship an MCP server include an mcp/mcp-config.json fragment:

{
  "mcpServers": {
    "<skill-name>": {
      "command": "uv",
      "args": ["run", "context/skills/processkit/<skill-name>/mcp/server.py"]
    }
  }
}

aibox init merges these fragments into the consuming project’s MCP config file. Harnesses that support gateway mode may register processkit-gateway instead of merging the per-skill fragments:

{
  "mcpServers": {
    "processkit-gateway": {
      "command": "uv",
      "args": [
        "run",
        "context/skills/processkit/processkit-gateway/mcp/server.py"
      ],
      "env": {
        "PROCESSKIT_MCP_MODE": "gateway"
      }
    }
  }
}

The install path is context/skills/processkit/<skill-name>/ — the processkit/ category subdirectory is part of the path. Provider-specific harness files (e.g. .mcp.json for Claude Code) are written by aibox at the right location for whichever harness the user picked.

Mode matrix

ModeStatusProcess countBest fitNotes
Per-skill MCP serversCanonicalManyFine-grained permissions and maximum compatibilityEach skill owns its server and config fragment.
aggregate-mcpCompatibilityOneExisting one-process configsLegacy bridge; not the preferred new gateway name.
processkit-gateway stdioCurrent gatewayOneClaude Code, Codex, OpenCode, and other command-launching harnessesProvider-neutral eager stdio server.
Daemon plus stdio proxyCurrent gatewayOne daemon plus lightweight proxiesHarnesses that restart stdio frequentlyRequires a supervisor such as aibox or a user-managed daemon process.

Which servers are mandatory

For per-skill registration, the following servers should always be registered regardless of package tier. Without them, agents cannot use the entity layer correctly:

ServerWhy mandatory
index-managementEntity discovery and full-text search
id-managementID generation for all entity kinds
workitem-managementWork tracking
discussion-managementStructured deliberation
decision-recordDecision capture
event-logAudit trail

The same tools may be reached through processkit-gateway or aggregate-mcp when a harness uses a one-process entry point.

Tier-specific servers (actor-profile, role-management, scope-management, gate-management, binding-management, model-recommender, and the workflow/projection servers) are registered based on the installed package tier. artifact-management and note-management are available in tiers that include their skills.

Compliance expectations

Agents should call route_task(task_description) before write-side processkit tool calls and use find_skill when a processkit skill might apply. Entity reads go through index-management; entity writes go through the owning management server. If a state change is not already logged by the MCP write tool, append a LogEntry with event-log.

8.1 - Harness Compatibility

processkit’s MCP servers are provider-neutral Python programs. They do not require aibox at runtime. aibox can install processkit, merge MCP configuration, pre-authorize processkit tools where a harness supports that, and supervise a managed devcontainer. Those are convenience and lifecycle features; they are not a processkit dependency.

The alpha.5 installer can project managed Codex and Claude configuration. It owns only declared processkit keys and preserves unrelated harness settings during install, update, and uninstall. Restart the harness after installation so it reloads the projection.

For a direct install, point the harness at the desired server command inside the installed context/skills tree. The recommended one-process entry point is:

{
  "mcpServers": {
    "processkit-gateway": {
      "command": "uv",
      "args": [
        "run",
        "context/skills/processkit/processkit-gateway/mcp/server.py"
      ],
      "env": {
        "PROCESSKIT_MCP_MODE": "gateway"
      }
    }
  }
}

Current modes

ModeUse whenHarness impact
Per-skill serversYou need fine-grained tool registration or the broadest compatibility.The harness launches one stdio process per registered skill.
aggregate-mcpYou already use the legacy aggregate server.One stdio process, compatibility name, no daemon behavior.
processkit-gateway stdioYou want the provider-neutral gateway surface now.One stdio process, eager tool import, richer gateway metadata.
Daemon plus stdio proxyYou want a long-lived daemon with lightweight harness proxies.One shared daemon plus one lightweight stdio proxy per harness.

The current gateway command is equivalent to:

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport stdio

Daemon mode starts a localhost streamable HTTP MCP server:

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport streamable-http --host 127.0.0.1 --port 8000 \
  --path /mcp

Harnesses that only support stdio can connect through the proxy:

{
  "mcpServers": {
    "processkit-gateway": {
      "command": "uv",
      "args": [
        "run",
        "context/skills/processkit/processkit-gateway/mcp/server.py",
        "stdio-proxy",
        "--url",
        "http://127.0.0.1:8000/mcp"
      ],
      "env": {
        "PROCESSKIT_MCP_MODE": "gateway"
      }
    }
  }
}

For lower daemon startup memory, generate a tool catalog and enable lazy registration:

uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  catalog --write

PROCESSKIT_GATEWAY_IMPORT_MODE=lazy-catalog \
  uv run context/skills/processkit/processkit-gateway/mcp/server.py \
  serve --transport streamable-http

Harness notes

HarnessRecommended directionCompatibility notes
Claude CodeRegister processkit-gateway as an MCP stdio server, or keep per-skill servers when permission granularity matters.Claude Code can launch command-backed MCP servers. aibox may also merge .mcp.json, settings, hooks, and preauthorization entries for managed projects.
CodexRegister processkit-gateway as an MCP stdio server.Codex benefits from the one-process gateway because many per-skill stdio servers increase startup and approval overhead. Codex preauthorization support is narrower than Claude Code, so users may still see approval prompts depending on local policy.
OpenCodeUse stdio gateway mode when OpenCode is configured for MCP command servers.Treat processkit as a normal MCP server command. aibox-specific supervision is optional and not required for direct use.
HermesUse stdio gateway mode when Hermes can launch MCP command servers.The gateway is provider-neutral; Hermes-specific configuration should map the command and args exactly as shown above.
AiderUse processkit skills and files directly; MCP gateway support depends on the surrounding Aider integration.Aider is not a full MCP harness in the same sense as Claude Code or Codex. It may not enforce processkit tool-use contracts or call MCP tools without an adapter.

Choosing a mode

Use processkit-gateway stdio for the simplest one-process harness configuration. Use daemon plus stdio proxy when the environment can supervise one long-lived gateway process and the harness frequently restarts command-backed MCP servers. Use per-skill servers when a harness policy model needs separate permission surfaces. Keep aggregate-mcp only for existing configs that already depend on that server name.

8.2 - Claude Code

Claude Code hooks, MCP configuration, and processkit routing behavior.

v1 alpha note: Install with --harness claude to create the managed projection. The installer preserves unrelated Claude configuration. The direct uv gateway remains the development and compatibility fallback.

This document captures how processkit surfaces itself inside the Claude Code harness: which payloads land at session start vs. each turn, which hooks fire, and which Claude Code settings we recommend for any processkit project.

WorkItem: BACK-20260509_1317-DaringRaven (issue #19). Companion file: settings.example.json .

What the per-turn hook injects

scripts/emit_compliance_contract.py runs as both a SessionStart and a UserPromptSubmit hook (wired in /workspace/.claude/settings.json under hooks.SessionStart and hooks.UserPromptSubmit). It now emits two different payloads:

  • SessionStart — the full compliance contract from context/skills/processkit/skill-gate/assets/compliance-contract.md (~78 lines: 6 sections covering session start, sub-agent dispatch, tool routing, entity writes, decisions, prohibitions). One-shot per session.
  • UserPromptSubmit — the slim per-turn checklist (~14 lines): 3 positive actions (acknowledge, route, find skill), 3 prohibitions (no hand-edit / no ls/grep / no templates/), and a one-line pointer to the full contract. Runs on every prompt.

The single source of truth is still compliance-contract.md. The slim payload is the block delimited by <!-- BEGIN HOOK --><!-- END HOOK --> markers in that file — edit one file, both payloads update together. _extract_hook_block() in emit_compliance_contract.py does the slicing.

If either marker is missing (e.g. partially-edited file), the slim payload falls back to the full contract — safe by default.

How to use the full contract

Three reliable ways to load the full contract on demand:

  1. Start a fresh sessionSessionStart hook injects the full text automatically.
  2. Read the filecontext/skills/processkit/skill-gate/assets/compliance-contract.md is plain Markdown, no preprocessing.
  3. Call the MCP toolacknowledge_contract(version="v2") returns the full contract text in its response (contract field).

Sub-agents dispatched mid-session inherit the parent’s context — they get the slim payload from the most recent UserPromptSubmit plus the full text the parent loaded at SessionStart, so the catalogue is already in scope.

See settings.example.json for a copy-paste block. Two recommendations:

skillOverrides — name-only loading for verbose, rarely-used skills

The processkit ships ~30 skills under context/skills/processkit/. Four of them are >400 lines and are creation/audit/setup skills, not per-session workflow skills:

SkillLinesWhen invoked
skill-builder514Authoring a new skill
skill-reviewer496Auditing an existing skill
team-creator445Bootstrapping or rebalancing a team
agent-management437Multi-agent orchestration setup

Setting skillOverrides.<name>.mode = "name-only" for these tells Claude Code to load a one-line description instead of the full SKILL.md. The skill remains discoverable via /pk-* commands and find_skill, and Claude Code loads the full body when the skill is explicitly invoked.

Workflow-critical and routing skills (model-recommender, team-manager, skill-finder, skill-gate) should stay fully loaded — they are consulted by hooks and routing on most turns.

env.ENABLE_TOOL_SEARCH=auto — defer tool schemas

processkit installs the processkit-gateway MCP server, which exposes 130+ tools. By default Claude Code embeds every tool’s full JSONSchema in the session prompt. ENABLE_TOOL_SEARCH=auto tells Claude Code to hide tool schemas behind a ToolSearch tool until they are actually needed, saving substantial per-turn tokens.

The trade-off is one extra round-trip the first time each tool is called. With sticky caching (Claude Code 2.1+), the cost amortises across the session.

Sub-agent dispatch

When dispatching a sub-agent, follow AGENTS.md ➜ “Before sub-agent dispatch”:

  1. Call route_task(task_description) to get recommended_team_member_slug and recommended_model_class.
  2. Pass the slug as Claude Code’s subagent_type so the harness loads the matching .claude/agents/<slug>.md adapter.
  3. Pick the cheapest concrete model in the recommended class (Haiku < Sonnet < Opus). Do not let the sub-agent inherit the parent’s model — that defeats the team-dispatch token-efficiency strategy.

The adapter file written by team-manager.export_claude_subagent is self-describing as of DaringRaven (rec 6): it carries a header comment with the TeamMember ID, slug, role, seniority, model policy, and resolved binding so a reader can audit .claude/agents/<slug>.md against the live roster without re-resolving.

Verification

pk-doctor covers this surface with two checks:

  • preauth_applied — confirms the processkit MCP-tool allowlist is preauthorised in .claude/settings.json so MCP calls don’t prompt mid-turn.
  • team_member_exports — reconciles active TeamMembers against .claude/agents/<slug>.md adapter files. Detects stale or missing exports.

Run /pk-doctor for a full report. To smoke-test the hook payload without restarting:

echo '{"hook_event_name":"UserPromptSubmit"}' | \
  python3 context/skills/processkit/skill-gate/scripts/emit_compliance_contract.py

Should emit the slim ~14-line payload. Same with hook_event_name=SessionStart should emit the full contract.

The hook-script tests live in context/skills/processkit/skill-gate/scripts/test_hooks.py (run with python3 ... — no extra deps). Tests [2c] and [2d] cover the slim/full split.

Common MCP calls + Claude Code shortcuts (v0.26.0)

Top-N gateway tools

The processkit-gateway aggregator exposes all processkit MCP tools through a single server. The most frequently needed calls:

GoalToolNotes
Read entity by IDget_entity(id=...)Accepts prefix, word-pair, or full ID
Read entity by pathget_entity_by_path(path=...)Path relative to project root
List entitieslist_entities(kind?, state?, limit?)All kinds; v1-penalty annotated
Search entitiessearch_entities(text) / hybrid_search_entities(text)FTS + semantic
Create work itemcreate_workitem(...)Route first via route_task
Transition statetransition_workitem(id, to_state)Enforces state machine
Run health checkrun_pk_doctor(check?, fix?)Returns structured JSON
Run release auditrun_pk_release_audit(tree?)Returns structured JSON
Route a taskroute_task(task_description=...)Required before write calls + Agent dispatch

ToolSearch friction

With ENABLE_TOOL_SEARCH=auto, tool schemas are deferred. You must call ToolSearch(query="select:<tool_name>") before invoking a deferred tool. Common selects:

ToolSearch(query="select:mcp__processkit-gateway__get_entity,mcp__processkit-gateway__route_task")
ToolSearch(query="select:mcp__processkit-gateway__create_workitem,mcp__processkit-gateway__transition_workitem")

Only processkit-gateway needs to be in enabledMcpjsonServers. The gateway proxies all other processkit MCP servers without requiring each one to be individually listed.

{ "enabledMcpjsonServers": ["processkit-gateway"] }

Entity-read BLOCK behavior (v0.26.0)

A new check_entity_read.py PreToolUse hook blocks Read on canonical entity paths:

context/{workitems,decisions,artifacts,team-members,scopes,
          gates,actors,roles,bindings}/**/*.md

Blocked → use get_entity(id='...') or get_entity_by_path(path='...').

Not blocked (gray area): skill source code under context/skills/<skill>/, log entries, schemas, applied migrations, TeamMember sub-files (persona.md, card.json, knowledge/, etc.), and anything outside context/.

If you see BLOCKED: <path> is a canonical entity file, the remediation is always one of:

get_entity(id="<derived-id>")            # by ID
get_entity_by_path(path="<rel-path>")    # by path
list_entities(kind="WorkItem", state="open")  # browse
search_entities(text="<keyword>")        # search

Agent dispatch validation (v0.26.0)

A new check_route_task_before_agent.py PreToolUse hook blocks Agent and Task dispatch without a prior route_task call in the same turn.

Correct pattern:

route = route_task(task_description="summarise the release notes")
# read route["recommended_team_member_slug"] and route["recommended_model_class"]
Agent(prompt="...", model="<recommended model>")

If the context/.state/skill-gate/ directory does not exist (first run before any processkit MCP call), the hook warns but does not block (graceful degradation).

Open items

  • .claude/settings.example.json was the natural home for the recommended-settings JSON, but the harness sandbox currently blocks unattended writes under .claude/. The file lives at docs-site/content/en/docs/mcp-servers/claude-code/settings.example.json instead and must be copied into .claude/settings.json (or the user-level config) by hand. If/when sandbox policy permits, the canonical location is .claude/settings.example.json.
  • skillOverrides schema validation: Claude Code accepts the name-only mode but the project hasn’t yet wired schema acceptance into pk-doctor. Track in a follow-up if drift is observed.

9 - Reference

apiVersion policy, ID formats, the migration guide, privacy conventions, and the v2 deliverable boundary.

Use this section for exact contracts rather than inferred release behavior.

v1.0.0-alpha.5 is the product version; shipped entities continue to use processkit.projectious.work/v2.

9.1 - apiVersion Policy

processkit uses a Kubernetes-style apiVersion field on every entity:

apiVersion: processkit.projectious.work/v2

The group

The group processkit.projectious.work is a reverse-DNS name anchored on the owning organization (projectious.work) with processkit as a subcomponent. This prevents name collisions if other organizations fork or publish compatible primitives under their own domains.

The form <reverse-dns-group>/<version> is the Kubernetes-idiomatic shape — exactly one slash. Tools that split on / expect exactly two parts.

Evolution rules

apiVersionStatusMeaning
apiVersionProduct lineStatus
processkit.projectious.work/v1v0.xCurrent v0.x entity format
processkit.projectious.work/v1beta1noneReserved; not used
processkit.projectious.work/v2v1.xCurrent v1.x entity format

The processkit product version, entity API version, schema-source format, and per-kind schema versions are independent axes. In particular, processkit v1.x deliberately uses entity API v2.

Non-breaking entity changes

  • Adding new optional fields to schemas
  • Adding new primitive kinds
  • Adding new states to a state machine
  • Adding new skills
  • Adding new packages

Breaking entity changes

  • Removing or renaming existing fields
  • Changing the type or meaning of existing fields
  • Removing states from a state machine (stranding existing entities)
  • Removing primitive kinds
  • Changing the semantics of metadata.id, metadata.created, or other cross-cutting fields

Migration between versions

The SmoothTiger/SmoothRiver v2 direction is a no-shim contract: v2 schemas and index semantics become authoritative, and processkit does not add hidden dual-read or permissive validation paths for v1 data. Existing v1 contexts remain a migration source, not a long-term compatibility target.

For a v1 context moving to v2:

  1. The installer or migration tool generates a diff between the old upstream reference templates and the new ones.
  2. A Migration entity records the affected files, source and target apiVersion, source and target processkit versions, and the proposed plan.
  3. The agent runs the migration through migration-management, using dry-run diagnostics before applying changes.
  4. The user approves the project-specific plan before the migration reaches applied.
  5. After migration, v2 validation rejects unknown kinds, stale primitive assumptions, and ad hoc event/type vocabulary that v1 tolerated.

No automatic in-place patching — migrations always go through an explicit review and approval step. See the v0.25.0 changelog for the public breaking-change summary.

9.2 - ID Formats

Entity IDs in processkit have the shape <PREFIX>-<id-body>. The prefix is determined by the primitive kind and is not configurable. The id-body has two independent configuration axes: format and slug.

Configuration

In the consuming project’s aibox.toml:

[context]
id_format = "word"   # word | uuid
id_slug = false      # true | false

The four combinations

id_formatid_slugExampleNotes
wordfalseBACK-calm-foxDefault. Short, memorable, solo-friendly
wordtrueBACK-calm-fox-add-lintMemorable + descriptive for prose contexts
uuidfalseBACK-550e8400-e29b-41d4Uniqueness guarantees for large teams
uuidtrueBACK-550e8400-add-lintUUID + readable context

Prefix registry

PrimitivePrefix
WorkItemBACK
LogEntryLOG
DecisionRecordDEC
MigrationMIG
ArtifactART
NoteNOTE
ActorACTOR
RoleROLE
BindingBIND
ScopeSCOPE
CategoryCAT
CrossReference
GateGATE
ScheduleSCHED (legacy v1)
ConstraintCONST
ContextCTX
DiscussionDISC
ProcessPROC (legacy v1)
StateMachineSM (legacy v1)

Metric, Model, Process, Schedule, and StateMachine do not reserve first-class primitive prefixes in the v2 contract. The legacy prefixes remain documented so existing v1 contexts can be migrated and read correctly.

Word generation

Word-based IDs come from the petname algorithm: one adjective + one noun (or two, depending on id_format_depth — default 2). Collisions are detected at generation time and a third component is appended if needed.

Slugs

When id_slug = true, a content-derived slug is appended to the ID body. For a WorkItem with title “Add release audit check”, the slug would be add-release-audit-check (first N tokens, kebab-case, truncated).

Slugs are for human readability and do not affect uniqueness — the word or UUID portion still guarantees that.

Choosing a format

  • Solo developer: word + slug: false — shortest, most memorable
  • Small team with process: word + slug: true — readable in prose
  • Large team or automation-heavy: uuid + slug: true — uniqueness + readability
  • Automation-only: uuid + slug: false — machines don’t care about readability

9.3 - Version Migration

processkit is distributed as versioned releases. Upgrading pinned versions is deliberate: processkit does not silently rewrite a consuming project’s context. A version bump should produce a Migration document under context/migrations/pending/ that the user and agent work through together.

The model

processkit ships a generic diff script (scripts/processkit-diff.sh) that compares two tagged versions of any processkit-compatible source — upstream processkit, a company fork like processkit-acme, or any other downstream. The script reads src/PROVENANCE.toml at each tag (a single file mapping every shipped file to the tag in which it last changed) and emits a structured diff: added, removed, changed, unchanged.

For removed or renamed skills, the JSON and TOML formats also include cleanup_hints. Installers should treat these as explicit cleanup instructions for upstream-managed hot files: remove stale skill directories when remove_skill_directory = true, remove listed generated command adapters, and surface replacement_path as the canonical successor when the removal is a rename.

Managed installers can consume this diff model. For example, when aibox sync notices a new pinned version, it:

  1. Fetches the new tag into ~/.cache/aibox/processkit/<version>/

  2. Calls the diff script (or reimplements its logic) to compare the currently-installed version against the new one

  3. For each affected file, computes three SHAs on the fly:

    • template SHA — from the verbatim reference at context/templates/processkit/<current-version>/<file>
    • cache SHA — what the new upstream version says
    • live SHA — what’s actually in the project right now

    and uses them to classify the file:

    • changed-upstream-only — safe to take with one approval
    • changed-locally-only — no-op for this migration
    • conflict — both sides changed, must be resolved by hand
    • new-upstream — added by upstream, decide whether to take it
    • removed-upstream — removed by upstream, decide whether to drop locally
  4. Writes a Migration document to context/migrations/pending/MIG-<id>.md containing the briefing

  5. Updates context/migrations/INDEX.md with the new pending entry

  6. Reports the result and stops — never auto-applies

The user reads the briefing, approves a project-specific plan, and the migration moves through pending/in-progress/applied/. See the migration-management skill for the workflow details.

What’s git-tracked vs cache

WhereGit statusPurpose
aibox.lock (project root)trackedPinned source URL + version + resolved commit (Cargo-style)
context/templates/processkit/<v>/...trackedVerbatim reference copy of every shipped file (the “as-installed” reference for diffs)
context/migrations/pending/MIG-*.mdtrackedPending migration briefings
context/migrations/in-progress/MIG-*.mdtrackedMigrations being worked through
context/migrations/applied/MIG-*.mdtrackedHistorical record
context/migrations/INDEX.mdtrackedAlways-loaded summary
context/.cache/processkit/...NOT trackedPer-project runtime cache (e.g. SQLite index)
~/.cache/aibox/processkit/<v>/...NOT trackedaibox’s fetched upstream cache, reproducible from the lock

A new developer cloning the project gets aibox.lock + the reference templates + migration documents from git. aibox sync fetches the upstream cache as needed. Everything is reconstructible from the git checkout.

Upgrading

# aibox.toml
[processkit]
source           = "https://github.com/projectious-work/processkit.git"
version          = "v0.4.0"   # was: "v0.3.0"
src_path         = "src"      # default — matches upstream layout

Then:

aibox sync         # fetches new tag, generates the migration document
aibox migrate      # walks through the pending migration with you
<validator>        # structural validation after migration is applied

v1 to v2 context migration

The v2 deliverable direction is intentionally breaking: processkit does not provide compatibility shims that let v1 and v2 contracts coexist inside the same shipped src/ tree. A live v1 project context is valid only as a migration source until the generated migration is worked through.

The explicit path is:

  1. Keep the live project on its pinned v1 processkit version until aibox sync creates the v2 Migration.
  2. Review the generated briefing, including source_api_version, target_api_version, source_processkit_version, and target_processkit_version.
  3. Run the v2 migration through migration-management with dry-run diagnostics first.
  4. Apply the approved plan, then run structural validation and the processkit smoke checks.

This path is the only supported bridge for v1 contexts. v2 schemas and index semantics are authoritative once the migration is applied.

See the v0.25.0 changelog for the public breaking-change summary.

Configurable source URL

The [processkit] source field accepts any git URL. The default upstream is https://github.com/projectious-work/processkit.git, but companies can fork processkit into their own repository, customize it, and have their projects consume the fork:

[processkit]
source  = "https://gitlab.acme.com/platform/processkit-acme.git"
version = "v0.4.0-acme.1"

The fork is responsible for regenerating its own PROVENANCE.toml against its git history and tagging releases. The diff script and migration model work identically for forks — they just see the fork’s tags instead of upstream’s.

For forks pulling from upstream periodically, use the diff script directly:

# Inside the processkit-acme checkout
scripts/processkit-diff.sh --from upstream/v0.4.0 --to upstream/v0.5.0 --format toml > upstream-changes.toml

The maintainer applies the changes to the fork manually, then re-tags as e.g. v0.5.0-acme.1. ACME’s projects then bump their version and run aibox sync to pick up the changes.

Pre-v0.4.0 behavior (deprecated)

Versions before v0.4.0 used a simpler model: every project copied the processkit content into its own files, and aibox migrate produced text-only migration documents at context/migrations/<from>-to-<to>.md. This worked but had no concept of provenance, no manifest, and no way to classify “user-modified vs unchanged” without manual diffing. The v0.4.0 model is a strict superset and is backward-compatible: pre-v0.4.0 migration documents are not touched and remain readable.

What aibox sync will not do

  • Auto-overwrite any file the user has touched (per the user-confirmed Strawman D rule)
  • Apply changes from a pending migration without explicit user approval
  • Re-generate a migration document for a version pair that already has one in pending/ or in-progress/ (it tells the user “pending migration exists, run aibox migrate to work on it”)

Downgrading

Downgrading is supported but discouraged. To downgrade:

[processkit]
version = "v0.3.0"   # was: "v0.4.0"

then aibox sync. If the downgrade skips past a schema apiVersion bump, existing entities may become incompatible with the older schemas. validation should flag the failures. You may need to manually edit or delete incompatible entities.

9.4 - Privacy Tiers

processkit recognizes three privacy tiers for entities under context/. The tier is declared via an optional privacy: field in metadata and enforced by directory layout + a .gitignore rule.

The three tiers

TierDefault?Git statusTypical use
publicnotrackedidentity.md, README, public roadmap
project-privateyes (default if omitted)trackedworkitems, decisions, logs, working-style.md
user-privatenoNOT trackedteam-and-relationships.md, personal scratch notes

Most entities omit the field entirely and inherit project-private.

Filesystem rule for user-private

Entities with privacy: user-private MUST live under a directory named private/ somewhere within context/. Projects should carry a .gitignore rule like:

context/**/private/

This pattern matches private/ directories at any depth under context/, including directly under context/ itself. So all of these are excluded from git:

  • context/private/
  • context/owner/private/
  • context/foo/bar/private/

But NOT directories named private/ outside context/ (e.g. cli/src/private/ would NOT be ignored by this rule).

Installers and validation tools should verify that any entity with privacy: user-private lives under a private/ directory under context/. A user-private entity outside such a directory is invalid.

Where the convention is used

  • owner-profiling skill: context/owner/private/team-and-relationships.md is the canonical example. Notes about coworkers’ communication styles, sensitivities, and interpersonal dynamics should never be checked into a shared repository.
  • Personal scratch notes: any project can have a context/private/ for personal drafts, half-formed ideas, or session notes that the agent should see but the team should not.
  • API keys / secrets are NOT what this is for — those should be in environment variables or a secret manager. Privacy tiers are for human-readable content that’s sensitive but not credentialed.

Frontmatter example

---
apiVersion: processkit.projectious.work/v1
kind: Context
metadata:
  id: OWNER-team-and-relationships
  privacy: user-private
  created: 2026-04-07T00:00:00Z
spec:
  description: "Per-person notes about collaborators."
---

# Team and Relationships

> ⚠️ PRIVACY: user-private. This file lives under context/owner/private/
> which is gitignored.

...

Why directory enforcement, not just frontmatter

A frontmatter declaration alone wouldn’t prevent the file from being checked into git — git add doesn’t read frontmatter. The directory rule gives a hard guarantee via .gitignore. The frontmatter declaration is documentation + lint validation; the directory placement is the actual safety mechanism.

If you want a user-private file outside any private/ directory, you have two options:

  1. Move it under a private/ directory (correct)
  2. Override the validation rule in local tooling (discouraged because it defeats the safety mechanism)

Public files

privacy: public is documentation, not security — anything in a public git repo is already world-readable. The distinction between public and project-private only matters when the project is in a private repo: in that case public files are fine to syndicate to a public mirror or include in a generated README, while project-private files are not. For projects in public repos, public and project-private are functionally identical.

Docs-site filtering

The processkit Hugo site publishes only explicitly curated content under docs-site/content/en/. It does not mount a project context/ tree. The local documentation gate also rejects any directory named private inside the publishable content tree.

Derived projects that mount or generate Hugo content from context/ must apply the same boundary before invoking Hugo: no private/ directory at any depth may enter the site’s content or static mounts.

Multi-user projects

For projects where multiple people work from the same repository, the current convention is flat context/private/: a single gitignored directory that is personal to whoever is running the agent locally.

A per-user subdirectory convention (context/private/<username>/) is not yet standardized. The actor primitive (actor-profile) captures identity but the privacy directory layout does not yet key on it. Defer the multi-user convention until a real project asks for it — at that point, context/private/<username>/ is the natural extension and requires no schema changes, only a new gitignore pattern.

This decision was recorded in response to aibox DEC-030 / processkit#1 .

9.5 - v2 Contracts

SmoothTiger/SmoothRiver v2 keeps durable facts in existing entity primitives and uses projection skills for runtime files. The source of truth remains processkit context; generated files are checked against that source.

Metric, Model, Process, Schedule, and StateMachine are legacy v1 migration-source kinds, not shipped v2 entity primitives. Model selection uses model-recommender roster/configuration data. Process definitions are Artifacts plus process-instance WorkItems. Schedule semantics use Binding(type=time-window). Runtime state-machine YAML files remain implementation contracts, not user-authored StateMachine entities.

Hook inbox

Hook inbox items are Notes with spec.inbox. The note-management MCP server owns the lifecycle:

  • prepare_hook_inbox_dirs
  • capture_inbox_item
  • claim_inbox_item
  • complete_inbox_item
  • fail_inbox_item

Valid injection modes are interrupt, ambient, and next-cycle. They belong on Binding(type=triage-classification) records.

AgentCard

Agent cards are Artifact-backed projections. Store the canonical source as an Artifact with spec.kind: agent-card, then use the agent-card MCP server’s project_agent_card tool to render the public JSON file. spec.projection_path and spec.projection_checksum let validation detect missing or stale projections.

Eval gates

The eval-gate-authoring MCP server turns observed run outputs into:

  • Artifact(spec.kind=eval-spec)
  • a paired Gate
  • policy/application Bindings
  • calibration LogEntries for LLM-as-judge evals

Use collect_run_outputs, codify_eval, calibrate_judge, and bind_eval_to_runs. LLM judge eval specs are expected to have a calibration log before they are treated as enforceable gates.

Security projections

Security policy sources are Artifacts. The security-projections MCP server emits runtime policy files from those Artifacts:

  • project_agent_ids_rule renders Agent-IDS JSON rules.
  • project_tetragon_tracing_policy renders Tetragon-style YAML tracing policies.

Keep the Artifact as the reviewable source and treat generated policy files as projections.

pk-doctor v2_contracts

pk-doctor includes a v2_contracts check for v2 workflow and projection guardrails. It currently checks:

  • process-instance WorkItems reference a process definition.
  • time-window Bindings include conditions.recurrence_rule.
  • cost-policy Artifacts are bound through budget-application Bindings.
  • policy supersedes chains point at known policy Artifacts.
  • LLM-as-judge eval-spec Artifacts have calibration logs.
  • agent-card projections exist and match recorded checksums.
  • hook inbox injection modes are valid and scoped to triage-classification Bindings.
  • claimed inbox Notes older than 24 hours are reported as orphan risks.

Run it through the normal doctor command:

uv run context/skills/processkit/pk-doctor/scripts/doctor.py

9.6 - v1 Alpha Release Facts

Generated facts for processkit v1.0.0-alpha.5.

Do not edit this page by hand. Its authoritative source is release/v1-release-facts.json.

FactValue
Releasev1.0.0-alpha.5
Statusexact-pin prerelease
SignatureEd25519
Installer protocolprocesskit.projectious.work/installer/v1alpha1
Entity API versionprocesskit.projectious.work/v2

Native Assets

  • processkit-v1.0.0-alpha.5-x86_64-unknown-linux-gnu
  • processkit-v1.0.0-alpha.5-aarch64-unknown-linux-gnu
  • processkit-v1.0.0-alpha.5-x86_64-apple-darwin
  • processkit-v1.0.0-alpha.5-aarch64-apple-darwin

Every published asset has a checksum sidecar and is bound into the signed release envelope. The public release is the authority for final checksums and host provenance.