🛟 Updated.
e019565 parent: b2739ab modified
.tickets/issues/0210-acp-create-mode-mm-acp-create-mm-init-from-an-acp.yaml +16 -3 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 210 |
| 3 | 3 | title: "ACP create mode (mm --acp-create): mm init from an ACP client" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-11-14T05:41:20.000Z |
| 9 | -updatedAt: 2026-11-14T07:05:01.000Z | |
| 9 | +updatedAt: 2026-11-14T07:20:30.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - enhancement |
| 12 | 12 | - kind::feature |
| @@ -119,12 +119,14 @@ body: | | ||
| 119 | 119 | tasks: |
| 120 | 120 | - id: 1 |
| 121 | 121 | title: Spike — which ACP clients (Zed, JetBrains, Neovim plugins…) support elicitation forms, permission dialogs, session config options |
| 122 | - state: open | |
| 122 | + state: closed | |
| 123 | 123 | priority: high |
| 124 | 124 | author: |
| 125 | 125 | name: k33g |
| 126 | 126 | email: ph.charriere@gmail.com |
| 127 | 127 | createdAt: 2026-11-14T05:41:20.000Z |
| 128 | + updatedAt: 2026-11-14T07:20:30.000Z | |
| 129 | + closedAt: 2026-11-14T07:20:30.000Z | |
| 128 | 130 | - id: 2 |
| 129 | 131 | title: Entry point mm --acp-create / mm acp-create, before config load |
| 130 | 132 | state: closed |
| @@ -296,3 +298,14 @@ comments: | ||
| 296 | 298 | `internal/acp/persist.go` (`startOver`), tests |
| 297 | 299 | `TestReloadWithoutSessionsStartsOver`, docs `reference/acp.md` and |
| 298 | 300 | `how-to/use-from-an-editor.md` EN+FR. |
| 301 | + - id: 5 | |
| 302 | + author: | |
| 303 | + name: k33g | |
| 304 | + email: ph.charriere@gmail.com | |
| 305 | + createdAt: 2026-11-14T07:20:30.000Z | |
| 306 | + body: | | |
| 307 | + Merged into main (b2739ab, commit 4d19a27). Closed. Task 1: tried | |
| 308 | + in Zed by the user, who reported everything works (wizard, /start, | |
| 309 | + /dockerinit, /sbxinit, /zedconfig, reload). Not tried in a second | |
| 310 | + ACP client, nor with a client that shows forms: the form path is | |
| 311 | + covered by tests with a fake client only. | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 210 | 2 | id: 210 |
| 3 | title: "ACP create mode (mm --acp-create): mm init from an ACP client" | 3 | title: "ACP create mode (mm --acp-create): mm init from an ACP client" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-11-14T05:41:20.000Z | 8 | createdAt: 2026-11-14T05:41:20.000Z |
| 9 | -updatedAt: 2026-11-14T07:05:01.000Z | 9 | +updatedAt: 2026-11-14T07:20:30.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - enhancement | 11 | - enhancement |
| 12 | - kind::feature | 12 | - kind::feature |
| @@ -119,12 +119,14 @@ body: | | |||
| 119 | tasks: | 119 | tasks: |
| 120 | - id: 1 | 120 | - id: 1 |
| 121 | title: Spike — which ACP clients (Zed, JetBrains, Neovim plugins…) support elicitation forms, permission dialogs, session config options | 121 | title: Spike — which ACP clients (Zed, JetBrains, Neovim plugins…) support elicitation forms, permission dialogs, session config options |
| 122 | - state: open | 122 | + state: closed |
| 123 | priority: high | 123 | priority: high |
| 124 | author: | 124 | author: |
| 125 | name: k33g | 125 | name: k33g |
| 126 | email: ph.charriere@gmail.com | 126 | email: ph.charriere@gmail.com |
| 127 | createdAt: 2026-11-14T05:41:20.000Z | 127 | createdAt: 2026-11-14T05:41:20.000Z |
| 128 | + updatedAt: 2026-11-14T07:20:30.000Z | ||
| 129 | + closedAt: 2026-11-14T07:20:30.000Z | ||
| 128 | - id: 2 | 130 | - id: 2 |
| 129 | title: Entry point mm --acp-create / mm acp-create, before config load | 131 | title: Entry point mm --acp-create / mm acp-create, before config load |
| 130 | state: closed | 132 | state: closed |
| @@ -296,3 +298,14 @@ comments: | |||
| 296 | `internal/acp/persist.go` (`startOver`), tests | 298 | `internal/acp/persist.go` (`startOver`), tests |
| 297 | `TestReloadWithoutSessionsStartsOver`, docs `reference/acp.md` and | 299 | `TestReloadWithoutSessionsStartsOver`, docs `reference/acp.md` and |
| 298 | `how-to/use-from-an-editor.md` EN+FR. | 300 | `how-to/use-from-an-editor.md` EN+FR. |
| 301 | + - id: 5 | ||
| 302 | + author: | ||
| 303 | + name: k33g | ||
| 304 | + email: ph.charriere@gmail.com | ||
| 305 | + createdAt: 2026-11-14T07:20:30.000Z | ||
| 306 | + body: | | ||
| 307 | + Merged into main (b2739ab, commit 4d19a27). Closed. Task 1: tried | ||
| 308 | + in Zed by the user, who reported everything works (wizard, /start, | ||
| 309 | + /dockerinit, /sbxinit, /zedconfig, reload). Not tried in a second | ||
| 310 | + ACP client, nor with a client that shows forms: the form path is | ||
| 311 | + covered by tests with a fake client only. | ||
modified
.tickets/issues/0212-mm-dockerinit-know-the-mm-folder-project-layout.yaml +9 -2 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 212 |
| 3 | 3 | title: "mm dockerinit: know the .mm folder (Project layout), as mm sbxinit does" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-11-14T06:29:41.000Z |
| 9 | -updatedAt: 2026-11-14T06:37:57.000Z | |
| 9 | +updatedAt: 2026-11-14T07:20:30.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - enhancement |
| 12 | 12 | - kind::feature |
| @@ -161,3 +161,10 @@ comments: | ||
| 161 | 161 | sbxenv.yaml comments). |
| 162 | 162 | updatedAt: 2026-11-14T06:37:57.000Z |
| 163 | 163 | closedAt: 2026-11-14T06:37:57.000Z |
| 164 | + - id: 2 | |
| 165 | + author: | |
| 166 | + name: k33g | |
| 167 | + email: ph.charriere@gmail.com | |
| 168 | + createdAt: 2026-11-14T07:20:30.000Z | |
| 169 | + body: | | |
| 170 | + Merged into main (b2739ab, commit 4d19a27). Closed. | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 212 | 2 | id: 212 |
| 3 | title: "mm dockerinit: know the .mm folder (Project layout), as mm sbxinit does" | 3 | title: "mm dockerinit: know the .mm folder (Project layout), as mm sbxinit does" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-11-14T06:29:41.000Z | 8 | createdAt: 2026-11-14T06:29:41.000Z |
| 9 | -updatedAt: 2026-11-14T06:37:57.000Z | 9 | +updatedAt: 2026-11-14T07:20:30.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - enhancement | 11 | - enhancement |
| 12 | - kind::feature | 12 | - kind::feature |
| @@ -161,3 +161,10 @@ comments: | |||
| 161 | sbxenv.yaml comments). | 161 | sbxenv.yaml comments). |
| 162 | updatedAt: 2026-11-14T06:37:57.000Z | 162 | updatedAt: 2026-11-14T06:37:57.000Z |
| 163 | closedAt: 2026-11-14T06:37:57.000Z | 163 | closedAt: 2026-11-14T06:37:57.000Z |
| 164 | + - id: 2 | ||
| 165 | + author: | ||
| 166 | + name: k33g | ||
| 167 | + email: ph.charriere@gmail.com | ||
| 168 | + createdAt: 2026-11-14T07:20:30.000Z | ||
| 169 | + body: | | ||
| 170 | + Merged into main (b2739ab, commit 4d19a27). Closed. | ||
added
.tickets/issues/0213-mm-acp-create-a-skillcreate-command-mm-skillcrea.yaml +140 -0 | new file mode 100644 | ||
| @@ -0,0 +1,140 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 213 | |
| 3 | +title: "mm acp-create: a /skillcreate command (mm skillcreate from the editor)" | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-11-14T07:25:21.000Z | |
| 9 | +updatedAt: 2026-11-14T07:25:21.000Z | |
| 10 | +labels: | |
| 11 | + - enhancement | |
| 12 | + - kind::feature | |
| 13 | +milestone: v1.1.0 | |
| 14 | +epic: ACP Create | |
| 15 | +related: | |
| 16 | + - 210 | |
| 17 | + - 206 | |
| 18 | +body: | | |
| 19 | + Add to `mm acp-create` | |
| 20 | + ([#210](.tickets/issues/0210-acp-create-mode-mm-acp-create-mm-init-from-an-acp.yaml)) | |
| 21 | + a `/skillcreate` command that does what `mm skillcreate` | |
| 22 | + ([#206](.tickets/issues/0206-mm-skillcreate-a-wizard-that-writes-a-new-skill.yaml)) | |
| 23 | + does in a terminal: ask the skill's name, description, keywords and text, | |
| 24 | + then write `<skillsDir>/<name>/SKILL.md` where the project's agent reads | |
| 25 | + its skills — from Zed or any ACP client. | |
| 26 | + | |
| 27 | + ## What exists (read 2026-11-14) | |
| 28 | + | |
| 29 | + - `internal/skillcreate` already separates the wizard's state from its | |
| 30 | + display: `skillcreate.Flow` exposes `Steps`, `Pending`, `Step`, `Set`, | |
| 31 | + `Unset`, `Preview`, `Result`, with the **same `agentinit.Step` type** as | |
| 32 | + `mm init` — the line mode and the window both drive it. | |
| 33 | + - Questions: `name`, `overwrite` (only when the skill exists), `description`, | |
| 34 | + `keywords` (optional, `-` = none), `body` (multi-line, always last). | |
| 35 | + - `internal/acpcreate` already asks `agentinit.Step`s in both modes | |
| 36 | + (forms when the client advertises `elicitation.form`, one message per | |
| 37 | + question otherwise) — the same machinery can ask the skill's questions. | |
| 38 | + | |
| 39 | + ## What has to change | |
| 40 | + | |
| 41 | + - **Where the skill goes, for a given directory.** `skillcreate.Locate` | |
| 42 | + calls `config.Load`, which fills the global `config.Cfg`, and reads | |
| 43 | + `.mm` and a relative `skillsDir` from the process's working directory. | |
| 44 | + In ACP the project is the session's `cwd`, and several sessions may run: | |
| 45 | + a variant that takes the project directory and returns the place | |
| 46 | + without touching the global settings (agent file found as mm finds it: | |
| 47 | + `agent.yaml`, then `.mm/agent.yaml`; its `skillsDir`; no agent or | |
| 48 | + `skillsDir: no-skills` → `.mm/skills` when `.mm/` exists, else `skills`, | |
| 49 | + with the note saying which `skillsDir` to set). | |
| 50 | + - **One session, two wizards.** The session drives an | |
| 51 | + `agentinit.Flow` today. It should drive any flow with that shape (a small | |
| 52 | + interface), so that conversation mode, forms, `/back` and `/preview` | |
| 53 | + work for the skill too. | |
| 54 | + - **The text (`body`).** Conversation mode: the reply message is the | |
| 55 | + text, several lines included — a natural fit. Forms: a string field; | |
| 56 | + whether clients offer a multi-line input there is unknown (no JSON | |
| 57 | + Schema hint for it) — check, or ask the text as a message even in form | |
| 58 | + mode. | |
| 59 | + | |
| 60 | + ## Behaviour | |
| 61 | + | |
| 62 | + - `/skillcreate [--name …] [--description …] [--keywords …]`: the flags | |
| 63 | + of `mm skillcreate` as given answers (no `--yes`, `--line`, `--config`: | |
| 64 | + the agent file is the project's). Works at any time, agent file or not. | |
| 65 | + - An existing skill: the `overwrite` question, as in the terminal (it can | |
| 66 | + be asked here, unlike the files of `/dockerinit`). | |
| 67 | + - At the end: `✅ wrote <path>`, the skill read back with mm's own loader | |
| 68 | + (`skillcreate.Verify`), the `skillsDir` note when there is one, and a | |
| 69 | + reminder that a running agent sees the new skill after a reload (the | |
| 70 | + catalogue is read at start-up). | |
| 71 | + - `/preview` shows the `SKILL.md` as it stands, `/back` takes back an | |
| 72 | + answer, `/restart` starts the skill over. | |
| 73 | + | |
| 74 | + ## Open decision | |
| 75 | + | |
| 76 | + `/skillcreate` while the agent wizard is half way through: refuse | |
| 77 | + ("finish or `/restart` first"), or run the skill wizard and come back to | |
| 78 | + the agent's next question afterwards (answers kept). Proposal: come back — | |
| 79 | + the two wizards write different files. | |
| 80 | + | |
| 81 | + ## Acceptance criteria | |
| 82 | + | |
| 83 | + - In a project made with `mm init --project yes --skills yes`, | |
| 84 | + `/skillcreate` writes `.mm/skills/<name>/SKILL.md`, byte for byte what | |
| 85 | + `mm skillcreate` writes with the same answers; mm reads it back. | |
| 86 | + - Conversation mode and form mode both tested with the fake client; the | |
| 87 | + text keeps its line breaks. | |
| 88 | + - The global settings are untouched after a `/skillcreate` (two sessions | |
| 89 | + in two projects do not see each other's `skillsDir`). | |
| 90 | + - Docs EN+FR. | |
| 91 | +tasks: | |
| 92 | + - id: 1 | |
| 93 | + title: Locate the skills directory for a given project directory, without loading the config into the global settings | |
| 94 | + state: open | |
| 95 | + priority: high | |
| 96 | + author: | |
| 97 | + name: k33g | |
| 98 | + email: ph.charriere@gmail.com | |
| 99 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 100 | + - id: 2 | |
| 101 | + title: Let the acp-create session drive either flow (agent or skill) - one interface over agentinit.Flow and skillcreate.Flow | |
| 102 | + state: open | |
| 103 | + priority: high | |
| 104 | + author: | |
| 105 | + name: k33g | |
| 106 | + email: ph.charriere@gmail.com | |
| 107 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 108 | + - id: 3 | |
| 109 | + title: /skillcreate command - flags as given answers, conversation mode and forms, multi-line text | |
| 110 | + state: open | |
| 111 | + priority: medium | |
| 112 | + author: | |
| 113 | + name: k33g | |
| 114 | + email: ph.charriere@gmail.com | |
| 115 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 116 | + - id: 4 | |
| 117 | + title: End message - written path, mm reads it back, the skillsDir note, reload the agent to see the skill | |
| 118 | + state: open | |
| 119 | + priority: medium | |
| 120 | + author: | |
| 121 | + name: k33g | |
| 122 | + email: ph.charriere@gmail.com | |
| 123 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 124 | + - id: 5 | |
| 125 | + title: Tests with the fake client - same SKILL.md as mm skillcreate with the same answers, both modes | |
| 126 | + state: open | |
| 127 | + priority: medium | |
| 128 | + author: | |
| 129 | + name: k33g | |
| 130 | + email: ph.charriere@gmail.com | |
| 131 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 132 | + - id: 6 | |
| 133 | + title: Docs EN+FR - how-to create-an-agent-from-an-editor, cli.md acp-create section | |
| 134 | + state: open | |
| 135 | + priority: medium | |
| 136 | + author: | |
| 137 | + name: k33g | |
| 138 | + email: ph.charriere@gmail.com | |
| 139 | + createdAt: 2026-11-14T07:25:21.000Z | |
| 140 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,140 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 213 | ||
| 3 | +title: "mm acp-create: a /skillcreate command (mm skillcreate from the editor)" | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-11-14T07:25:21.000Z | ||
| 9 | +updatedAt: 2026-11-14T07:25:21.000Z | ||
| 10 | +labels: | ||
| 11 | + - enhancement | ||
| 12 | + - kind::feature | ||
| 13 | +milestone: v1.1.0 | ||
| 14 | +epic: ACP Create | ||
| 15 | +related: | ||
| 16 | + - 210 | ||
| 17 | + - 206 | ||
| 18 | +body: | | ||
| 19 | + Add to `mm acp-create` | ||
| 20 | + ([#210](.tickets/issues/0210-acp-create-mode-mm-acp-create-mm-init-from-an-acp.yaml)) | ||
| 21 | + a `/skillcreate` command that does what `mm skillcreate` | ||
| 22 | + ([#206](.tickets/issues/0206-mm-skillcreate-a-wizard-that-writes-a-new-skill.yaml)) | ||
| 23 | + does in a terminal: ask the skill's name, description, keywords and text, | ||
| 24 | + then write `<skillsDir>/<name>/SKILL.md` where the project's agent reads | ||
| 25 | + its skills — from Zed or any ACP client. | ||
| 26 | + | ||
| 27 | + ## What exists (read 2026-11-14) | ||
| 28 | + | ||
| 29 | + - `internal/skillcreate` already separates the wizard's state from its | ||
| 30 | + display: `skillcreate.Flow` exposes `Steps`, `Pending`, `Step`, `Set`, | ||
| 31 | + `Unset`, `Preview`, `Result`, with the **same `agentinit.Step` type** as | ||
| 32 | + `mm init` — the line mode and the window both drive it. | ||
| 33 | + - Questions: `name`, `overwrite` (only when the skill exists), `description`, | ||
| 34 | + `keywords` (optional, `-` = none), `body` (multi-line, always last). | ||
| 35 | + - `internal/acpcreate` already asks `agentinit.Step`s in both modes | ||
| 36 | + (forms when the client advertises `elicitation.form`, one message per | ||
| 37 | + question otherwise) — the same machinery can ask the skill's questions. | ||
| 38 | + | ||
| 39 | + ## What has to change | ||
| 40 | + | ||
| 41 | + - **Where the skill goes, for a given directory.** `skillcreate.Locate` | ||
| 42 | + calls `config.Load`, which fills the global `config.Cfg`, and reads | ||
| 43 | + `.mm` and a relative `skillsDir` from the process's working directory. | ||
| 44 | + In ACP the project is the session's `cwd`, and several sessions may run: | ||
| 45 | + a variant that takes the project directory and returns the place | ||
| 46 | + without touching the global settings (agent file found as mm finds it: | ||
| 47 | + `agent.yaml`, then `.mm/agent.yaml`; its `skillsDir`; no agent or | ||
| 48 | + `skillsDir: no-skills` → `.mm/skills` when `.mm/` exists, else `skills`, | ||
| 49 | + with the note saying which `skillsDir` to set). | ||
| 50 | + - **One session, two wizards.** The session drives an | ||
| 51 | + `agentinit.Flow` today. It should drive any flow with that shape (a small | ||
| 52 | + interface), so that conversation mode, forms, `/back` and `/preview` | ||
| 53 | + work for the skill too. | ||
| 54 | + - **The text (`body`).** Conversation mode: the reply message is the | ||
| 55 | + text, several lines included — a natural fit. Forms: a string field; | ||
| 56 | + whether clients offer a multi-line input there is unknown (no JSON | ||
| 57 | + Schema hint for it) — check, or ask the text as a message even in form | ||
| 58 | + mode. | ||
| 59 | + | ||
| 60 | + ## Behaviour | ||
| 61 | + | ||
| 62 | + - `/skillcreate [--name …] [--description …] [--keywords …]`: the flags | ||
| 63 | + of `mm skillcreate` as given answers (no `--yes`, `--line`, `--config`: | ||
| 64 | + the agent file is the project's). Works at any time, agent file or not. | ||
| 65 | + - An existing skill: the `overwrite` question, as in the terminal (it can | ||
| 66 | + be asked here, unlike the files of `/dockerinit`). | ||
| 67 | + - At the end: `✅ wrote <path>`, the skill read back with mm's own loader | ||
| 68 | + (`skillcreate.Verify`), the `skillsDir` note when there is one, and a | ||
| 69 | + reminder that a running agent sees the new skill after a reload (the | ||
| 70 | + catalogue is read at start-up). | ||
| 71 | + - `/preview` shows the `SKILL.md` as it stands, `/back` takes back an | ||
| 72 | + answer, `/restart` starts the skill over. | ||
| 73 | + | ||
| 74 | + ## Open decision | ||
| 75 | + | ||
| 76 | + `/skillcreate` while the agent wizard is half way through: refuse | ||
| 77 | + ("finish or `/restart` first"), or run the skill wizard and come back to | ||
| 78 | + the agent's next question afterwards (answers kept). Proposal: come back — | ||
| 79 | + the two wizards write different files. | ||
| 80 | + | ||
| 81 | + ## Acceptance criteria | ||
| 82 | + | ||
| 83 | + - In a project made with `mm init --project yes --skills yes`, | ||
| 84 | + `/skillcreate` writes `.mm/skills/<name>/SKILL.md`, byte for byte what | ||
| 85 | + `mm skillcreate` writes with the same answers; mm reads it back. | ||
| 86 | + - Conversation mode and form mode both tested with the fake client; the | ||
| 87 | + text keeps its line breaks. | ||
| 88 | + - The global settings are untouched after a `/skillcreate` (two sessions | ||
| 89 | + in two projects do not see each other's `skillsDir`). | ||
| 90 | + - Docs EN+FR. | ||
| 91 | +tasks: | ||
| 92 | + - id: 1 | ||
| 93 | + title: Locate the skills directory for a given project directory, without loading the config into the global settings | ||
| 94 | + state: open | ||
| 95 | + priority: high | ||
| 96 | + author: | ||
| 97 | + name: k33g | ||
| 98 | + email: ph.charriere@gmail.com | ||
| 99 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 100 | + - id: 2 | ||
| 101 | + title: Let the acp-create session drive either flow (agent or skill) - one interface over agentinit.Flow and skillcreate.Flow | ||
| 102 | + state: open | ||
| 103 | + priority: high | ||
| 104 | + author: | ||
| 105 | + name: k33g | ||
| 106 | + email: ph.charriere@gmail.com | ||
| 107 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 108 | + - id: 3 | ||
| 109 | + title: /skillcreate command - flags as given answers, conversation mode and forms, multi-line text | ||
| 110 | + state: open | ||
| 111 | + priority: medium | ||
| 112 | + author: | ||
| 113 | + name: k33g | ||
| 114 | + email: ph.charriere@gmail.com | ||
| 115 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 116 | + - id: 4 | ||
| 117 | + title: End message - written path, mm reads it back, the skillsDir note, reload the agent to see the skill | ||
| 118 | + state: open | ||
| 119 | + priority: medium | ||
| 120 | + author: | ||
| 121 | + name: k33g | ||
| 122 | + email: ph.charriere@gmail.com | ||
| 123 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 124 | + - id: 5 | ||
| 125 | + title: Tests with the fake client - same SKILL.md as mm skillcreate with the same answers, both modes | ||
| 126 | + state: open | ||
| 127 | + priority: medium | ||
| 128 | + author: | ||
| 129 | + name: k33g | ||
| 130 | + email: ph.charriere@gmail.com | ||
| 131 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 132 | + - id: 6 | ||
| 133 | + title: Docs EN+FR - how-to create-an-agent-from-an-editor, cli.md acp-create section | ||
| 134 | + state: open | ||
| 135 | + priority: medium | ||
| 136 | + author: | ||
| 137 | + name: k33g | ||
| 138 | + email: ph.charriere@gmail.com | ||
| 139 | + createdAt: 2026-11-14T07:25:21.000Z | ||
| 140 | +comments: [] | ||
modified
.tickets/milestones.yaml +1 -1 | @@ -63,7 +63,7 @@ milestones: | ||
| 63 | 63 | - title: v1.0.8 |
| 64 | 64 | state: closed |
| 65 | 65 | - title: v1.0.9 |
| 66 | - state: open | |
| 66 | + state: closed | |
| 67 | 67 | dueOn: 2026-11-18 |
| 68 | 68 | - title: v1.1.0 |
| 69 | 69 | state: open |
| @@ -63,7 +63,7 @@ milestones: | |||
| 63 | - title: v1.0.8 | 63 | - title: v1.0.8 |
| 64 | state: closed | 64 | state: closed |
| 65 | - title: v1.0.9 | 65 | - title: v1.0.9 |
| 66 | - state: open | 66 | + state: closed |
| 67 | dueOn: 2026-11-18 | 67 | dueOn: 2026-11-18 |
| 68 | - title: v1.1.0 | 68 | - title: v1.1.0 |
| 69 | state: open | 69 | state: open |
modified
INSTALL.LINUX.md +1 -1 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | ```bash |
| 4 | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.8 | |
| 5 | +VERSION=1.0.9 | |
| 6 | 6 | case "$(uname -m)" in |
| 7 | 7 | x86_64) ARCH=amd64 ;; |
| 8 | 8 | aarch64|arm64) ARCH=arm64 ;; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ```bash | 3 | ```bash |
| 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.8 | 5 | +VERSION=1.0.9 |
| 6 | case "$(uname -m)" in | 6 | case "$(uname -m)" in |
| 7 | x86_64) ARCH=amd64 ;; | 7 | x86_64) ARCH=amd64 ;; |
| 8 | aarch64|arm64) ARCH=arm64 ;; | 8 | aarch64|arm64) ARCH=arm64 ;; |
modified
INSTALL.MACOS.md +4 -4 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | Short version: |
| 4 | 4 | ```bash |
| 5 | -VERSION=1.0.8 | |
| 5 | +VERSION=1.0.9 | |
| 6 | 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 7 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | 8 | sudo rm -f /usr/local/bin/mm |
| @@ -14,7 +14,7 @@ From v1.0.5, the macOS binary is signed with a Developer ID and notarized by App | ||
| 14 | 14 | |
| 15 | 15 | ```bash |
| 16 | 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 17 | -VERSION=1.0.8 | |
| 17 | +VERSION=1.0.9 | |
| 18 | 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 19 | 19 | |
| 20 | 20 | # optional: check the download against the release's checksums |
| @@ -34,8 +34,8 @@ mm --version | ||
| 34 | 34 | The signature check should print: |
| 35 | 35 | |
| 36 | 36 | ``` |
| 37 | -./mm-1.0.8-darwin-arm64: valid on disk | |
| 38 | -./mm-1.0.8-darwin-arm64: satisfies its Designated Requirement | |
| 37 | +./mm-1.0.9-darwin-arm64: valid on disk | |
| 38 | +./mm-1.0.9-darwin-arm64: satisfies its Designated Requirement | |
| 39 | 39 | Identifier=com.bots-garden.mm |
| 40 | 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) |
| 41 | 41 | TeamIdentifier=SNLLBZP9V9 |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | Short version: | 3 | Short version: |
| 4 | ```bash | 4 | ```bash |
| 5 | -VERSION=1.0.8 | 5 | +VERSION=1.0.9 |
| 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" | 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 7 | chmod +x ./mm-${VERSION}-darwin-arm64 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | sudo rm -f /usr/local/bin/mm | 8 | sudo rm -f /usr/local/bin/mm |
| @@ -14,7 +14,7 @@ From v1.0.5, the macOS binary is signed with a Developer ID and notarized by App | |||
| 14 | 14 | ||
| 15 | ```bash | 15 | ```bash |
| 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 17 | -VERSION=1.0.8 | 17 | +VERSION=1.0.9 |
| 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" | 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 19 | 19 | ||
| 20 | # optional: check the download against the release's checksums | 20 | # optional: check the download against the release's checksums |
| @@ -34,8 +34,8 @@ mm --version | |||
| 34 | The signature check should print: | 34 | The signature check should print: |
| 35 | 35 | ||
| 36 | ``` | 36 | ``` |
| 37 | -./mm-1.0.8-darwin-arm64: valid on disk | 37 | +./mm-1.0.9-darwin-arm64: valid on disk |
| 38 | -./mm-1.0.8-darwin-arm64: satisfies its Designated Requirement | 38 | +./mm-1.0.9-darwin-arm64: satisfies its Designated Requirement |
| 39 | Identifier=com.bots-garden.mm | 39 | Identifier=com.bots-garden.mm |
| 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) | 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) |
| 41 | TeamIdentifier=SNLLBZP9V9 | 41 | TeamIdentifier=SNLLBZP9V9 |
modified
INSTALL.WINDOWS.md +1 -1 | @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | ||
| 4 | 4 | |
| 5 | 5 | ```powershell |
| 6 | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "1.0.8" | |
| 7 | +$Version = "1.0.9" | |
| 8 | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
| @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | |||
| 4 | 4 | ||
| 5 | ```powershell | 5 | ```powershell |
| 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "1.0.8" | 7 | +$Version = "1.0.9" |
| 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | $Asset = "mm-$Version-windows-$Arch.exe" | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
modified
release-notes/README.md +4 -3 | @@ -4,9 +4,10 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | ||
| 4 | 4 | |
| 5 | 5 | | Version | Date | Summary | | |
| 6 | 6 | |---|---|---|---| |
| 7 | -| [v1.0.8](v1.0.8.en.md) | not tagged yet | `mm sbxinit` writes a simpler `sbxenv.yaml` for a `.mm` project: no `PROJECT_DIR` argument and no `--env-arg` on the `sbx env` commands. | [FR](v1.0.8.fr.md) | | |
| 8 | -| [v1.0.7](v1.0.7.en.md) | not tagged yet | A project can keep its agent in a `.mm` folder, which `mm init`, `mm sbxinit` and the new `mm skillcreate` all know, and models such as SmolLM3, whose chat template reads its tools from `xml_tools`, can call mm's tools. | [FR](v1.0.7.fr.md) | | |
| 9 | -| [v1.0.6](v1.0.6.en.md) | not tagged yet | An ACP client can lend the agent its own functions as tools, and mini-me runs on Kronk, the Go inference server of Ardan Labs. | [FR](v1.0.6.fr.md) | | |
| 7 | +| [v1.0.9](v1.0.9.en.md) | not tagged yet | Create an agent from your editor with `mm acp-create` — and its container, its sandbox and its editor settings — while `mm dockerinit` learns the `.mm` folder and an editor's reload no longer fails. | [FR](v1.0.9.fr.md) | | |
| 8 | +| [v1.0.8](v1.0.8.en.md) | 2026-11-13 | `mm sbxinit` writes a simpler `sbxenv.yaml` for a `.mm` project: no `PROJECT_DIR` argument and no `--env-arg` on the `sbx env` commands. | [FR](v1.0.8.fr.md) | | |
| 9 | +| [v1.0.7](v1.0.7.en.md) | 2026-11-13 | A project can keep its agent in a `.mm` folder, which `mm init`, `mm sbxinit` and the new `mm skillcreate` all know, and models such as SmolLM3, whose chat template reads its tools from `xml_tools`, can call mm's tools. | [FR](v1.0.7.fr.md) | | |
| 10 | +| [v1.0.6](v1.0.6.en.md) | 2026-11-11 | An ACP client can lend the agent its own functions as tools, and mini-me runs on Kronk, the Go inference server of Ardan Labs. | [FR](v1.0.6.fr.md) | | |
| 10 | 11 | | [v1.0.5](v1.0.5.en.md) | 2026-11-07 | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | |
| 11 | 12 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | |
| 12 | 13 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | |
| @@ -4,9 +4,10 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | |||
| 4 | 4 | ||
| 5 | | Version | Date | Summary | | | 5 | | Version | Date | Summary | | |
| 6 | |---|---|---|---| | 6 | |---|---|---|---| |
| 7 | -| [v1.0.8](v1.0.8.en.md) | not tagged yet | `mm sbxinit` writes a simpler `sbxenv.yaml` for a `.mm` project: no `PROJECT_DIR` argument and no `--env-arg` on the `sbx env` commands. | [FR](v1.0.8.fr.md) | | 7 | +| [v1.0.9](v1.0.9.en.md) | not tagged yet | Create an agent from your editor with `mm acp-create` — and its container, its sandbox and its editor settings — while `mm dockerinit` learns the `.mm` folder and an editor's reload no longer fails. | [FR](v1.0.9.fr.md) | |
| 8 | -| [v1.0.7](v1.0.7.en.md) | not tagged yet | A project can keep its agent in a `.mm` folder, which `mm init`, `mm sbxinit` and the new `mm skillcreate` all know, and models such as SmolLM3, whose chat template reads its tools from `xml_tools`, can call mm's tools. | [FR](v1.0.7.fr.md) | | 8 | +| [v1.0.8](v1.0.8.en.md) | 2026-11-13 | `mm sbxinit` writes a simpler `sbxenv.yaml` for a `.mm` project: no `PROJECT_DIR` argument and no `--env-arg` on the `sbx env` commands. | [FR](v1.0.8.fr.md) | |
| 9 | -| [v1.0.6](v1.0.6.en.md) | not tagged yet | An ACP client can lend the agent its own functions as tools, and mini-me runs on Kronk, the Go inference server of Ardan Labs. | [FR](v1.0.6.fr.md) | | 9 | +| [v1.0.7](v1.0.7.en.md) | 2026-11-13 | A project can keep its agent in a `.mm` folder, which `mm init`, `mm sbxinit` and the new `mm skillcreate` all know, and models such as SmolLM3, whose chat template reads its tools from `xml_tools`, can call mm's tools. | [FR](v1.0.7.fr.md) | |
| 10 | +| [v1.0.6](v1.0.6.en.md) | 2026-11-11 | An ACP client can lend the agent its own functions as tools, and mini-me runs on Kronk, the Go inference server of Ardan Labs. | [FR](v1.0.6.fr.md) | | ||
| 10 | | [v1.0.5](v1.0.5.en.md) | 2026-11-07 | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | | 11 | | [v1.0.5](v1.0.5.en.md) | 2026-11-07 | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | |
| 11 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | | 12 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | |
| 12 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | | 13 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | |
added
release-notes/v1.0.9.en.md +68 -0 | new file mode 100644 | ||
| @@ -0,0 +1,68 @@ | ||
| 1 | +# mini-me v1.0.9 | |
| 2 | + | |
| 3 | +*[Version française](v1.0.9.fr.md)* | |
| 4 | + | |
| 5 | +Create an agent from your editor with `mm acp-create` — and its container, its sandbox and its editor settings — while `mm dockerinit` learns the `.mm` folder and an editor's reload no longer fails. | |
| 6 | + | |
| 7 | +## New | |
| 8 | + | |
| 9 | +### `mm acp-create`: `mm init` from your editor (#210) | |
| 10 | + | |
| 11 | +`mm acp-create` (also `mm --acp-create`) asks the questions of `mm init` over the Agent Client Protocol, from Zed or any other ACP client, and writes the same file. It needs no agent file and calls no model: it only lists the model server's models, as `mm init` does. Register it once in your client: | |
| 12 | + | |
| 13 | +```json | |
| 14 | +"agent_servers": { | |
| 15 | + "mm-create": { "type": "custom", "command": "mm", "args": ["acp-create"] } | |
| 16 | +} | |
| 17 | +``` | |
| 18 | + | |
| 19 | +Open a project, start a thread with `mm-create` and send `/start`. The file is written in the project's directory, not where the client started `mm`. | |
| 20 | + | |
| 21 | +- **The questions follow what your client can show.** A client that advertises forms (`elicitation.form`) gets a few forms, with the defaults filled in; a question whose choices depend on an earlier answer, such as the model list of the server you chose, comes in the next form. Any other client gets one question per message, with numbered choices: reply with a number or a value, `.` for the default. The choice is made from the client's capabilities, never from its name. | |
| 22 | +- **Commands:** `/start`, `/preview` (the file as it stands), `/back`, `/write` (take every default left and write), `/restart`, `/help`. | |
| 23 | +- **The rest of the set-up from the same thread:** `/dockerinit` and `/sbxinit` run `mm dockerinit` and `mm sbxinit` for the project (their flags work; existing files are kept unless you add `--overwrite`, since nothing can be asked here), and `/zedconfig` shows the Zed `agent_servers` entries for every way the project can start its agent — on your machine (`mm acp <agent file>`), in its container (`docker exec …`), in its sandbox (`sbx exec …`) — with what to start first for each. | |
| 24 | +- The flags of `mm init` fix answers in advance: `"args": ["acp-create", "--provider", "llmman", "--project", "yes"]`. | |
| 25 | +- Reloading the agent restarts the wizard: the answers are not kept, a file already written is untouched. | |
| 26 | + | |
| 27 | +Tried in Zed. The form path is covered by tests with a simulated client only: no second ACP client was tried, and none that shows forms. | |
| 28 | + | |
| 29 | +See [How to create an agent from your editor](../docs/en/how-to/create-an-agent-from-an-editor.md). | |
| 30 | + | |
| 31 | +### `mm dockerinit` knows the `.mm` folder (#212) | |
| 32 | + | |
| 33 | +Like `mm sbxinit` since v1.0.7, `mm dockerinit` now looks for `agent.yaml`, then `.mm/agent.yaml`, and names the service after the agent it finds. For a `.mm` project, `compose.yaml`: | |
| 34 | + | |
| 35 | +- mounts `.mm/` **read-only** over the project, so the agent cannot change its own settings, skills or hooks; | |
| 36 | +- mounts the agent file's `sessions.dir` and `trace.dir` (when on and under `.mm/`) writable again, and `mm dockerinit` creates them if they are missing — Docker would create them as root, and the agent never runs as root; | |
| 37 | +- starts `mm tui` with no file argument: mm finds `.mm/agent.yaml` from the project. | |
| 38 | + | |
| 39 | +```yaml | |
| 40 | + volumes: | |
| 41 | + - .:${PWD:-/workspace} | |
| 42 | + - ./.mm:${PWD:-/workspace}/.mm:ro | |
| 43 | + - ./.mm/sessions:${PWD:-/workspace}/.mm/sessions # sessions.dir | |
| 44 | +``` | |
| 45 | + | |
| 46 | +A plain project gets the same files as before. Checked on Linux with Docker 29.9.3 and Compose v5.7.1: writing in `.mm/` is refused, writing in `.mm/sessions` and in the project works. Not checked on Docker Desktop (macOS). | |
| 47 | + | |
| 48 | +See [How to run mini-me in a container](../docs/en/how-to/run-in-a-container.md). | |
| 49 | + | |
| 50 | +### An editor's reload never fails (#210) | |
| 51 | + | |
| 52 | +Zed's *Reload Agent* answered "Loading or resuming sessions is not supported by this agent" for every agent without `sessions.enabled` — the default of `mm init`. `mm acp` now always accepts the reload (`session/load`, `session/resume`). With saved sessions nothing changes: the conversation comes back. Without them the thread starts over, and a message in it says so and how to keep the next one (`sessions: {enabled: true}`). | |
| 53 | + | |
| 54 | +### `mm sbxinit` says how to run the sandbox | |
| 55 | + | |
| 56 | +After writing `sbxenv.yaml`, `mm sbxinit` now prints `Run the sandbox <name>: sbx env run --force` between the create and remove commands; the file's comments list it too. | |
| 57 | + | |
| 58 | +## Documentation | |
| 59 | + | |
| 60 | +- New guide: [Create an agent from your editor](../docs/en/how-to/create-an-agent-from-an-editor.md). | |
| 61 | +- The container guide has a section for a `.mm` project; the CLI reference describes `mm acp-create` and the new `--agent` lookup of `mm dockerinit`. | |
| 62 | +- The ACP reference, the configuration reference (`sessions.enabled`) and the explanation of persistent sessions describe the reload without saved sessions. | |
| 63 | + | |
| 64 | +## Upgrading | |
| 65 | + | |
| 66 | +- **Agent files do not change.** Replace the binary: see the install guides for [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md). | |
| 67 | +- **`mm acp` now always advertises `loadSession` and `session/resume`.** A client that relied on their absence to know sessions were not saved will see a reload that starts the conversation over instead of an error. `session/list` still exists only with `sessions.enabled`. | |
| 68 | +- **A `compose.yaml` written by an earlier `mm dockerinit` for a `.mm` project** mounts the whole project writable and starts `mm tui agent.yaml`. Run `mm dockerinit` again and answer `yes` to replace it. | |
| new file mode 100644 | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | +# mini-me v1.0.9 | ||
| 2 | + | ||
| 3 | +*[Version française](v1.0.9.fr.md)* | ||
| 4 | + | ||
| 5 | +Create an agent from your editor with `mm acp-create` — and its container, its sandbox and its editor settings — while `mm dockerinit` learns the `.mm` folder and an editor's reload no longer fails. | ||
| 6 | + | ||
| 7 | +## New | ||
| 8 | + | ||
| 9 | +### `mm acp-create`: `mm init` from your editor (#210) | ||
| 10 | + | ||
| 11 | +`mm acp-create` (also `mm --acp-create`) asks the questions of `mm init` over the Agent Client Protocol, from Zed or any other ACP client, and writes the same file. It needs no agent file and calls no model: it only lists the model server's models, as `mm init` does. Register it once in your client: | ||
| 12 | + | ||
| 13 | +```json | ||
| 14 | +"agent_servers": { | ||
| 15 | + "mm-create": { "type": "custom", "command": "mm", "args": ["acp-create"] } | ||
| 16 | +} | ||
| 17 | +``` | ||
| 18 | + | ||
| 19 | +Open a project, start a thread with `mm-create` and send `/start`. The file is written in the project's directory, not where the client started `mm`. | ||
| 20 | + | ||
| 21 | +- **The questions follow what your client can show.** A client that advertises forms (`elicitation.form`) gets a few forms, with the defaults filled in; a question whose choices depend on an earlier answer, such as the model list of the server you chose, comes in the next form. Any other client gets one question per message, with numbered choices: reply with a number or a value, `.` for the default. The choice is made from the client's capabilities, never from its name. | ||
| 22 | +- **Commands:** `/start`, `/preview` (the file as it stands), `/back`, `/write` (take every default left and write), `/restart`, `/help`. | ||
| 23 | +- **The rest of the set-up from the same thread:** `/dockerinit` and `/sbxinit` run `mm dockerinit` and `mm sbxinit` for the project (their flags work; existing files are kept unless you add `--overwrite`, since nothing can be asked here), and `/zedconfig` shows the Zed `agent_servers` entries for every way the project can start its agent — on your machine (`mm acp <agent file>`), in its container (`docker exec …`), in its sandbox (`sbx exec …`) — with what to start first for each. | ||
| 24 | +- The flags of `mm init` fix answers in advance: `"args": ["acp-create", "--provider", "llmman", "--project", "yes"]`. | ||
| 25 | +- Reloading the agent restarts the wizard: the answers are not kept, a file already written is untouched. | ||
| 26 | + | ||
| 27 | +Tried in Zed. The form path is covered by tests with a simulated client only: no second ACP client was tried, and none that shows forms. | ||
| 28 | + | ||
| 29 | +See [How to create an agent from your editor](../docs/en/how-to/create-an-agent-from-an-editor.md). | ||
| 30 | + | ||
| 31 | +### `mm dockerinit` knows the `.mm` folder (#212) | ||
| 32 | + | ||
| 33 | +Like `mm sbxinit` since v1.0.7, `mm dockerinit` now looks for `agent.yaml`, then `.mm/agent.yaml`, and names the service after the agent it finds. For a `.mm` project, `compose.yaml`: | ||
| 34 | + | ||
| 35 | +- mounts `.mm/` **read-only** over the project, so the agent cannot change its own settings, skills or hooks; | ||
| 36 | +- mounts the agent file's `sessions.dir` and `trace.dir` (when on and under `.mm/`) writable again, and `mm dockerinit` creates them if they are missing — Docker would create them as root, and the agent never runs as root; | ||
| 37 | +- starts `mm tui` with no file argument: mm finds `.mm/agent.yaml` from the project. | ||
| 38 | + | ||
| 39 | +```yaml | ||
| 40 | + volumes: | ||
| 41 | + - .:${PWD:-/workspace} | ||
| 42 | + - ./.mm:${PWD:-/workspace}/.mm:ro | ||
| 43 | + - ./.mm/sessions:${PWD:-/workspace}/.mm/sessions # sessions.dir | ||
| 44 | +``` | ||
| 45 | + | ||
| 46 | +A plain project gets the same files as before. Checked on Linux with Docker 29.9.3 and Compose v5.7.1: writing in `.mm/` is refused, writing in `.mm/sessions` and in the project works. Not checked on Docker Desktop (macOS). | ||
| 47 | + | ||
| 48 | +See [How to run mini-me in a container](../docs/en/how-to/run-in-a-container.md). | ||
| 49 | + | ||
| 50 | +### An editor's reload never fails (#210) | ||
| 51 | + | ||
| 52 | +Zed's *Reload Agent* answered "Loading or resuming sessions is not supported by this agent" for every agent without `sessions.enabled` — the default of `mm init`. `mm acp` now always accepts the reload (`session/load`, `session/resume`). With saved sessions nothing changes: the conversation comes back. Without them the thread starts over, and a message in it says so and how to keep the next one (`sessions: {enabled: true}`). | ||
| 53 | + | ||
| 54 | +### `mm sbxinit` says how to run the sandbox | ||
| 55 | + | ||
| 56 | +After writing `sbxenv.yaml`, `mm sbxinit` now prints `Run the sandbox <name>: sbx env run --force` between the create and remove commands; the file's comments list it too. | ||
| 57 | + | ||
| 58 | +## Documentation | ||
| 59 | + | ||
| 60 | +- New guide: [Create an agent from your editor](../docs/en/how-to/create-an-agent-from-an-editor.md). | ||
| 61 | +- The container guide has a section for a `.mm` project; the CLI reference describes `mm acp-create` and the new `--agent` lookup of `mm dockerinit`. | ||
| 62 | +- The ACP reference, the configuration reference (`sessions.enabled`) and the explanation of persistent sessions describe the reload without saved sessions. | ||
| 63 | + | ||
| 64 | +## Upgrading | ||
| 65 | + | ||
| 66 | +- **Agent files do not change.** Replace the binary: see the install guides for [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md). | ||
| 67 | +- **`mm acp` now always advertises `loadSession` and `session/resume`.** A client that relied on their absence to know sessions were not saved will see a reload that starts the conversation over instead of an error. `session/list` still exists only with `sessions.enabled`. | ||
| 68 | +- **A `compose.yaml` written by an earlier `mm dockerinit` for a `.mm` project** mounts the whole project writable and starts `mm tui agent.yaml`. Run `mm dockerinit` again and answer `yes` to replace it. | ||
added
release-notes/v1.0.9.fr.md +68 -0 | new file mode 100644 | ||
| @@ -0,0 +1,68 @@ | ||
| 1 | +# mini-me v1.0.9 | |
| 2 | + | |
| 3 | +*[English version](v1.0.9.en.md)* | |
| 4 | + | |
| 5 | +Créez un agent depuis votre éditeur avec `mm acp-create` — et son conteneur, sa sandbox et les réglages de l'éditeur — pendant que `mm dockerinit` apprend le dossier `.mm` et que le rechargement d'un éditeur n'échoue plus. | |
| 6 | + | |
| 7 | +## Nouveautés | |
| 8 | + | |
| 9 | +### `mm acp-create` : `mm init` depuis votre éditeur (#210) | |
| 10 | + | |
| 11 | +`mm acp-create` (aussi `mm --acp-create`) pose les questions de `mm init` par l'Agent Client Protocol, depuis Zed ou tout autre client ACP, et écrit le même fichier. Il ne demande aucun fichier d'agent et n'appelle aucun modèle : il liste seulement les modèles du serveur, comme `mm init`. Déclarez-le une fois dans votre client : | |
| 12 | + | |
| 13 | +```json | |
| 14 | +"agent_servers": { | |
| 15 | + "mm-create": { "type": "custom", "command": "mm", "args": ["acp-create"] } | |
| 16 | +} | |
| 17 | +``` | |
| 18 | + | |
| 19 | +Ouvrez un projet, démarrez une conversation avec `mm-create` et envoyez `/start`. Le fichier est écrit dans le dossier du projet, pas là où le client a lancé `mm`. | |
| 20 | + | |
| 21 | +- **Les questions suivent ce que votre client sait afficher.** Un client qui annonce les formulaires (`elicitation.form`) reçoit quelques formulaires, valeurs par défaut remplies ; une question dont les choix dépendent d'une réponse précédente, comme la liste des modèles du serveur choisi, arrive dans le formulaire suivant. Tout autre client reçoit une question par message, avec des choix numérotés : répondez par un numéro ou une valeur, `.` pour la valeur par défaut. Le choix se fait d'après les capacités du client, jamais d'après son nom. | |
| 22 | +- **Commandes :** `/start`, `/preview` (le fichier tel qu'il serait écrit), `/back`, `/write` (prend toutes les valeurs par défaut restantes et écrit), `/restart`, `/help`. | |
| 23 | +- **La suite de l'installation dans la même conversation :** `/dockerinit` et `/sbxinit` lancent `mm dockerinit` et `mm sbxinit` pour le projet (leurs options marchent ; les fichiers existants sont gardés sauf avec `--overwrite`, puisque rien ne peut être demandé ici), et `/zedconfig` affiche les entrées `agent_servers` de Zed pour chaque façon dont le projet peut lancer son agent — sur votre machine (`mm acp <fichier d'agent>`), dans son conteneur (`docker exec …`), dans sa sandbox (`sbx exec …`) — avec ce qu'il faut lancer avant pour chacune. | |
| 24 | +- Les options de `mm init` fixent des réponses à l'avance : `"args": ["acp-create", "--provider", "llmman", "--project", "yes"]`. | |
| 25 | +- Recharger l'agent relance l'assistant : les réponses ne sont pas gardées, un fichier déjà écrit n'est pas touché. | |
| 26 | + | |
| 27 | +Essayé dans Zed. Le mode formulaires n'est couvert que par des tests avec un client simulé : aucun second client ACP n'a été essayé, ni aucun qui affiche les formulaires. | |
| 28 | + | |
| 29 | +Voir [Créer un agent depuis votre éditeur](../docs/fr/how-to/create-an-agent-from-an-editor.md). | |
| 30 | + | |
| 31 | +### `mm dockerinit` connaît le dossier `.mm` (#212) | |
| 32 | + | |
| 33 | +Comme `mm sbxinit` depuis la v1.0.7, `mm dockerinit` cherche maintenant `agent.yaml`, puis `.mm/agent.yaml`, et nomme le service d'après l'agent trouvé. Pour un projet `.mm`, `compose.yaml` : | |
| 34 | + | |
| 35 | +- monte `.mm/` **en lecture seule** sur le projet : l'agent ne peut pas modifier ses propres réglages, skills ou hooks ; | |
| 36 | +- remonte en écriture le `sessions.dir` et le `trace.dir` du fichier d'agent (quand ils sont activés et sous `.mm/`), et `mm dockerinit` les crée s'ils manquent — Docker les créerait au nom de root, et l'agent ne tourne jamais en root ; | |
| 37 | +- lance `mm tui` sans fichier : mm trouve `.mm/agent.yaml` depuis le projet. | |
| 38 | + | |
| 39 | +```yaml | |
| 40 | + volumes: | |
| 41 | + - .:${PWD:-/workspace} | |
| 42 | + - ./.mm:${PWD:-/workspace}/.mm:ro | |
| 43 | + - ./.mm/sessions:${PWD:-/workspace}/.mm/sessions # sessions.dir | |
| 44 | +``` | |
| 45 | + | |
| 46 | +Un projet classique obtient les mêmes fichiers qu'avant. Vérifié sous Linux avec Docker 29.9.3 et Compose v5.7.1 : écrire dans `.mm/` est refusé, écrire dans `.mm/sessions` et dans le projet fonctionne. Pas vérifié sur Docker Desktop (macOS). | |
| 47 | + | |
| 48 | +Voir [Faire tourner mini-me dans un conteneur](../docs/fr/how-to/run-in-a-container.md). | |
| 49 | + | |
| 50 | +### Le rechargement d'un éditeur n'échoue plus (#210) | |
| 51 | + | |
| 52 | +Le *Reload Agent* de Zed répondait « Loading or resuming sessions is not supported by this agent » pour tout agent sans `sessions.enabled` — la valeur par défaut de `mm init`. `mm acp` accepte maintenant toujours le rechargement (`session/load`, `session/resume`). Avec des sessions enregistrées, rien ne change : la conversation revient. Sans elles, la conversation recommence, et un message dans le fil le dit, ainsi que la façon de garder la suivante (`sessions: {enabled: true}`). | |
| 53 | + | |
| 54 | +### `mm sbxinit` dit comment lancer la sandbox | |
| 55 | + | |
| 56 | +Après avoir écrit `sbxenv.yaml`, `mm sbxinit` affiche maintenant `Run the sandbox <nom>: sbx env run --force` entre les commandes de création et de suppression ; les commentaires du fichier la listent aussi. | |
| 57 | + | |
| 58 | +## Documentation | |
| 59 | + | |
| 60 | +- Nouveau guide : [Créer un agent depuis votre éditeur](../docs/fr/how-to/create-an-agent-from-an-editor.md). | |
| 61 | +- Le guide du conteneur a une section pour un projet `.mm` ; la référence de la ligne de commande décrit `mm acp-create` et la nouvelle recherche `--agent` de `mm dockerinit`. | |
| 62 | +- La référence ACP, la référence de configuration (`sessions.enabled`) et l'explication des sessions persistantes décrivent le rechargement sans sessions enregistrées. | |
| 63 | + | |
| 64 | +## Mise à jour | |
| 65 | + | |
| 66 | +- **Les fichiers d'agent ne changent pas.** Remplacez le binaire : voir les guides d'installation pour [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md). | |
| 67 | +- **`mm acp` annonce maintenant toujours `loadSession` et `session/resume`.** Un client qui comptait sur leur absence pour savoir que les sessions n'étaient pas enregistrées verra un rechargement qui recommence la conversation au lieu d'une erreur. `session/list` n'existe toujours qu'avec `sessions.enabled`. | |
| 68 | +- **Un `compose.yaml` écrit par un `mm dockerinit` antérieur pour un projet `.mm`** monte tout le projet en écriture et lance `mm tui agent.yaml`. Relancez `mm dockerinit` et répondez `yes` pour le remplacer. | |
| new file mode 100644 | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | +# mini-me v1.0.9 | ||
| 2 | + | ||
| 3 | +*[English version](v1.0.9.en.md)* | ||
| 4 | + | ||
| 5 | +Créez un agent depuis votre éditeur avec `mm acp-create` — et son conteneur, sa sandbox et les réglages de l'éditeur — pendant que `mm dockerinit` apprend le dossier `.mm` et que le rechargement d'un éditeur n'échoue plus. | ||
| 6 | + | ||
| 7 | +## Nouveautés | ||
| 8 | + | ||
| 9 | +### `mm acp-create` : `mm init` depuis votre éditeur (#210) | ||
| 10 | + | ||
| 11 | +`mm acp-create` (aussi `mm --acp-create`) pose les questions de `mm init` par l'Agent Client Protocol, depuis Zed ou tout autre client ACP, et écrit le même fichier. Il ne demande aucun fichier d'agent et n'appelle aucun modèle : il liste seulement les modèles du serveur, comme `mm init`. Déclarez-le une fois dans votre client : | ||
| 12 | + | ||
| 13 | +```json | ||
| 14 | +"agent_servers": { | ||
| 15 | + "mm-create": { "type": "custom", "command": "mm", "args": ["acp-create"] } | ||
| 16 | +} | ||
| 17 | +``` | ||
| 18 | + | ||
| 19 | +Ouvrez un projet, démarrez une conversation avec `mm-create` et envoyez `/start`. Le fichier est écrit dans le dossier du projet, pas là où le client a lancé `mm`. | ||
| 20 | + | ||
| 21 | +- **Les questions suivent ce que votre client sait afficher.** Un client qui annonce les formulaires (`elicitation.form`) reçoit quelques formulaires, valeurs par défaut remplies ; une question dont les choix dépendent d'une réponse précédente, comme la liste des modèles du serveur choisi, arrive dans le formulaire suivant. Tout autre client reçoit une question par message, avec des choix numérotés : répondez par un numéro ou une valeur, `.` pour la valeur par défaut. Le choix se fait d'après les capacités du client, jamais d'après son nom. | ||
| 22 | +- **Commandes :** `/start`, `/preview` (le fichier tel qu'il serait écrit), `/back`, `/write` (prend toutes les valeurs par défaut restantes et écrit), `/restart`, `/help`. | ||
| 23 | +- **La suite de l'installation dans la même conversation :** `/dockerinit` et `/sbxinit` lancent `mm dockerinit` et `mm sbxinit` pour le projet (leurs options marchent ; les fichiers existants sont gardés sauf avec `--overwrite`, puisque rien ne peut être demandé ici), et `/zedconfig` affiche les entrées `agent_servers` de Zed pour chaque façon dont le projet peut lancer son agent — sur votre machine (`mm acp <fichier d'agent>`), dans son conteneur (`docker exec …`), dans sa sandbox (`sbx exec …`) — avec ce qu'il faut lancer avant pour chacune. | ||
| 24 | +- Les options de `mm init` fixent des réponses à l'avance : `"args": ["acp-create", "--provider", "llmman", "--project", "yes"]`. | ||
| 25 | +- Recharger l'agent relance l'assistant : les réponses ne sont pas gardées, un fichier déjà écrit n'est pas touché. | ||
| 26 | + | ||
| 27 | +Essayé dans Zed. Le mode formulaires n'est couvert que par des tests avec un client simulé : aucun second client ACP n'a été essayé, ni aucun qui affiche les formulaires. | ||
| 28 | + | ||
| 29 | +Voir [Créer un agent depuis votre éditeur](../docs/fr/how-to/create-an-agent-from-an-editor.md). | ||
| 30 | + | ||
| 31 | +### `mm dockerinit` connaît le dossier `.mm` (#212) | ||
| 32 | + | ||
| 33 | +Comme `mm sbxinit` depuis la v1.0.7, `mm dockerinit` cherche maintenant `agent.yaml`, puis `.mm/agent.yaml`, et nomme le service d'après l'agent trouvé. Pour un projet `.mm`, `compose.yaml` : | ||
| 34 | + | ||
| 35 | +- monte `.mm/` **en lecture seule** sur le projet : l'agent ne peut pas modifier ses propres réglages, skills ou hooks ; | ||
| 36 | +- remonte en écriture le `sessions.dir` et le `trace.dir` du fichier d'agent (quand ils sont activés et sous `.mm/`), et `mm dockerinit` les crée s'ils manquent — Docker les créerait au nom de root, et l'agent ne tourne jamais en root ; | ||
| 37 | +- lance `mm tui` sans fichier : mm trouve `.mm/agent.yaml` depuis le projet. | ||
| 38 | + | ||
| 39 | +```yaml | ||
| 40 | + volumes: | ||
| 41 | + - .:${PWD:-/workspace} | ||
| 42 | + - ./.mm:${PWD:-/workspace}/.mm:ro | ||
| 43 | + - ./.mm/sessions:${PWD:-/workspace}/.mm/sessions # sessions.dir | ||
| 44 | +``` | ||
| 45 | + | ||
| 46 | +Un projet classique obtient les mêmes fichiers qu'avant. Vérifié sous Linux avec Docker 29.9.3 et Compose v5.7.1 : écrire dans `.mm/` est refusé, écrire dans `.mm/sessions` et dans le projet fonctionne. Pas vérifié sur Docker Desktop (macOS). | ||
| 47 | + | ||
| 48 | +Voir [Faire tourner mini-me dans un conteneur](../docs/fr/how-to/run-in-a-container.md). | ||
| 49 | + | ||
| 50 | +### Le rechargement d'un éditeur n'échoue plus (#210) | ||
| 51 | + | ||
| 52 | +Le *Reload Agent* de Zed répondait « Loading or resuming sessions is not supported by this agent » pour tout agent sans `sessions.enabled` — la valeur par défaut de `mm init`. `mm acp` accepte maintenant toujours le rechargement (`session/load`, `session/resume`). Avec des sessions enregistrées, rien ne change : la conversation revient. Sans elles, la conversation recommence, et un message dans le fil le dit, ainsi que la façon de garder la suivante (`sessions: {enabled: true}`). | ||
| 53 | + | ||
| 54 | +### `mm sbxinit` dit comment lancer la sandbox | ||
| 55 | + | ||
| 56 | +Après avoir écrit `sbxenv.yaml`, `mm sbxinit` affiche maintenant `Run the sandbox <nom>: sbx env run --force` entre les commandes de création et de suppression ; les commentaires du fichier la listent aussi. | ||
| 57 | + | ||
| 58 | +## Documentation | ||
| 59 | + | ||
| 60 | +- Nouveau guide : [Créer un agent depuis votre éditeur](../docs/fr/how-to/create-an-agent-from-an-editor.md). | ||
| 61 | +- Le guide du conteneur a une section pour un projet `.mm` ; la référence de la ligne de commande décrit `mm acp-create` et la nouvelle recherche `--agent` de `mm dockerinit`. | ||
| 62 | +- La référence ACP, la référence de configuration (`sessions.enabled`) et l'explication des sessions persistantes décrivent le rechargement sans sessions enregistrées. | ||
| 63 | + | ||
| 64 | +## Mise à jour | ||
| 65 | + | ||
| 66 | +- **Les fichiers d'agent ne changent pas.** Remplacez le binaire : voir les guides d'installation pour [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md). | ||
| 67 | +- **`mm acp` annonce maintenant toujours `loadSession` et `session/resume`.** Un client qui comptait sur leur absence pour savoir que les sessions n'étaient pas enregistrées verra un rechargement qui recommence la conversation au lieu d'une erreur. `session/list` n'existe toujours qu'avec `sessions.enabled`. | ||
| 68 | +- **Un `compose.yaml` écrit par un `mm dockerinit` antérieur pour un projet `.mm`** monte tout le projet en écriture et lance `mm tui agent.yaml`. Relancez `mm dockerinit` et répondez `yes` pour le remplacer. | ||