processkit: Rust CLI and Python MCP product briefing
Status: Approved direction and implementation briefing
Date: 2026-07-27
Evaluated release: v1.0.0-alpha.3
Audience: processkit and projectious.work portfolio maintainers
Decision record: DEC-20260727_1738-SnappyMesa-define-processkit-rust-cli-and-python
Executive summary
Continue developing processkit as a hybrid, provider-neutral product:
- a native Rust CLI is the stable installation and lifecycle-management
boundary;
- Python remains the intentional implementation language of the MCP servers;
- skills, schemas, processes, state machines, adapters, and project entities
remain visible, versioned files;
context/ remains processkit's own normally installed project-management
context and is a genuine dogfood consumer;
src/context/ remains the distinct release deliverable installed into
derived projects.
This is not a transitional compromise. It is the target architecture:
Rust CLI
release acquisition, trust, planning, install, update,
migration orchestration, recovery, uninstall, diagnostics,
harness wiring, and optional MCP process supervision
Python MCP runtime
MCP protocol implementation, domain tools, validated entity
operations, routing, indexing access, and process workflows
Visible process content
skills, schemas, state machines, processes, templates,
package/profile manifests, and harness adapters
Project-owned state
WorkItems, Decisions, Artifacts, Notes, Logs, TeamMembers,
Migrations, configuration, and local overrides
The Model Context Protocol is language-neutral and does not require Python.
Keeping processkit's MCP servers in Python is nevertheless the right product
decision: the implementation and tests are mature, skill packages can carry
self-contained servers, domain behavior remains inspectable, and a wholesale
Rust rewrite would create substantial risk without a corresponding user
benefit.
The v1.0.0-alpha.3 release already establishes much of the correct Rust CLI
foundation: deterministic planning, transactional installation, signed release
verification, updates, recovery, conservative uninstall, compatibility
inspection, and opaque machine request/result envelopes. The next work should
stabilize and productize that boundary rather than expand the ontology or
rewrite the MCP layer.
Current-state assessment
What aligns strongly with the vision
processkit already embodies the strategic center of a provider-neutral,
AI-assisted operating system for projects:
- durable project state is stored in Git-reviewable files rather than chat
history;
- schemas define entity contracts;
- state machines validate transitions;
- MCP tools enforce writes and generate audit events;
- a derived SQLite index accelerates reads without replacing canonical files;
- skills package reusable process knowledge;
- harness-specific integrations are projections, not canonical state;
- project-specific state and upstream product content remain separate;
- aibox can install and wire processkit but is not required to build, test, or
release it;
- the repository dogfoods a normally installed version of its own product.
These are core product strengths and should remain fixed.
What v1.0.0-alpha.3 adds
The evaluated alpha adds a native Rust installer with:
plan;
install;
update;
verify;
verify-release;
recover;
uninstall;
inspect-compatibility;
- an opaque
execute --request integration boundary;
- Ed25519 release verification;
- archive and installer digest binding;
- transactional staging, backups, locking, and journals;
- managed-path ownership;
- conservative, evidence-based uninstall;
- v0 compatibility evidence and migration dispositions;
- Codex and Claude harness projection handling.
This is the right correction to the v0 manual-copy installation model.
Remaining gaps
The alpha is not yet a complete standalone product experience:
- its Rust executable describes itself as an installer rather than the
complete processkit CLI;
- human README examples omit the currently required
--distribution input;
- the release publishes only an ARM64 GNU/Linux installer executable;
- no x86_64 Linux or macOS installer assets are present;
- there is no end-user installation script comparable to aibox;
- Python,
uv, and Python dependencies remain runtime prerequisites for MCP;
- the difference between human CLI commands and the opaque aibox integration
protocol is not yet cleanly expressed;
- the Rust installer is concentrated in an approximately 2,800-line
main.rs;
- stable v0, default-branch, and v1 prerelease documentation do not yet present
one coherent product and release story;
- ontology breadth and skill count are growing faster than evidence about the
essential user journeys.
Decisions that are now fixed
- processkit remains the repository and product name.
- The processkit CLI is Rust and is distributed as native release artifacts.
- Release distribution follows aibox's local container/host split.
- Python remains the authoritative MCP server implementation language.
- MCP server code remains installed with the relevant skill packages.
- Skills, schemas, processes, state machines, and entities remain visible
files rather than compiled opaque resources.
context/ and src/context/ retain their separate responsibilities.
- aibox is an optional downstream installer/integrator, not a build-time or
release-time dependency of processkit.
- No GitHub Actions are introduced; build, test, signing, publishing, and
documentation operations remain local.
- v0 compatibility remains available until migration, rollback,
interruption, secret-safety, and downstream parity gates pass.
Correct directory and ownership model
The repository has two intentionally different processkit installations:
| Path |
Responsibility |
Ownership |
context/ |
Project-management state for developing processkit itself |
The processkit repository as a normal processkit consumer |
src/context/ |
Release payload installed into derived projects |
The processkit product as producer |
They must not be merged, mechanically synchronized, or treated as redundant
copies.
context/ proves the consumer experience. It should be installed and updated
through the same supported mechanism used by derived projects. Its entities,
decisions, migrations, team state, and local configuration belong to the
processkit project and must never leak into a release.
src/context/ is the curated product source. Release gates must verify that it
contains only shippable schemas, skills, processes, state machines, manifests,
adapters, scaffolding, and other distribution content.
The relationship is:
processkit release artifact
│
├── installed into derived projects
│
└── installed into processkit/context/ for dogfooding
processkit/src/context/
└── producer source from which that artifact is assembled
Dogfooding is an acceptance test, not source duplication.
Product boundary
Rust CLI responsibilities
The native CLI should own operations that require a stable executable,
cross-platform distribution, strong filesystem safety, release trust, and
machine-consumable lifecycle contracts:
- release discovery and acquisition;
- signature and checksum verification;
- deterministic installation planning;
- profile and harness selection;
- transactional install;
- three-way managed updates;
- compatibility inspection;
- migration planning and orchestration;
- interruption recovery;
- conservative uninstall;
- provenance and managed-path verification;
- environment and runtime diagnostics;
- harness configuration generation;
- package/profile inspection;
- optional supervision of the Python MCP gateway.
Python MCP responsibilities
Python MCP servers should continue to own:
- MCP capability and tool registration;
- validated entity reads and writes;
- schema-backed entity operations;
- state-machine transitions;
- event-log side effects;
- skill discovery and routing;
- work, decision, note, artifact, migration, team, and other domain tools;
- index queries and process-specific orchestration;
- provider-neutral gateway aggregation;
- per-skill MCP entry points.
Visible content responsibilities
The following remain files:
SKILL.md instructions and references;
- schemas and ontology declarations;
- state-machine definitions;
- processes;
- package and profile manifests;
- harness adapters;
- project configuration;
- templates and scaffolding;
- all project entities and audit logs.
This visibility is a product feature. It permits review, adaptation, Git
history, upstream contribution, and provider-independent interpretation.
Target command surface
The CLI should have a human-facing surface and retain a smaller opaque machine
protocol.
Human-facing commands
processkit init
processkit plan
processkit install
processkit update
processkit verify
processkit doctor
processkit inspect
processkit migrate
processkit recover
processkit uninstall
processkit package
processkit harness
processkit mcp
Recommended semantics:
| Command |
Contract |
init |
Inspect a project and create the minimal processkit configuration without installing content or overwriting user files. |
plan |
Resolve a release, profile, harness projections, current ownership state, and compatibility evidence into a deterministic non-mutating change plan. |
install |
Review and transactionally apply an exact installation plan. |
update |
Three-way reconcile from installed provenance to a verified target release, preserving user changes or reporting conflicts. |
verify |
Verify release identity, managed-file digests, projection ownership, and target-local state. |
doctor |
Diagnose binary, Python, uv, dependency, filesystem, Git, harness, server-startup, manifest, index, and project health. |
inspect |
Report installed version, profile, packages, adapters, compatibility state, and managed versus user-owned paths. |
migrate |
Plan, apply, resume, or roll back versioned project-data migrations without hiding loss or unresolved dispositions. |
recover |
Resolve an interrupted installer or migration transaction using persisted evidence. |
uninstall |
Remove only unchanged, provably owned content and report preserved files. |
package |
List and inspect available profiles, components, skills, and their dependencies. |
harness |
Plan, install, verify, or remove managed harness projections without owning unrelated user configuration. |
mcp |
Diagnose, launch, or proxy the installed Python MCP gateway and individual server entry points. |
Machine-facing protocol
Retain:
processkit execute --request request.json
This is the stable aibox and automation boundary. It should accept one
versioned request and emit one versioned result envelope. Human CLI commands
may compile their intent into the same internal request types.
The machine protocol should remain explicit about:
- target root;
- requested operation;
- release/distribution identity;
- selected profiles;
- requested harness adapters;
- expected installed provenance;
- explicit mutation acknowledgement;
- conflict behavior;
- output schema version.
Human release resolution versus offline protocol
The current alpha requires callers to provide a local distribution path. That
is appropriate for the opaque protocol and offline operation but incomplete
for ordinary users.
Support both:
# Human, online, canonical release resolution
processkit install --version v1.0.0 --profile managed --harness codex
# Advanced or offline
processkit install --distribution ./processkit-v1.0.0 \
--profile managed --harness codex
# Machine integration
processkit execute --request install-request.json
Online resolution must:
- fetch canonical release metadata;
- verify a configured trust root;
- select the matching platform installer and distribution archive;
- verify the signed envelope and every bound digest;
- plan before mutation;
- require review or an explicit non-interactive acknowledgement;
- apply the exact plan.
No mutable branch or unverified latest-release URL should become an installation
input.
Python runtime contract
Python is an intentional processkit runtime dependency, not an MCP protocol
requirement. Document it that way.
The supported contract should identify:
- supported Python versions;
- supported
uv versions or compatibility range;
- whether dependency resolution may contact the network;
- where dependencies and caches live;
- how offline or air-gapped use is prepared;
- how server scripts declare and pin dependencies;
- startup timeout and health-check behavior;
- how stderr, logs, and secrets are handled;
- how a server is tested against supported MCP protocol versions.
The Rust CLI should make this dependency reliable:
processkit doctor
processkit mcp verify
processkit mcp serve --transport stdio
processkit mcp serve --transport streamable-http
processkit mcp proxy --url http://127.0.0.1:8000/mcp
processkit mcp serve may supervise the installed Python gateway. It does not
need to reimplement it. This offers a stable executable path to harnesses while
preserving Python as the server language:
{
"mcpServers": {
"processkit": {
"command": "processkit",
"args": ["mcp", "serve", "--transport", "stdio"]
}
}
}
Direct uv run context/.../server.py configurations should remain supported
for compatibility, development, and tightly scoped per-skill deployments.
Rust CLI architecture
Refactor the current installer into a library-backed CLI before its protocol
surface expands:
installer/
├── Cargo.toml
└── crates/
├── processkit-cli/
│ └── src/
│ ├── main.rs
│ ├── cli.rs
│ ├── output.rs
│ └── commands/
└── processkit-installer/
└── src/
├── lib.rs
├── protocol/
├── release/
├── trust/
├── distribution/
├── planning/
├── transaction/
├── ownership/
├── update/
├── compatibility/
├── migration/
├── recovery/
├── harness/
└── error.rs
The binary entry point should parse commands, call library operations, map
typed errors to stable codes, and render human or JSON output. It should not
contain filesystem transaction logic.
The library must:
- reject absolute or escaping distribution destinations;
- handle symlinks explicitly;
- lock a target before mutation;
- stage changes on the same filesystem where atomic replacement is required;
- persist a journal before each irreversible step;
- fsync evidence where interruption safety depends on durability;
- restore permissions safely;
- never follow untrusted archive paths;
- preserve unknown user-owned files;
- bind plans to release and target-state digests;
- make recovery idempotent;
- avoid panics on user-controlled data.
Required implementation order
Phase 0 — freeze the corrected product boundary
- Add the architecture decision to processkit.
- Update the v1 RFC and installer documentation to state that Python MCP is
retained intentionally.
- Document
context/ as dogfood consumer state and src/context/ as producer
deliverable.
- Remove any roadmap language implying a wholesale Rust MCP rewrite.
- Define success through user journeys rather than language purity or
ontology count.
Phase 1 — repair alpha contract and documentation consistency
- Make README command examples executable as written.
- Decide which commands accept canonical version resolution and which require
an explicit distribution.
- Ensure
--help, README, installer contract, and request schemas agree.
- Present stable v0 and exact-pin v1 alpha status consistently on the default
branch and release pages.
- Add a generated release-facts section for versions, artifact targets,
profile names, schema counts, and tool counts.
- Verify all documentation links from the staged release artifact.
Phase 2 — refactor the Rust installer
- Move planner and transaction behavior out of
main.rs.
- Introduce typed public errors with stable machine codes.
- Keep
anyhow or equivalent context at the executable boundary only.
- Add API documentation to all public library operations.
- Preserve current JSON request/result and plan fixtures.
- Prohibit
unwrap and expect on user- or release-controlled inputs.
- Make serialization failure handling explicit.
Phase 3 — complete native distribution
Adopt the aibox release split:
scripts/maintain.sh test
scripts/maintain.sh release X.Y.Z
scripts/maintain.sh release-host X.Y.Z
The container-side release phase produces:
processkit-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz
processkit-vX.Y.Z-aarch64-unknown-linux-gnu.tar.gz
The macOS host-side phase produces:
processkit-vX.Y.Z-x86_64-apple-darwin.tar.gz
processkit-vX.Y.Z-aarch64-apple-darwin.tar.gz
Every artifact requires:
- SHA-256 checksum;
- binding in the signed release envelope;
- version and target metadata;
- installed-binary smoke evidence;
processkit --version;
processkit --help;
- a non-mutating plan fixture.
The distribution archive containing processkit content remains a separate
signed asset. The installer executable and the content archive must be bound
to the same release identity without being conflated.
Phase 4 — add a human installer
Provide an aibox-style bootstrap script that:
- detects OS and architecture;
- selects an explicit or latest stable version;
- downloads canonical trust metadata and the matching installer;
- verifies checksums before execution;
- installs to
${PROCESSKIT_INSTALL_DIR:-$HOME/.local/bin};
- never requires root by default;
- reports PATH actions;
- runs
processkit --version and a safe help/doctor check.
The bootstrap script installs only the CLI. The CLI then plans and installs
project content.
Phase 5 — make Python MCP startup deterministic
- Define the Python and
uv compatibility policy.
- Add
processkit doctor checks for every runtime prerequisite.
- Verify PEP 723 dependency declarations during release.
- Test dependency preparation and startup outside a repository checkout.
- Add an explicit offline preparation path.
- Ensure normal server startup does not unexpectedly alter tracked files.
- Make gateway and per-skill startup failures actionable.
- Test MCP initialize, tools/list, representative read, representative write,
shutdown, and interruption behavior.
Phase 6 — supervise MCP through the Rust CLI
Add processkit mcp as a stable launcher and diagnostic surface while keeping
Python authoritative:
- resolve the installed project root;
- resolve the correct gateway or per-skill server;
- validate installed provenance;
- prepare a controlled environment;
- launch
uv without shell interpolation;
- forward stdio transparently;
- preserve MCP exit and signal behavior;
- redact secrets from diagnostic output;
- offer a streamable-HTTP daemon and stdio proxy where supported.
This phase improves usability without changing MCP implementation language.
Phase 7 — strengthen dogfood acceptance
Treat installation into processkit's own context/ as a release acceptance
scenario:
- stage the release artifact;
- plan an update against a disposable copy of the processkit repository;
- verify that project-owned context entities are preserved;
- apply the update;
- run pk-doctor and representative MCP operations;
- verify the release boundary on
src/context/;
- exercise rollback or recovery from a deliberately interrupted update;
- verify that no dogfood entity appears in the release archive.
Dogfood validation complements package tests; it must not replace fresh empty
project and independently derived-project tests.
Phase 8 — validate v0-to-v1 migration
Migration must be evidence-driven:
- detect the exact installed v0 layout and provenance;
- plan every entity and managed-file disposition;
- reject unknown kinds rather than silently guessing;
- report field loss and semantic changes;
- preserve append-only logs;
- journal mutation;
- support interruption recovery;
- retain the compatibility bridge until rollback and destruction of old state
are no longer necessary;
- verify aibox and direct-CLI migration paths against the same corpus.
Phase 9 — stabilize scope before v1 GA
Pause expansion of first-class concepts and skills unless required by a defined
v1 acceptance journey. Prioritize:
- install and verify;
- create and transition work;
- record and query a decision;
- hand over and resume a session;
- update with local customization;
- migrate from v0;
- recover from interruption;
- use Codex and Claude through the same canonical state.
Advanced ontology concepts should be available through packages and profiles
without dominating the default mental model.
Test strategy
Rust CLI tests
- unit tests for release identity, paths, signatures, digests, plans, and
ownership;
- golden request, result, plan, conflict, and error fixtures;
- archive traversal and symlink attacks;
- signature, checksum, size, target, and version mismatch;
- transaction interruption at every journaled step;
- idempotent recovery;
- unchanged, changed, deleted, and conflicting managed files;
- user-owned file preservation;
- conservative uninstall;
- arbitrary target directories;
- installed binary execution outside the checkout;
- all four target-platform smoke tests.
Python MCP tests
- schema and semantic validation;
- allowed and rejected state transitions;
- atomic entity and event behavior;
- index rebuild and stale-index recovery;
- gateway and per-skill parity;
- stdio and streamable-HTTP conformance;
- tool catalog generation and drift;
- secret redaction;
- concurrent or conflicting writes;
- project-root resolution;
- operation from the extracted distribution.
Integration tests
- Rust CLI installs a release into an empty project;
- the generated harness projection starts the Python gateway;
- representative read and write calls succeed;
- update preserves a user-modified skill or reports the correct conflict;
- uninstall preserves changed content;
- aibox invokes the opaque request/result boundary;
- direct CLI and aibox produce equivalent installed state;
- processkit updates its own dogfood
context/;
- no project-management entity leaks into
src/context/ or the archive.
Release evidence
The release should contain or reference machine-readable evidence for:
- source commit;
- version;
- Rust toolchain;
- build target;
- content archive digest;
- installer digests;
- public signing-key identity;
- release descriptor digest;
- provenance digest;
- test gate results;
- package smoke result;
- dogfood acceptance result;
- platform smoke results.
Security requirements
The CLI and Python runtime jointly form the trust boundary.
CLI
- verify before extraction;
- reject path traversal and unsafe link entries;
- bind executable, archive, descriptor, provenance, and manifest identities;
- use target-local locks and journals;
- avoid shell interpretation;
- preserve permissions deliberately;
- distinguish trusted release content from untrusted project content;
- never delete a path solely because its name appears in a new manifest;
- reject same-version equivocation and downgrade unless explicitly supported.
MCP runtime
- scope every operation to the resolved project root;
- validate writes through schemas and state machines;
- centralize canonical parsing and serialization;
- ensure write-plus-event behavior is atomic or recoverable;
- make annotations for read-only, destructive, and idempotent tools accurate;
- prevent raw filesystem escape through entity paths;
- redact credentials and private memory from errors and logs;
- keep provider credentials out of canonical project state;
- run HTTP transport on loopback by default and require explicit remote
exposure and authentication.
Documentation model
Maintain distinct documentation for:
- end users installing the CLI;
- project owners installing processkit content;
- harness integrators consuming the machine protocol;
- maintainers writing Python MCP servers;
- maintainers authoring skills and schemas;
- release operators building Linux and macOS artifacts;
- v0 consumers planning migration.
The README should remain a map:
- what processkit is;
- supported versus prerelease status;
- CLI installation;
- first useful
plan/install/verify;
- first MCP connection;
- links to deeper installer, runtime, authoring, migration, and release docs.
Risks and mitigations
| Risk |
Mitigation |
| Rust and Python boundaries become ambiguous |
Publish a responsibility matrix and enforce it in architecture reviews. |
| Python dependencies make startup non-deterministic |
Pin declarations, prepare caches, add doctor checks, and test offline operation. |
| Human CLI leaks low-level protocol requirements |
Keep explicit distribution inputs for offline/machine use and add canonical version resolution for humans. |
| Dogfood state leaks into releases |
Preserve the context/ versus src/context/ boundary and test the staged archive. |
| Dogfooding hides fresh-install problems |
Pair dogfood acceptance with empty-project and independent derived-project tests. |
| Installer monolith becomes unmaintainable |
Refactor into a library before expanding commands. |
| Ontology breadth overwhelms users |
Gate the default profile by proven journeys and expose advanced concepts progressively. |
| Compliance creates ceremonial agent calls |
Automate safe routing and acknowledgement where possible; measure false positives. |
| Harness projections overwrite user config |
Own only explicit managed keys and preserve unrelated content. |
| v0 migration loses semantics |
Use exact evidence, explicit dispositions, loss reporting, journaling, and retained compatibility. |
| Platform artifacts behave differently |
Build native macOS artifacts host-side and run target-specific smoke tests. |
| Rust launcher accidentally becomes a second MCP implementation |
Keep it a supervisor; Python remains authoritative unless a later decision changes the boundary. |
Suggested issue breakdown
Create focused follow-up issues in this order:
- Document the Rust CLI/Python MCP and
context//src/context/ boundaries.
- Repair v1 alpha README, help, and distribution-input consistency.
- Refactor the Rust installer into CLI and library crates.
- Add stable errors and freeze request/result/plan fixtures.
- Add canonical release resolution for human commands.
- Add Linux x86_64/aarch64 release artifacts.
- Add host-side macOS x86_64/aarch64 release artifacts.
- Add the bootstrap installer script.
- Define and implement
processkit doctor.
- Define the supported Python/
uv runtime contract.
- Add
processkit mcp supervision and diagnostics.
- Add full package-to-MCP extracted-release acceptance.
- Add processkit-repository dogfood update acceptance.
- Complete v0-to-v1 migration, recovery, and aibox parity.
- Reconcile default-branch, stable, and prerelease documentation.
- Execute the v1 GA gate.
Create the first four immediately. Refine later issues from the resulting
contract and fixture inventory.
Completion criteria
The product boundary is complete when:
- the Rust CLI is available for Linux x86_64/aarch64 and macOS
x86_64/aarch64;
- checksums and signed release metadata bind every executable and content
archive;
- a bootstrap script installs the CLI without requiring root;
- a human can install by exact version without manually assembling a
distribution path;
- aibox can consume the same release through
execute --request;
- install, update, verify, recover, migrate, and uninstall are transactional
and covered by interruption tests;
- Python and
uv prerequisites are explicit and fully diagnosed;
- the installed Python gateway passes MCP acceptance from an extracted
package;
- direct gateway and Rust-supervised gateway modes are behaviorally equivalent;
- Codex and Claude projections preserve unrelated user configuration;
- v0 projects receive deterministic migration plans with explicit loss and
disposition reporting;
- processkit can update its own installed dogfood
context/;
- dogfood entities never enter
src/context/ or release artifacts;
- essential project workflows are simple in the default profile;
- stable and prerelease documentation accurately match their binaries;
- no GitHub Actions have been introduced.
Immediate next actions
The next bounded implementation slice should:
- land the corrected architecture statement;
- fix alpha README and CLI contract inconsistencies;
- refactor the Rust monolith without changing behavior;
- freeze machine protocol and plan fixtures;
- add the four-platform release plan and aibox-compatible artifact naming;
- define
processkit doctor and the Python runtime contract.
Do not rewrite MCP servers in Rust. Do not merge context/ and src/context/.
Do not expand the default ontology while installation, update, runtime
diagnostics, and migration remain incomplete.
The guiding constraint is:
Finish processkit as a trustworthy native lifecycle product around its
visible content and Python MCP runtime before adding more conceptual breadth.
Primary evidence
processkit: Rust CLI and Python MCP product briefing
Status: Approved direction and implementation briefing
Date: 2026-07-27
Evaluated release:
v1.0.0-alpha.3Audience: processkit and projectious.work portfolio maintainers
Decision record:
DEC-20260727_1738-SnappyMesa-define-processkit-rust-cli-and-pythonExecutive summary
Continue developing processkit as a hybrid, provider-neutral product:
boundary;
remain visible, versioned files;
context/remains processkit's own normally installed project-managementcontext and is a genuine dogfood consumer;
src/context/remains the distinct release deliverable installed intoderived projects.
This is not a transitional compromise. It is the target architecture:
The Model Context Protocol is language-neutral and does not require Python.
Keeping processkit's MCP servers in Python is nevertheless the right product
decision: the implementation and tests are mature, skill packages can carry
self-contained servers, domain behavior remains inspectable, and a wholesale
Rust rewrite would create substantial risk without a corresponding user
benefit.
The
v1.0.0-alpha.3release already establishes much of the correct Rust CLIfoundation: deterministic planning, transactional installation, signed release
verification, updates, recovery, conservative uninstall, compatibility
inspection, and opaque machine request/result envelopes. The next work should
stabilize and productize that boundary rather than expand the ontology or
rewrite the MCP layer.
Current-state assessment
What aligns strongly with the vision
processkit already embodies the strategic center of a provider-neutral,
AI-assisted operating system for projects:
history;
release it;
These are core product strengths and should remain fixed.
What
v1.0.0-alpha.3addsThe evaluated alpha adds a native Rust installer with:
plan;install;update;verify;verify-release;recover;uninstall;inspect-compatibility;execute --requestintegration boundary;This is the right correction to the v0 manual-copy installation model.
Remaining gaps
The alpha is not yet a complete standalone product experience:
complete processkit CLI;
--distributioninput;uv, and Python dependencies remain runtime prerequisites for MCP;protocol is not yet cleanly expressed;
main.rs;one coherent product and release story;
essential user journeys.
Decisions that are now fixed
files rather than compiled opaque resources.
context/andsrc/context/retain their separate responsibilities.release-time dependency of processkit.
documentation operations remain local.
interruption, secret-safety, and downstream parity gates pass.
Correct directory and ownership model
The repository has two intentionally different processkit installations:
context/src/context/They must not be merged, mechanically synchronized, or treated as redundant
copies.
context/proves the consumer experience. It should be installed and updatedthrough the same supported mechanism used by derived projects. Its entities,
decisions, migrations, team state, and local configuration belong to the
processkit project and must never leak into a release.
src/context/is the curated product source. Release gates must verify that itcontains only shippable schemas, skills, processes, state machines, manifests,
adapters, scaffolding, and other distribution content.
The relationship is:
Dogfooding is an acceptance test, not source duplication.
Product boundary
Rust CLI responsibilities
The native CLI should own operations that require a stable executable,
cross-platform distribution, strong filesystem safety, release trust, and
machine-consumable lifecycle contracts:
Python MCP responsibilities
Python MCP servers should continue to own:
Visible content responsibilities
The following remain files:
SKILL.mdinstructions and references;This visibility is a product feature. It permits review, adaptation, Git
history, upstream contribution, and provider-independent interpretation.
Target command surface
The CLI should have a human-facing surface and retain a smaller opaque machine
protocol.
Human-facing commands
Recommended semantics:
initplaninstallupdateverifydoctoruv, dependency, filesystem, Git, harness, server-startup, manifest, index, and project health.inspectmigraterecoveruninstallpackageharnessmcpMachine-facing protocol
Retain:
This is the stable aibox and automation boundary. It should accept one
versioned request and emit one versioned result envelope. Human CLI commands
may compile their intent into the same internal request types.
The machine protocol should remain explicit about:
Human release resolution versus offline protocol
The current alpha requires callers to provide a local distribution path. That
is appropriate for the opaque protocol and offline operation but incomplete
for ordinary users.
Support both:
Online resolution must:
No mutable branch or unverified latest-release URL should become an installation
input.
Python runtime contract
Python is an intentional processkit runtime dependency, not an MCP protocol
requirement. Document it that way.
The supported contract should identify:
uvversions or compatibility range;The Rust CLI should make this dependency reliable:
processkit mcp servemay supervise the installed Python gateway. It does notneed to reimplement it. This offers a stable executable path to harnesses while
preserving Python as the server language:
{ "mcpServers": { "processkit": { "command": "processkit", "args": ["mcp", "serve", "--transport", "stdio"] } } }Direct
uv run context/.../server.pyconfigurations should remain supportedfor compatibility, development, and tightly scoped per-skill deployments.
Rust CLI architecture
Refactor the current installer into a library-backed CLI before its protocol
surface expands:
The binary entry point should parse commands, call library operations, map
typed errors to stable codes, and render human or JSON output. It should not
contain filesystem transaction logic.
The library must:
Required implementation order
Phase 0 — freeze the corrected product boundary
retained intentionally.
context/as dogfood consumer state andsrc/context/as producerdeliverable.
ontology count.
Phase 1 — repair alpha contract and documentation consistency
an explicit distribution.
--help, README, installer contract, and request schemas agree.branch and release pages.
profile names, schema counts, and tool counts.
Phase 2 — refactor the Rust installer
main.rs.anyhowor equivalent context at the executable boundary only.unwrapandexpecton user- or release-controlled inputs.Phase 3 — complete native distribution
Adopt the aibox release split:
The container-side release phase produces:
The macOS host-side phase produces:
Every artifact requires:
processkit --version;processkit --help;The distribution archive containing processkit content remains a separate
signed asset. The installer executable and the content archive must be bound
to the same release identity without being conflated.
Phase 4 — add a human installer
Provide an aibox-style bootstrap script that:
${PROCESSKIT_INSTALL_DIR:-$HOME/.local/bin};processkit --versionand a safe help/doctor check.The bootstrap script installs only the CLI. The CLI then plans and installs
project content.
Phase 5 — make Python MCP startup deterministic
uvcompatibility policy.processkit doctorchecks for every runtime prerequisite.shutdown, and interruption behavior.
Phase 6 — supervise MCP through the Rust CLI
Add
processkit mcpas a stable launcher and diagnostic surface while keepingPython authoritative:
uvwithout shell interpolation;This phase improves usability without changing MCP implementation language.
Phase 7 — strengthen dogfood acceptance
Treat installation into processkit's own
context/as a release acceptancescenario:
src/context/;Dogfood validation complements package tests; it must not replace fresh empty
project and independently derived-project tests.
Phase 8 — validate v0-to-v1 migration
Migration must be evidence-driven:
are no longer necessary;
Phase 9 — stabilize scope before v1 GA
Pause expansion of first-class concepts and skills unless required by a defined
v1 acceptance journey. Prioritize:
Advanced ontology concepts should be available through packages and profiles
without dominating the default mental model.
Test strategy
Rust CLI tests
ownership;
Python MCP tests
Integration tests
context/;src/context/or the archive.Release evidence
The release should contain or reference machine-readable evidence for:
Security requirements
The CLI and Python runtime jointly form the trust boundary.
CLI
MCP runtime
exposure and authentication.
Documentation model
Maintain distinct documentation for:
The README should remain a map:
plan/install/verify;Risks and mitigations
context/versussrc/context/boundary and test the staged archive.Suggested issue breakdown
Create focused follow-up issues in this order:
context//src/context/boundaries.processkit doctor.uvruntime contract.processkit mcpsupervision and diagnostics.Create the first four immediately. Refine later issues from the resulting
contract and fixture inventory.
Completion criteria
The product boundary is complete when:
x86_64/aarch64;
archive;
distribution path;
execute --request;and covered by interruption tests;
uvprerequisites are explicit and fully diagnosed;package;
disposition reporting;
context/;src/context/or release artifacts;Immediate next actions
The next bounded implementation slice should:
processkit doctorand the Python runtime contract.Do not rewrite MCP servers in Rust. Do not merge
context/andsrc/context/.Do not expand the default ontology while installation, update, runtime
diagnostics, and migration remain incomplete.
The guiding constraint is:
Primary evidence
v1.0.0-alpha.3release