Core concepts
The data model behind packs, tracks, aliases, workspaces, projects, scopes, and credits.
The first Epismo concept is the difference between reusable information and active work. Reusable information is stored as packs. Active work is stored as tracks. This split keeps agent context easy to retrieve and keeps execution state easy for people and automation to update.
Packs vs tracks
| Decision | Pack | Track |
|---|---|---|
| Purpose | Reuse knowledge or process | Move work forward |
| Lifecycle | Long-lived | Updated until completed or deleted |
| Examples | Playbooks, runbooks, repo notes, prompt patterns | Tasks, goals, project plans, review items |
| State | Usually no execution state | Status, progress, due dates, assignees |
| Agent usage | Read as context or procedure | Create and update through tools |
If you ask "will this be useful again later?" and the answer is yes, create a pack. If you ask "does this move toward completion?" and the answer is yes, create a track.
Packs
Packs are reusable artifacts. Epismo supports two pack types.
| Type | Shape | Best for |
|---|---|---|
workflow |
steps[] |
Procedures, checklists, review criteria, operating playbooks |
context |
blocks[] |
Repository notes, policies, research notes, API background, FAQs |
A workflow pack describes how to do something. Examples include a release review process, bug triage flow, or skill creation checklist. Each step can have title, content, dueDate, dependsOn, parentId, and assignee. Workflow step assignees are human or agent IDs. Workspace user IDs are not valid workflow-step assignees.
A context pack describes what someone or an agent should know. Examples include monorepo layout, authentication background, or a customer research summary. For large context packs, read the outline first and then fetch only the blocks the agent needs.
Tracks
Tracks represent active work. Epismo supports two track types.
| Type | Fields | Status |
|---|---|---|
task |
dueDate, status, assignee, parentId, dependsOn, goalId |
backlog, todo, in_progress, done |
goal |
dueDate, status, progress |
not_started, on_track, at_risk, postponed, completed |
Tasks are concrete units of work. They can have assignees, due dates, dependencies, parent tasks, and linked goals. Goals represent outcomes. progress is an integer from 0 to 100.
For planning many tasks at once, use bulk apply. Non-UUID draft IDs create new records and can be referenced by other drafts in the same request through dependsOn, parentId, and goalId. The server resolves those labels to real UUIDs.
Aliases
Aliases are human-readable references to packs.
| Form | Meaning |
|---|---|
@deploy-review |
Alias owned by the current user/account |
@hiroki/deploy-review |
Alias owned by another handle |
deploy-review |
Accepted when creating or deleting your own alias |
Aliases point to packs only. Tracks are referenced by UUID or by a URL containing a UUID. Use aliases in prompts, runbooks, and CI scripts when a stable human-readable reference is easier than a raw UUID.
Workspace, projects, and personal space
A workspace is the organization boundary. Without a workspace, data lives in personal space. Projects are containers inside a workspace and are commonly used as private sharing scopes.
The CLI resolves execution context in this order:
- If
EPISMO_TOKENembeds a workspace, use that workspace. - Otherwise use the saved default from
epismo workspace use <workspace-id>. - If no workspace is selected, use personal space.
The API accepts a workspaceId query parameter on supported endpoints. MCP derives workspace context from the bearer token.
Scope and sharing
Private records live in personal space or workspace projects. Create and update calls use scope.
{ "scope": { "type": "personal" } }{ "scope": { "type": "projects", "ids": ["project-id"] } }Search calls use scopes, because a search can include multiple private locations.
{
"scopes": [{ "type": "personal" }, { "type": "projects", "ids": ["project-id"] }]
}Use sharedWith when a private record should also be visible to specific user IDs or emails. On update, omitting scope or sharedWith preserves the current access settings.
Visibility and credits
Packs have visibility. private follows scope and sharing settings; public makes the pack discoverable. category can be empty or one of productivity, learning, programming, design, marketing, operations, or life.
Credits are quota for valuable agent-context retrieval and processing. Agent usage, pack search, track search, and pack reads consume credits. Fetch full or selected pack content only when detail is needed; checking search results or outlines first keeps later agent context smaller. Credit-gated operations may return 402 Payment Required when balance is insufficient.
Common choices
| Goal | Create |
|---|---|
| Store repository onboarding notes | Context pack |
| Save a repeatable review process | Workflow pack |
| Track this week's docs review | Task track |
| Track the outcome "ship docs v1" | Goal track |
| Give a pack a readable name | Alias |
| Share only with a team | Project scope |
| Test privately | Personal scope |