From 013c6257f26b503d2d5f796f10c256741ad30ef1 Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Sun, 10 May 2026 05:37:58 +0000 Subject: [PATCH] phase0 amendment: insert MCP phase 2, renumber subsequent phases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MCP/tool-calling lands as a distinct phase, before Norris mode so the autonomous planner has tools as substrate. lmcp speaks MCP standard JSON-RPC 2.0 over HTTP/SSE — fits the existing libcurl FFI plan; tool calls ride the OpenAI-compatible `tools` field on /v1/chat/completions, so the §6 broker contract is unchanged at the transport level. §8: tokenization concern bumped Phase 2 → Phase 3 (still tracks Norris). §11: Norris→3, memory→4, routing→5, tree-sitter→6. §13: Q1/Q2/Q3/Q5 phase numbers tracked the renumber; added Q6 (CMD: vs tools coexistence), Q7 (server discovery), Q8 (tool-call auth gate). No §3 invariant broken. No code touched — Phase 0 implementation per the locked manifest is still the next move. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/PHASE0.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/docs/PHASE0.md b/docs/PHASE0.md index 863bc3c..5742c1f 100644 --- a/docs/PHASE0.md +++ b/docs/PHASE0.md @@ -183,7 +183,7 @@ Context = { } ``` -Token budget enforcement is approximate in Phase 0 (character count / 4). Accurate tokenization is a Phase 2 concern. +Token budget enforcement is approximate in Phase 0 (character count / 4). Accurate tokenization is a Phase 3 concern. When `max_turns` is reached, the oldest two turns (one user + one assistant) are evicted silently. The user is notified with a status line: `[context] oldest 2 turns evicted`. @@ -282,10 +282,11 @@ Config path resolution order: |---|---| | **0** | Blocking REPL, `io.popen` exec, single model, in-memory context, meta commands | | **1** | SSE streaming via libcurl FFI, PTY via `forkpty` FFI, session persistence (`sessions/*.jsonl`), readline custom bindings | -| **2** | Chuck Norris autonomous mode, destructive op heuristic (static + model), HALT/confirm gate, planning loop | -| **3** | `memory.jsonl` summarization, startup context injection from memory, `:history` management, pruning | -| **4** | Multi-model routing by task type, cloud fallback, context summarization via fast model on eviction | -| **5** | Tree-sitter syntax highlighting hooks, diff-aware code injection, project-level context (file tree summary) | +| **2** | MCP client (`mcp.lua`): tool-calling via OpenAI-compatible `tools` field on `/v1/chat/completions`; MCP JSON-RPC 2.0 over HTTP/SSE transport (target: lmcp); tool-result turns in context; per-server config + runtime `:mcp` meta commands | +| **3** | Chuck Norris autonomous mode, destructive op heuristic (static + model), HALT/confirm gate, planning loop (now able to use MCP tools as well as `CMD:` lines) | +| **4** | `memory.jsonl` summarization, startup context injection from memory, `:history` management, pruning | +| **5** | Multi-model routing by task type, cloud fallback, context summarization via fast model on eviction | +| **6** | Tree-sitter syntax highlighting hooks, diff-aware code injection, project-level context (file tree summary) | --- @@ -305,11 +306,14 @@ Security posture: aish trusts the local user. The destructive-op gate in Norris | # | Question | Impact | Target Phase | |---|---|---|---| -| Q1 | Token counting: use model's `/tokenize` endpoint or keep char/4 heuristic? | Context eviction accuracy | Phase 2 | -| Q2 | Norris mode: should the planner emit a numbered step list and track progress, or re-plan after each step? | Loop structure in safety.lua | Phase 2 | -| Q3 | Summarization at session end: automatic on `:quit`, or explicit `:save`? | UX + history.lua API | Phase 3 | +| Q1 | Token counting: use model's `/tokenize` endpoint or keep char/4 heuristic? | Context eviction accuracy | Phase 3 | +| Q2 | Norris mode: should the planner emit a numbered step list and track progress, or re-plan after each step? | Loop structure in safety.lua | Phase 3 | +| Q3 | Summarization at session end: automatic on `:quit`, or explicit `:save`? | UX + history.lua API | Phase 4 | | Q4 | Should `CMD:` extraction support multi-command blocks (here-doc style)? | executor.lua parser | Phase 1 | -| Q5 | Cloud model routing: explicit `:model cloud` only, or automatic fallback on local timeout? | router.lua policy | Phase 4 | +| Q5 | Cloud model routing: explicit `:model cloud` only, or automatic fallback on local timeout? | router.lua policy | Phase 5 | +| Q6 | How do `CMD:` extraction (Phase 0) and MCP tool-calls (Phase 2) coexist — both, prefer tools, retire `CMD:`? | broker.lua + executor.lua + system prompt | Phase 2 | +| Q7 | MCP server discovery: declared in `config.lua` only, runtime `:mcp connect `, or both? | config.lua schema + repl.lua meta set | Phase 2 | +| Q8 | Tool-call authorization gate: per-call confirm (like `confirm_cmd`), per-tool policy in config, or trust-list by server? | safety.lua + mcp.lua + Norris-mode interaction | Phase 2 (informs Phase 3) | ---