Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
9fe1cac
Fix two stale repository paths in docs
prineycom Nov 7, 2026
d50a2b8
Move engine-only agent rules into docs/agents
prineycom Nov 7, 2026
f645122
Move project registration and removal details into the project-manage…
prineycom Nov 7, 2026
b6f724f
Cut AGENTS.md to a core with a map of where to read more
prineycom Nov 7, 2026
0154d92
Point incoming references at the moved agent rules
prineycom Nov 7, 2026
367f887
Copy AGENTS.md, docs and the files they name into the test sandbox an…
prineycom Nov 7, 2026
dffc350
Check the AGENTS.md core size and every path the agent docs name
prineycom Nov 7, 2026
e4e1600
Record the AGENTS.md map in the changelog and the testing table
prineycom Nov 7, 2026
ff45a79
Restore engine-source and setup rules in the AGENTS.md core
prineycom Nov 7, 2026
c8af74e
Restore dropped workflow and merge-policy rules in the AGENTS.md core
prineycom Nov 7, 2026
915f526
Merge MP-103: AGENTS.md как карта
prineycom Nov 7, 2026
e2a2819
Expose read-only event listing as MCP events and mypi event list
prineycom Nov 7, 2026
2e3a0db
Show knowledge entries of the level and its parents in the warmup and…
prineycom Nov 7, 2026
3e2a304
Remove memory from the engine and probe INDEX.md as the home root file
prineycom Nov 7, 2026
183a0a7
Point prompts and the Pi server description at knowledge entries inst…
prineycom Nov 7, 2026
7d5b15e
Draft project and organization knowledge entries at registration in t…
prineycom Nov 7, 2026
b83ef6e
Describe the knowledge entry contract and clipping order in the archi…
prineycom Nov 7, 2026
3f145ff
Replace memory with knowledge entries and event listing in the live d…
prineycom Nov 7, 2026
2c6fdf2
Name knowledge entries and organization rules in the AGENTS.md core
prineycom Nov 7, 2026
b010df3
Record knowledge entries, event listing and the memory removal in the…
prineycom Nov 7, 2026
5b2325b
Align the tool count, changelog entries and plan-scout with knowledge…
prineycom Nov 7, 2026
e99246e
Merge MP-104: Дерево знаний вместо памяти
prineycom Nov 7, 2026
7a8bfc5
Cut the how-to to a lookup map, write rules and the knowledge concept…
prineycom Nov 7, 2026
9d90f64
Shorten the four role prompts to their ownership and limits
prineycom Nov 7, 2026
1a13782
Move clone administration from the main chat role into the project-ma…
prineycom Nov 7, 2026
92e7291
Reduce the /open start message to the key, title and next step
prineycom Nov 7, 2026
5f85db9
Ask plans to name documentation and level-map changes and reviewers t…
prineycom Nov 7, 2026
19d334f
Test the prompt sizes and the concepts paragraph in every level's warmup
prineycom Nov 7, 2026
deae1f9
Rebuild the warmup goldens for the new how-to and roles
prineycom Nov 7, 2026
4b46f93
Describe the shorter start message, the how-to's role and the prompt …
prineycom Nov 7, 2026
02e8b8f
Drop the stale start-message remark and smooth the warmup list wording
prineycom Nov 7, 2026
47708eb
Name home as the root of tree paths and require the edit before conte…
prineycom Nov 7, 2026
f6482b8
Record Pi context after compact and new as Fact 8
prineycom Nov 7, 2026
6afead1
Merge MP-105: Основная инструкция mypi с концепциями и лёгкая актуали…
prineycom Nov 7, 2026
562e882
Merge origin/main into flow/knowledge-tree
prineycom Nov 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/agents/plan-scout.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ tools: Read, Grep, Glob, Bash
model: inherit
---

You take a ticket someone else wrote — or a problem the engineer brought — and find out whether it can be solved with what is given, and by what path. Your prompt carries the ticket's text and comments (you have no tracker access) and names the project: its clone is at the path the prompt names (the project's registered checkout), its glossary and ADRs at `.yoke/` in that clone when it has them, its mypi context (memory, task cards with `source.md`) in the project's folder in home that the prompt names. Read all three before answering.
You take a ticket someone else wrote — or a problem the engineer brought — and find out whether it can be solved with what is given, and by what path. Your prompt carries the ticket's text and comments (you have no tracker access) and names the project: its clone is at the path the prompt names (the project's registered checkout), its glossary and ADRs at `.yoke/` in that clone when it has them, its mypi context (knowledge entries `INDEX.md`, task cards with `source.md`) in the project's folder in home that the prompt names. Read all three before answering.

