An evidence-backed digital counterpart for a PI's ongoing work.
OPL Persona helps one person keep mail, knowledge, professional context, and public-facing work connected without taking ownership away from the systems where that information belongs. It turns evidence from OPL Relay, an Obsidian vault, and a lab website into explicit proposals that can be reviewed before anything is changed.
It is designed for work that continues across conversations: keeping a relationship-aware mail response grounded in prior evidence, turning a new publication into a knowledge and website update, or developing a technical memo from the context already available to the PI.
- Brings together evidence and context from mail, personal knowledge, and website work without copying their source data into a new database.
- Maintains a private cross-domain Inbox for information that needs to be assessed, organized, or turned into an action.
- Produces reviewable proposals for mail triage, Obsidian notes, and website updates, with source references and policy context.
- Keeps external writes under the authority of their owner: Relay handles mail facts, drafts, Apple Mail review, sending, and receipts; Obsidian owns notes; and the website repository owns publication and deployment.
Persona is a judgment and coordination layer. It is not a replacement mail client, a second Obsidian vault, or a website CMS.
Each digital counterpart has one user-owned Profile Workspace. It holds private profile context, preferences, policies, proposal state, and module-maintained data. A typical workspace is:
~/OPL/profiles/<profile>/
├── profile/ # Who this person is and durable profile references
├── policies/ # Personal handling rules
├── context/ # Ongoing work context
├── templates/ # Reusable personal templates
├── exports/ # Explicit user-facing outputs
└── data/
├── relay/ # Mail evidence, drafts, memory, and sync state
└── persona/ # Inbox, proposals, approvals, and receipts
Select the workspace with the single OPL_PROFILE_WORKSPACE environment
variable. Without it, Persona uses ~/OPL/profiles/<user>. The source checkout,
Codex Plugin cache, and any OPL Package installation contain code and contracts
only; they are never a home for private mail, vault contents, credentials, or
approvals.
Clone the repository, install the development CLI, and initialize a Profile Workspace:
git clone git@github.com:gaofeng21cn/opl-persona.git
cd opl-persona
make install-local
export OPL_PROFILE_WORKSPACE="$HOME/OPL/profiles/<profile>"
opl-persona --json setup init
opl-persona --json setup statussetup init is idempotent and creates missing templates without overwriting
user content. Fill profile/identity.md, then bind the Obsidian vault by
storing only a local reference:
opl-persona --json binding set \
--id my-knowledge --provider obsidian --path "/path/to/Obsidian"
opl-persona --json binding check --id my-knowledgePersona does not read the vault during binding setup. Configure mail separately with OPL Relay using the same Profile Workspace.
For the complete proposal contract and owner boundaries, see Architecture Guidance.
This repository ships a Codex Plugin carrier. Codex can add the marketplace
from a local checkout or from this Git repository. The marketplace identifier
is opl-persona in both cases.
From a local checkout:
codex plugin marketplace add "$(pwd -P)" --json
codex plugin list --marketplace opl-persona --available --json
codex plugin add opl-persona@opl-persona --jsonFrom GitHub:
codex plugin marketplace add https://github.com/gaofeng21cn/opl-persona.git --ref main --json
codex plugin list --marketplace opl-persona --available --json
codex plugin add opl-persona@opl-persona --jsonAfter installation, start a new Codex task so it loads the installed Plugin snapshot. For normal work, ask Codex in natural language and let the Plugin route to the declared Package actions. It will produce proposals first; it does not silently edit mail, an Obsidian vault, or a website.
To refresh a Git marketplace snapshot, then reinstall the Plugin snapshot:
codex plugin marketplace upgrade opl-persona --json
codex plugin add opl-persona@opl-persona --jsonThere are two distinct distribution paths:
| Path | Status today | What it means |
|---|---|---|
| Codex Plugin | Native Codex carrier; current state comes from codex plugin list --json |
Installs and exposes the Persona Skill carrier without making the checkout or Plugin cache a data authority. |
| OPL Package publication | Persona owner descriptor plus immutable GHCR payloads | Publishes Package identity and bytes independently; latest-stable is a moving owner channel, not installed-state proof. |
The Persona repository owns its descriptor, capability declarations, source provenance, and Package publication. OPL Base may download, verify, and hand off selected OCI bytes; the configured native carrier owns physical install, update, repair, removal, and its own readback. OPL Framework discovers installed descriptors, delegates carrier actions, and aggregates presence and callability for OPL App. Persona does not implement a second updater. Its stable owner channel is:
ghcr.io/gaofeng21cn/one-person-lab-packages/opl-persona:latest-stable
GitHub Releases are not part of Persona distribution. The Codex Git path and the OPL Package path share source provenance but have separate lifecycle authorities. Publication must be read from the public immutable GHCR digest; installed/current state must be read separately from the configured native carrier. Neither may be inferred from this README, a source tag, or Framework projection alone.
See Distribution for the exact authority and verification boundaries.
python3 -m pytest -q
actionlint .github/workflows/ci.ymlBefore release, maintainers also run the official validate_plugin.py supplied
with the active Codex Plugin Creator. Its installation path is intentionally
not hard-coded in this repository. GitHub Actions runs portable structural
checks in addition to the test suite.
OPL Persona is available under the Apache License 2.0.
