Files
tai/research/INDEX.md
T
retoor 251c3dc2ba research: mcp-client-support subject (106 sources, 3 conclusions)
- wire spec: lifecycle, stdio + Streamable HTTP transports, tools,
  utilities, legacy SSE, versioning, changelog (14 Tier 1)
- client ecosystem: Claude Code/VS Code/Cursor/Codex configs,
  mcp-remote, Smithery, registries, Glama (12 Tier 1)
- security/ops: authorization draft, trust model, poisoning,
  rug pulls, production hardening (12 Tier 1) + 68 Tier 2 cards
- conclusions: minimal stdlib client on 2025-11-25, normalizer +
  resolver agent for pasted configs/GitHub URLs, untrusted-until-
  consent trust model; nothing built yet
- audit PASS (14 subjects, 797 sources, 32 conclusions)
2026-10-18 19:23:02 +02:00

24 KiB

Research Archive Index

Molodetz Institute — Research & Retrieval Division. This is the living registry of every subject in research/. It is updated in the same pass as any new research, per the standing rule in README.md §4. Never edit a subject's documents without also updating its row here.

Global statistics

Metric Value
Subjects 14
Total source documents 797
— Tier 1 (Source Dossier, independently analyzed) 254
— Tier 2 (Source Citation Card, listed only) 543
Total conclusion documents 32
Archive opened 2026-10-09
Last updated 2026-10-18

Subjects

Subject Sources (T1 / T2) Conclusions Opened Last updated Driving task
sqlite-rag-hybrid-search 60 (17 / 43) 3 2026-10-09 2026-10-18 Designing tmux-log export + chunked retrieval; settled on BM25-only, no vector DB; extended 2026-10-18 with retrieval-quality measurement and a gated lexical tuning roadmap
agent-memory-recency-tracking 63 (16 / 47) 1 2026-10-09 2026-10-09 Designing an LRU-style last-used/use-count tracker for vault records and chunks
async-pty-process-testing 59 (20 / 39) 1 2026-10-09 2026-10-09 Designing tai_test.py (pty vs. pipes, non-blocking stdin, process-group cleanup, test-framework shape) — backfilled after it was initially skipped, see activity log
shell-multiplexer-auto-attach 139 (49 / 90) 3 2026-10-09 2026-10-12 Designing a tai-managed terminal multiplexer + bashrc auto-attach: tmux-as-substrate recommendation, interactive-vs-automation shell detection; extended 2026-10-10 to cover zsh/fish hook syntax; extended 2026-10-12 with the tmux 3.6 key table, option and command dumps (installed binary) and the conclusion to build a native tmux-parity multiplexer configured by ~/.tai/mplex.toml
tui-framework-design 94 (49 / 45) 5 2026-10-10 2026-10-11 Designing tai's in-house TUI framework (retained DOM, cuts/chops compositor, SGR mouse, bubbling events, VT sub-terminals); extended 2026-10-10 with synchronized-output verification (DEC 2026); implemented in working-tree tai.py and verified the same session; same-day follow-up fixed the 19 failures natively, deleted tai_pkg/, suite 320/320 green, committed; extended again for kitty keyboard protocol (double-Shift prompt dialog); extended 2026-10-11 with messaging-layout comparison (telecli, send-rs, za-tui, bubbletea examples) and palette-role theming survey (Textual, lipgloss, bubbletint, ratatui-themes, ratatui-kit, pytermgui) plus 2 conclusions, nothing built yet; extended again 2026-10-11 with Telegram look-and-feel survey (tdesktop day/night themes, lang strings, Android dialog/message cells, FAQ, blog, Bot API/features, WebApps ThemeParams, mini-apps SDK docs, iOS teardown — 16 Tier 1) plus 2 conclusions, nothing built yet
agentic-tool-loop-design 74 (7 / 67) 2 2026-10-11 2026-10-11 Fixing stop-after-narration on prompt-JSON CLI backends without intent regexes; decided structural loop control plus exactly-once JSON-contract repair plus prompt contract, implemented in tai.py the same session (suite 357/357 + 16/16 green); approval tiers judged already industry-standard, no change
muse-responses-openai-transpiler 66 (3 / 63) 2 2026-10-11 2026-10-11 Documenting Meta muse Responses wire format vs classic Chat Completions; decided bidirectional transpile is feasible with a fixed loss table and system guidance has three channels; scratch transpiler tested, nothing merged
free-model-discovery 4 (4 / 0) 1 2026-10-12 2026-10-12 Bringing tai's free model lists up to date from live endpoints (zen, openrouter, devplace, pollinations); live discovery replaces hard-coded lists
agent-goal-verification 43 (11 / 32) 3 2026-10-18 2026-10-18 Validating whether the GoalVerifier subagent plus strict JSON verdicts plus approval hardening scales and is solid; kept all three as shipped with stated conditions
prompt-context-scaling 34 (10 / 24) 3 2026-10-18 2026-10-18 Scaling prompts past the context window and reusing RAG/graph for more; tai already matches the converged arsenal, giant prompts should spill to retrievable records (specified, not built), full GraphRAG and memory vendors rejected
background-work-limits 10 (4 / 6) 2 2026-10-18 2026-10-18 Bounding parallel subagents and hardening the scheduler; parallel cap 8 with reject-loud, per-tick fires 4, one live run per schedule via lease, stated misfire policy; implemented same day
sandbox-resource-caps 21 (3 / 18) 1 2026-10-18 2026-10-18 Capping the agent sandbox box CPU/memory/pids after the coverage audit found it uncapped; static trio 2g/2.0/256 at create, best-effort update for existing boxes, pids via recreation; implemented same day
cap-protocol 24 (23 / 1) 2 2026-10-18 2026-10-18 Supporting CAP (CLI Agent Protocol) as agent and orchestrator: full read of core + coding profile, quickstart, STATUS, all 5 manifests; selective A2A/ACP wire reads; decided phased rollout without gRPC plus dual A2A spelling
mcp-client-support 106 (38 / 68) 3 2026-10-18 2026-10-18 Designing tai's MCP client: wire spec (stdio + Streamable HTTP on the 2025-11-25 baseline), pasted-config/GitHub-URL resolver, and the trust/approval model; decided minimal stdlib client, normalizer plus resolver agent, untrusted-until-consent with description pinning, no OAuth in v1, nothing built yet