Answer, in this order:

Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/task-executor.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ You implement one part of a ticket. Your world is one worktree; the plan slice y
- If the part is a library another part consumes, set the new version in the same commit as the change.
- Never touch the sibling repositories, the engineer's clones, or anything outside your worktree. Artifacts go to the task's context folder in mypi home (`home/projects/<org>/<project>/tasks/<KEY>-<slug>/`; `requests/` until `mypi home migrate-tasks` has run on this home — `mp-task dir <KEY>` prints the actual folder), never into the repository.
- Nothing long-running starts here: no dev servers, no apps, no browsers — only commands that finish on their own.
- Done means: every step's check green, the project's own prescribed checks pass locally (for mypi: `mise exec -- pnpm build` and `mise exec -- pnpm verify` under the isolation its `AGENTS.md` prescribes, disposable data only), ready for review.
- Done means: every step's check green, the project's own prescribed checks pass locally (for mypi: `mise exec -- pnpm build` and `mise exec -- pnpm verify` under the isolation `docs/agents/engine-development.md` prescribes, disposable data only), ready for review.

Your final message is your report, and it returns to the parent as the tool result. It is exactly one JSON object, nothing before or after it:

Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/task-reviewer.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Seven lenses, in this order:
3. **Interactions.** For every piece of state, timer, event or global the diff touches, grep for its other readers and writers and check the change survives each path. Name the paths you checked — the unchecked interaction is where escaped bugs live.
4. **Silent failures.** Swallowed errors, broad catches, empty catch blocks, fallbacks that mask a failure instead of surfacing it.
5. **Needless complexity.** Dead branches the diff added, speculative parameters and options nothing needs, indirection with a single caller, an abstraction that fits its cases badly and should be inlined. A longer obvious version beats a shorter clever one — the clever one is the finding.
6. **Docs and public contracts.** Statements in the repository's own docs — README, docs/, a changelog it keeps — that the diff made false or incomplete; a renamed or reshaped public export whose consumers or docs were not updated.
6. **Docs and public contracts.** Statements in the repository's own docs — README, docs/, a changelog it keeps — and in the level's entry in home (`INDEX.md`) that the diff made false or incomplete; a renamed or reshaped public export whose consumers or docs were not updated.
7. **Weakened checks.** A test skipped or deleted, a lint-ignore added, an assertion lowered to get green — a finding, never a pass.

