A runtime and marketplace for versioned, composable behavioral personas for AI coding agents.
Personas are not instruction lists. They are complete behavioral identities. The persona library ships freeform AGENTS.md markdown with a pack.toml manifest; the engine indexes the markdown, composes per-agent rendered output (Claude, Codex, Gemini, generic), and activates it via a single CLI call. A persona survives long sessions, surprising inputs, and the slow drift that turns careful operators into sloppy ones around turn 200.
crates/-- Rust workspace (24 crates): CLI, client engine, pack tooling, composition, conformance, catalog, memory, vault, object storage, HTTP server, MCP server, watch daemon, orchestrator (semantic-match persona selection), growth logpersonas/-- pack manifests for the persona library
Personas distribute as signed packs -- content-addressed tarballs with Ed25519 signatures and capability manifests. The CLI installs them into a central store outside your project tree. Your repo never gets persona files.
# Install + activate + render + print rendered output, one round-trip:
frameshift use cryptographic --from ./personas
# Or, split:
frameshift install cryptographic@0.1.0 --from-path ./personas/cryptographic
frameshift activate cryptographicAll state lives in $XDG_DATA_HOME/frameshift/:
cache/<sha256>/ # Content-addressed pack cache
projects/<project-id>/
config.toml # Declared dependencies
lock.toml # Exact versions, hashes, author pubkeys
active # Currently active persona
personas/<name>/
source/ # Pack contents (AGENTS.md + pack.toml)
rendered/{claude,codex,gemini,generic}/ # Per-agent rendered output
growth.md # Local-only, append-only
orchestrator/ # Per-project automate mode + audit state
Project ID is sha256(realpath(project_root)). Your project tree is never written to.
A persona is a directory containing two files:
personas/<name>/
AGENTS.md # The freeform persona body (identity, rules, frame, skills, growth notes)
pack.toml # Manifest: name, version, license, author, capability manifest
Example pack.toml:
schema_version = 1
name = "cryptographic"
version = "0.1.0"
author_handle = "ghost-frame"
author_pubkey = "ed25519:<hex>"
license = "Elastic-2.0"
[capability_manifest]
required_tools = ["Read", "Edit", "Write", "Bash"]
network_egress = falseAGENTS.md is freeform markdown -- L2 anchor, default questions, rules, skills, classification axis, cascade anchors, growth integration. Structure follows the L1/L2/L3 behavioral-architecture pattern described in personas/README.md.
A typed-source format (structured TOML with separate rules.toml, skills.toml, semantic diffs, patch operations) lives in the frameshift-source crate as the next-generation persona format. The live install path uses freeform AGENTS.md today.
Personas can declare a memory requirement in their pack manifest. The runtime satisfies it through a pluggable adapter trait with backends for HTTP APIs and local SQLite (full-text search). Any knowledge system that exposes store/search/recall endpoints works -- Kleos is the reference integration.
Growth is local. A single append-only file per installed persona, stored in the central store. Sessions deposit findings -- things learned, mistakes caught, patterns discovered. Future sessions read them back. Growth never flows upstream -- it stays on your machine, in your project context.
A persona is not static. It remembers what happened last time.
frameshift install <name@version> # Install a persona pack
frameshift install <name@version> --from-path <dir> # Install from local directory
frameshift activate <name> # Set active persona for this project
frameshift use <name> --from <library> # Install on demand + activate + print rendered persona
frameshift select [--task TEXT] [--library DIR] # Rank candidates with score/confidence/rationale
frameshift automate <on|off|status|lock|unlock> # Per-project automate-mode state machine
frameshift sync # Reconcile central store with lockfile
frameshift grow append <persona> <text> # Append a line to a persona's growth log
frameshift migrate # Move legacy project files into the central store
frameshift gc # Remove unreferenced cache entries
frameshift project-id # Print hashed project ID
cargo build
cargo testcargo run -p frameshift-cli -- project-id
cargo run -p frameshift-cli -- install cryptographic@0.1.0 --from-path personas/cryptographic| Variable | Default | Purpose |
|---|---|---|
BIND_ADDR |
0.0.0.0:3000 |
HTTP bind address |
POSTGRES_URL |
"" |
PostgreSQL connection URL |
OBJECT_STORE_ROOT |
/tmp/frameshift-objects |
Filesystem object store root |
LOG_LEVEL |
info |
Log filter |
LOG_FORMAT |
text |
text or json |
MAX_REQUEST_BYTES |
1048576 |
Max request body size |
MAX_SEARCH_LIMIT |
200 |
Max search limit |
SHUTDOWN_GRACE |
30 |
Grace period in seconds |
Elastic License 2.0. See LICENSE for details.
The Elastic License 2.0 prohibits offering FrameShift to third parties as a hosted or managed service. To sell, host, or distribute FrameShift on your own platform, contact us for a commercial license: support@syntheos.dev.