Recent activity log

Date Subject Event
2026-10-09 — Archive created: specification (README.md), index (this file), and both subjects above backfilled from the day's research in full, per explicit instruction to retroactively capture every source consulted that day.
2026-10-09 sqlite-rag-hybrid-search 32 sources (10 Tier 1 / 22 Tier 2) + 1 conclusion recorded (the conclusion: pure SQLite FTS5/BM25 chunked search, deliberately no embeddings/vector DB — see conclusions/). Counts verified directly against the written files, not taken from the authoring agent's self-report.
2026-10-09 — Spec change: Tier split into its own standalone metadata row (1 / 2 / N/A) instead of a parenthetical inside Document type, so it's directly filterable. All 97 existing documents across both subjects backfilled to match in the same pass; counts re-verified afterward (unchanged: 26 Tier 1, 69 Tier 2, 2 Conclusions).
2026-10-09 agent-memory-recency-tracking 63 sources (16 Tier 1 / 47 Tier 2) + 1 conclusion recorded (the conclusion: last_used/use_count tracking proposal for records and chunks, throttled-write pattern, no eviction policy yet — see conclusions/). One source (glama-code-index-mcp-bm25-hybrid.md) was promoted from the originally-planned Tier 2 to Tier 1 by the authoring agent mid-task because it contained specific attributable numeric findings — exactly the judgment call §3 of README.md calls for, logged here rather than silently absorbed. Counts verified directly against the written files.
2026-10-09 async-pty-process-testing New subject, opened as a correction: the eight WebSearch calls behind tai_test.py's design (pty vs. pipes, non-blocking stdin, process-group cleanup, test-framework patterns) were initially skipped from the archive under the reasoning "informal engineering reference, not a design decision" — a silent, unilateral exception to the Research Rule, and wrong (see README.md §4's added "no exception, ever" paragraph). Backfilled: 59 sources (20 Tier 1 / 39 Tier 2) + 1 conclusion (conclusions/tai-test-framework-design.md). Counts verified directly against the written files via research/audit.py, not taken from the authoring agent's self-report alone. A PostToolUse/WebSearch hook (.claude/settings.json) was also added the same day specifically to stop this from recurring.
2026-10-09 shell-multiplexer-auto-attach 71 sources (38 Tier 1 / 33 Tier 2) + 1 conclusion recorded (the conclusion: build on tmux as a substrate rather than a from-scratch multiplexer; reliable human-vs-automation shell detection has no single solution, only a combination of weaker signals plus a safety-file escape hatch). Counts verified directly against the written files via research/audit.py. Hook fired correctly for all 8 underlying WebSearch calls during this task.
2026-10-10 shell-multiplexer-auto-attach Extended with 67 more sources (10 Tier 1 / 57 Tier 2) + 1 more conclusion (conclusions/cross-shell-hook-syntax-bash-zsh-fish.md), covering 7 WebSearch calls on zsh/fish command-not-found and plexer-hook syntax (fish_command_not_found, zsh command_not_found_handler, fish's isatty builtin vs. a missing test -t, status is-interactive/is-login, config.fish always being sourced, and the fish -i flag). Subject total now 138 sources (48 Tier 1 / 90 Tier 2), 2 conclusions. The research backed a same-session implementation (tai.py's shell_rc_path/ZSH_NOTFOUND_BLOCK/FISH_NOTFOUND_BLOCK/FISH_PLEXER_BLOCK/op_zsh_hook/op_fish_hook/op_zsh_plexer_hook/op_fish_plexer_hook, new tests in test_tai.py and tests/bashrc.py, and zsh/fish added to tests/docker/Dockerfile) rather than remaining a proposal. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-10 tui-framework-design New subject: 44 sources (7 Tier 1 / 37 Tier 2) + 1 conclusion (conclusions/retained-dom-compositor-tui.md), covering 4 WebSearch calls plus 7 direct page fetches on TUI architecture (Textual events/layout/animation guides, pyte repo, SGR mouse protocol, rabbitui Textual synthesis, tmux popup-removal commit). Decision: retained-DOM framework in tai.py with cuts/chops compositor, named layers, bubbling events, SGR mouse, tick animations, reimplemented VT sub-terminals. Nothing built yet; implementation plan presented, awaiting go. Counts hand-verified (shell unavailable for research/audit.py in this session).
2026-10-10 tui-framework-design Extended with 10 more sources (2 Tier 1 / 8 Tier 2) verifying synchronized-output framing (DEC mode 2026, CSI ? 2026 h/l, harmless no-op where unsupported). Subject total now 54 sources (9 Tier 1 / 45 Tier 2), 1 conclusion. Implementation approved by retoor the same session; framework being built into tai.py.
2026-10-10 tui-framework-design Implementation finished and verified (no new sources): framework in working-tree tai.py, tui.md docs, /demo + --demo + --demo-shot wiring, 49 TUI unit tests green, 21/21 headless interaction checks green, 10/10 live pty e2e checks green, test_seal.py green. The 19 remaining test_tai.py failures are the pre-existing monolith/facade working-tree mismatch, proven unrelated via stash comparison. Conclusion document updated.
2026-10-10 tui-framework-design Follow-up (no new sources): the 19 failures from the previous row were fixed natively — five classes (Consts, Install, Sandbox, Opencode, SysInfo) defined directly in standalone tai.py with module functions delegating, four test patch-targets corrected to the real tai.* seams (assertions unchanged) — then tai_pkg/ deleted outright per retoor's call. Suite now 320/320 green (test_tai.py) + 16/16 (test_seal.py); tui.md focus rules updated (Tab always cycles, auto-focus, focus memory); committed. Conclusion document forward-corrected.
2026-10-10 tui-framework-design Extended with 1 more source (Tier 1: the kitty keyboard protocol specification, direct fetch) to settle double-Shift detection for a prompt dialog: bare modifier presses need flag 8, press is 57441;2u, filter :2/:3 via flag 2, push CSI > 10 u best-effort with no query round-trip, pop on teardown. Subject total now 55 sources (10 Tier 1 / 45 Tier 2), 1 conclusion.
2026-10-11 agentic-tool-loop-design New subject: 74 sources (7 Tier 1 / 67 Tier 2) + 2 conclusions, covering 7 searches plus 7 direct fetches on agentic loop control (Anthropic stop_reason docs, Building Effective Agents, Agent SDK loop, Writing Tools for Agents, ReAct pattern, tool-calling playbook, small-model narration field report). Decisions: keep loop control structural (tool_calls presence is the stop_reason equivalent, never text parsing), repair a missing JSON envelope exactly once per CLI-backend call, harden the prompt contract, leave approval tiers unchanged. Backed a same-session implementation (tai.py opencode_find_answer/cli_json_repair_prompt/cli_json_turn, prompt-contract sentences, 7 new tests) with suite 357/357 + 16/16 green. Counts verified directly against the written files.
2026-10-11 tui-framework-design Extended with 23 more sources (all Tier 1, no Tier 2 — every consulted source body was opened via web_fetch by the researching agent) + 2 conclusions (conclusions/messaging-layout-chat-scene.md, conclusions/palette-role-theming.md): 14 dossiers comparing 4 messaging-client implementations (telecli tui.rs; send-rs tui mod/state/config/status/chat-widget; za-tui tcss/main-screen/status/input/chat-view; bubbletea chat + glamour examples; ai-nexus ratatui guidance doc) and 9 dossiers surveying theme systems (Textual theme.py, design guide, constants.py; lipgloss pkg docs; bubbletint, ratatui-themes, ratatui-kit; pytermgui styling + file_loaders). Decisions: 30/70 chat scene with growing input + 1-line status, manual sidebar toggle first with sub-80 auto-hide deferred, modal keys, left-aligned grouped rows, markdown width-minus-chrome, pin-to-bottom streaming; 12-role palette with THEMES dict registry, --theme flag > TAI_THEME > default, set_theme + F4 cycle, resolve-at-draw with raw-color escape hatch, file overrides deferred. A same-session internal tai.py inventory (no chat-transcript widget, no theme object, hardcoded inline styles) informed both conclusions but produced no source documents (internal code, not external research). Nothing built yet — both conclusions are specified-not-shipped. Carried gaps: no shipped client implements auto breakpoints (80-col rule is guidance-doc only); no streaming/tool-call rendering observed (inferred); fixed-cell sidebars appear only in guidance docs; ratatui core styling, pytermgui NO_COLOR, Textual get_css_variables, and lipgloss v2 LightDark unverified (snippet or inference only). Subject total now 78 sources (33 Tier 1 / 45 Tier 2), 3 conclusions. Counts verified directly against the written files (per-subject grep; global grep also matches README.md's own template rows, excluded).
2026-10-11 tui-framework-design Extended with 16 more sources (all Tier 1, no Tier 2 — every consulted source body was fetched by the researching agents) + 2 conclusions (conclusions/telegram-chat-grammar-adoption.md, conclusions/telegram-theme-roles-mapping.md): 10 dossiers on Telegram chat look-and-feel (tdesktop day/night theme files, lang.strings copy sheet, Android DialogCell/ChatMessageCell, FAQ check semantics, chat-themes blog, third-party checkmarks explainer, Bot API keyboards/commands, bot features onboarding) and 6 on Mini App theming (official WebApps ThemeParams/events/design rules; SDK docs for main/back, settings, viewport, theming; third-party iOS teardown). Decisions: adopt Telegram's metadata grammar as rows (clock/checks/blue-checks/eye, no delivered state), 8-hue peer palette, service/date pills, literal status/composer/bot copy, and reply-vs-inline keyboard grammar, rejecting bubbles, gradient themes, and pixel geometry; map the 15 ThemeParams keys onto tai's 12 roles with Desktop-file plus dark-sample defaults and a never-hardcode/re-read-on-switch discipline. A same-session internal tai.py inventory (chat scene present but plain: no ticks/dividers/header/rich rows/composer buttons; 6 of 12 roles used, hardcoded borders) informed both conclusions with per-item patch targets but produced no source documents (internal code, not external research). Nothing built yet — both conclusions are specified-not-shipped. Carried gaps: iOS/Web hexes unverified (Desktop day/night only); bubble radii/paddings/spacing/tail geometry, header icon inventory, chat-list time/date formatting and truncation, send-vs-voice swap and media-bubble time overlay unknown; no official typography/spacing spec (teardown values only); light defaults for section_*/subtitle/destructive unpublished; WebViewColors diagram uninspected; back-button SDK page yielded no captured evidence. Subject total now 94 sources (49 Tier 1 / 45 Tier 2), 5 conclusions. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-11 muse-responses-openai-transpiler New subject: 66 sources (3 Tier 1 / 63 Tier 2) + 2 conclusions, covering the Meta muse Responses wire format vs classic Chat Completions (official migration guide, Responses reference, Chat reference fetched and synthesized; 63 search listings logged as seen-not-analyzed). Decisions: bidirectional transpile is feasible with a fixed warn-on-drop loss table, and system guidance has three channels (instructions preferred, developer/system Items otherwise). Backed by a scratch stdlib transpiler (/tmp/openai_transpile.py, self-test green, real-capture round trip verified); nothing merged into tai.py. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-12 shell-multiplexer-auto-attach Extended with 1 source (Tier 1: output of the installed tmux 3.6, list-keys, list-keys -N, show-options, list-commands) + 1 conclusion (conclusions/tmux-parity-native-multiplexer.md): the native multiplexer gets tmux's default key tables, command and option names, configured by ~/.tai/mplex.toml; the earlier "build on tmux" recommendation stays for the tmux controller and detection rules. Behavior was also compared command by command against the same binary (layouts, windows, copy mode), see mplex.md.
2026-10-18 agent-goal-verification New subject: 43 sources (11 Tier 1 / 32 Tier 2) + 3 conclusions, covering LLM-judge reliability and biases, test-time verification scaling, evaluator-optimizer and reflection patterns, test-based verification, structured-output reliability tiers, and approval-UX practice (2 gather subagents plus first-hand fetches of all Tier 1 pages). Decisions: keep the verifier-subagent architecture with bounded rounds, keep prompt-only JSON with strict parse and retry, keep re-prompt plus shell-only exact-match affirm recovery. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 prompt-context-scaling New subject: 34 sources (10 Tier 1 / 24 Tier 2) + 3 conclusions, covering context-window management (compaction, just-in-time retrieval, notes, subagent isolation), long-context limits, map-reduce over long inputs, GraphRAG scope and cost, and memory layers (2 gather subagents plus first-hand fetches of all Tier 1 pages). Decisions: tai's arsenal already matches the converged set; oversized prompts should spill to records and answer via retrieval (specified, not built); full GraphRAG and memory vendors rejected in favor of growing the vault graph. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 sqlite-rag-hybrid-search Extended with 28 sources (7 Tier 1 / 21 Tier 2) + 2 conclusions (conclusions/standing-retrieval-eval.md, conclusions/lexical-tuning-roadmap.md), closing the original conclusion's open risk on unmeasured retrieval quality: rank metrics (Hit@K/MRR/nDCG/Context Precision), goldens generalized from the fingerprint method, implicit search-then-read preferences, query logging gap, and an ordered tuning backlog (column weights, OR-fallback, prefix) with HyDE/RM3/embeddings rejected. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 background-work-limits New subject: 10 sources (4 Tier 1 / 6 Tier 2) + 2 conclusions, covering supervisor bounds (OTP intensity, semaphore reject-loud) and scheduler policies (APScheduler max_instances/coalesce, Temporal Skip, cron) after a feature-coverage audit found orchestration and scheduling unresearched. Decisions implemented same day: AGENTS_MAX_PARALLEL 8 with AgentsFull refusal, 64-record retention with oldest-collected purge, 4 fires per tick, one live run per schedule via last_status lease, stated misfire policy, no auto-retry. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 sandbox-resource-caps New subject: 21 sources (3 Tier 1 / 18 Tier 2) + 1 conclusion, covering container resource caps (Docker limits reference, podman-run flag parity, podman-update create-only pids gap) plus snippet corroboration of the memory/cpus/pids trio after the coverage audit found the sandbox box fully uncapped. Decision implemented same day: static --memory=2g --cpus=2.0 --pids-limit=256 at box create for both engines, one best-effort update (memory plus cpus) per process for existing boxes, concrete rm -f recovery pointer on failure. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 cap-protocol New subject: 24 sources (23 Tier 1 / 1 Tier 2) + 2 conclusions, covering CAP core v1 and the coding profile read in full, quickstart, STATUS, all 5 example manifests, A2A spec + proto (selective), 10 ACP pages (selective), and the reference A2A driver (grepped). Decisions: implement all bindings except gRPC in 5 phases (manifest/events, agent speak, PTY driver, stream-json + orchestration, ACP/A2A + auto-answer); try draft then current A2A endpoint spellings. Counts verified directly against the written files via research/audit.py (PASS).
2026-10-18 mcp-client-support New subject: 106 sources (38 Tier 1 / 68 Tier 2) + 3 conclusions, covering the MCP wire spec (lifecycle, transports, tools, utilities, 2024-11-05 legacy, versioning, changelog), client config ecosystems (Claude Code, VS Code, Cursor, Codex TOML, mcp-remote, Smithery, registries, Glama), and security/operations (authorization draft, trust model, poisoning, rug pulls, production ops) via 3 gather subagents plus first-hand fetches of the load-bearing spec, client-config, and OWASP pages. Decisions: minimal stdlib client on the 2025-11-25 baseline (stdio + Streamable HTTP, no SDK, no OAuth in v1); deterministic normalizer plus resolver subagent for pasted configs and GitHub URLs with live-handshake verification; untrusted-until-consent trust model with description-hash pinning and approval tiers. Nothing built yet. Counts verified directly against the written files via research/audit.py (PASS).

How to use this index

  • Before starting new research, search this table for an existing subject before opening a new one (see README.md §2, "one subject, one home").
  • Every subject folder is self-contained: its sources live flat inside it, its conclusions live in its conclusions/ subfolder.
  • Tier 1 vs Tier 2 is a statement about how deeply a source was actually read, not about its importance — see README.md §3 for the exact distinction. | 2026-10-12 | free-model-discovery | New subject: 4 Tier 1 dossiers (zen, openrouter, devplace, pollinations model listings, all fetched live) + 1 conclusion (live discovery over hard-coded lists). Implemented and --update-models run the same session. |