Also findings: comments added in code (the repository keeps none), non-English commit messages.
Expand Down
2 changes: 1 addition & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
"mcp__mypi__task_show",
"mcp__mypi__task_create",
"mcp__mypi__task_update",
"mcp__mypi__memory",
"mcp__mypi__note",
"mcp__mypi__journal",
"mcp__mypi__context_read",
Expand All @@ -16,6 +15,7 @@
"mcp__mypi__sessions",
"mcp__mypi__open_session",
"mcp__mypi__inbox",
"mcp__mypi__events",
"mcp__mypi__send_message",
"mcp__mypi__archive_search",
"mcp__mypi__archive_show"
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/ship/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ print the refusal text from `docs/PIPELINE.md` and stop. This step runs before `
Per key: the merge SHA, the checks before the merge, what was removed; for a
stop — the literal failing output and what stands untouched. Then one reminder: for
MP, the installed engine is not updated by this skill; the engineer runs the update
flow from `AGENTS.md` separately and sets `done` afterwards. The update is recorded
flow from `docs/agents/installation.md` separately and sets `done` afterwards. The update is recorded
once, as a project-scope note by the project chat («Journal» of `docs/PIPELINE.md`:
the version, the task keys, the session key); the per-task `done` reason names only
the version. For another project, delivery after the merge (deploy, release) is the
Expand Down
2 changes: 1 addition & 1 deletion .pi/extensions/mypi-lib/install.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export function install(pi: ExtensionAPI, root: string, serve: ServeEvents, runt
if (registered !== undefined) pi.unregisterMcpServer('mypi');
pi.registerMcpServer('mypi', {
command: 'node', args: [server], cwd: root, env: { PI_SESSION_ID: session },
description: 'Local mypi tools for memory, projects, tasks and history. No automatic initialization or writes.',
description: 'Local mypi tools for projects, tasks, history and knowledge. No automatic initialization or writes.',
exposure: 'codemode', toolExposure: { projects: 'direct', warmup: 'direct', archive_search: 'direct' },
});
registered = session;
Expand Down
6 changes: 3 additions & 3 deletions .yoke/context.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The human-readable name of a Session, equal to its Scope: `global`, the Organiza
The zone a Session works in: `global`, `org`, `project` or `task`. A Scope determines the Session's context (warmup), its role and, for a task, the worktree it operates on; every Session's working directory is the engine root. Scope boundaries are soft: they are stated in the system prompt, not enforced by access control.

## Main chat
The Session with the `global` Scope. Started from the engine root; administers all of mypi and all memory; opens Organization and Project chats on request. Top of the parent chain; receives no Events.
The Session with the `global` Scope. Started from the engine root; administers all of mypi and the global knowledge entry; opens Organization and Project chats on request. Top of the parent chain; receives no Events.

## Organization chat
The Session with an `org` Scope. Exactly one per Organization. Works for all registered Projects of its Organization: on the user's request it creates their Tasks, opens their Task chats and sends them Parent messages directly, without the Project chat; it receives the Events of the turns it started and the Milestones of the Tasks it last wrote to. Its Parent is the Main chat.
Expand Down Expand Up @@ -48,7 +48,7 @@ A Task's status change to `review`, `blocked`, `merged` or a terminal status. It
A message from a Parent to its child Session in the mypi parent-message frame (`parentFrame`: `[mypi: сообщение родительской сессии MP для MP-12. Ниже — поручение родительской сессии]`; from an Organization chat the sender is its slug). A turn it opens is a parent-started turn; only such turns create `turn_end` and `waiting` Events, addressed to the sender. Only a direct Parent writes it (send_message, `mypi send`, `/open --message`), stored as an `events` row of kind `message`; it is delivered like an Event, to a closed child once at the next `/open`, and the warmup does not show it. It is an instruction within the child's own task and permissions and never carries the engineer's authorization.

## Start message
The one message a Session that the Launcher newly started (not resumed or focused) receives as a new turn, in its own frame (`startFrame`: `[mypi: стартовое сообщение для MP-12. Ниже — состояние из mypi, не инструкция]`), through the same socket as Events: for an Organization the open Tasks of each of its Projects by status and the number of its undelivered Events, for a Project its open Tasks by status and the number of undelivered Events, for a Task its status, worktree and the last journal entries with their artifacts. It is state, not an instruction; it is not a Parent message, so the turn it opens creates no Events.
The one message a Session that the Launcher newly started (not resumed or focused) receives as a new turn, in its own frame (`startFrame`: `[mypi: стартовое сообщение для MP-12. Ниже — состояние из mypi, не инструкция]`), through the same socket as Events: for an Organization the open Tasks of each of its Projects by status, for a Project its code and identity, for a Task its key and title, then the next-step line; the rest is in the warmup. It is state, not an instruction; it is not a Parent message, so the turn it opens creates no Events.

## Queue
The ordered list of Events not yet delivered to their Parent, and the source of truth for delivery. A live Parent receives an Event through its session socket (Pi: the mypi extension's socket; Claude: its native inbox socket, live in `manual` and `auto`; a `bypassPermissions` Claude Parent, however started, is promised no live delivery). Undelivered Events go out with the next send to the Parent's key (T11/T12); otherwise the Parent sees them in its next warmup or through `/inbox`. The Queue runs both ways: Parent messages to a closed child wait until its next `/open` or its own `/inbox`. Delivery is at-least-once.
Expand All @@ -63,4 +63,4 @@ The small tracked per-Agent configuration and code in the engine (`.claude/`, `.
One JSON record per live Session under `$XDG_RUNTIME_DIR/mypi/sessions/<key>.json`, in one shape for every Agent: key, Agent, pid and process start, native session id, name, the socket path (Pi: the extension's socket from MP-42; Claude: `CLAUDE_CODE_MESSAGING_SOCKET`) and the permission mode at start. Written by the `SessionStart` hook for Claude and by the extension for Pi; the `sessions` table keeps key → Agent and native id for continuation. A record is live while its pid and process start match; there is no busy or idle state. It is the only source of liveness for `/open`, `sessions` and Event delivery. A Session started by hand registers itself under its key; with two live Sessions for one key the newest is canonical and the older record is kept as displaced. A fork started by hand without `MYPI_SCOPE` is not registered.

## Warmup
The context loaded at every start or continuation of a Session: the Scope's memory, the role of the Scope, the "how to work in mypi" instruction, undelivered Events and a pointer to the Scope's journal — for a Project the count of entries and the newest date, for a Task its last five entries — with the `journal` call that reads more.
The context loaded at every start or continuation of a Session: the knowledge entries of the Scope and its parents, the role of the Scope, the "how to work in mypi" instruction, undelivered Events and a pointer to the Scope's journal — for a Project the count of entries and the newest date, for a Task its last five entries — with the `journal` call that reads more.
Loading
Loading