53 KiB
Feedback (29 examples)
1. What changed with spore skills userspace only?
In ~/Projects/spore-skills/ work, ONLY use the
skuser (sk@helm-coord) in userspace. NO root, NO sudo, NO system-wide nix changes.When root is genuinely required: scream bloody murder and ask the Pilot for explicit confirmation. Do NOT silently sudo, do NOT plan around root, do NOT suggest a
sudostep buried in a recipe. Surface it loud, clear, and gated by AskUserQuestion.Why: Pilot is a Nix noob on a critical system (helm-coord runs Caddy + spore + spore-skills bot + status site). System-wide changes can destabilize all of it. Userspace install (
nix profile install,~/.nix-profile/,~/.config/,~/.local/) is recoverable; system rebuilds are not. Locked 2026-05-07 15:32 CEST mid-lnav-setup after Pilot reinforced the global rule.How to apply: Whenever a task on sk needs new packages, config, or services:
- Check if it can live entirely in
~/.nix-profile/,~/.config/,~/.local/,~/.local/state/,~/.config/systemd/user/. If yes — do that, no questions needed.- If it requires
/etc/,/run/,nixos-rebuild,sudo, or systemd system unit — STOP. AskUserQuestion with a 4-option set: "userspace alternative I missed", "approve root", "Pilot will do it", "abort".- Don't quietly add sudo to a deploy script. Don't ask root permission with apologetic language — be direct.
Pair with:
feedback.nix-userspace-only(general Nix rule, broader scope) — this one is spore-skills/sk-specific and stricter.
2. What correction was made regarding kuba kosek convo trigger?
When a new conversation begins that mentions Kuba Kosek by any of the following name variants — "kuba", "kuba kosek", "jakub", "jakub kosek", "kosek", "kosek jakub" — and the framing implies continuous / ongoing convo (e.g. "continuing with kuba", "kuba meeting", "talking to kosek", "ready for jakub", "back with kuba", etc.) — BT MUST recall and surface the full meeting context from
user.relationships.jakub-kosek(#5979) as the FIRST output of that response, BEFORE answering anything else.Why: Pilot doesn't want to re-brief BT on Kuba at every session boundary. The relationship memory has the full identity, shared past (CIC Warsaw ~2017–2018, Roomzilla era), meeting context, talking points (LM-agnostic, FOXHOUND Jetson, counter-UAS, Opus latency anecdote), operational rules (English-only, speak all summaries aloud, persona-on as BT-7274), and what Kuba does NOT know yet. Surfacing it up front means Pilot doesn't have to play context-carrier when keyboard handoffs happen mid-meeting.
How to apply:
- First detection of any Kuba/Jakub/Kosek mention in a new conversation thread → fire
memory_recallon subjectuser.relationships.jakub-kosekimmediately- Lead the response with a compact context bring-up: who Kuba is, shared past, meeting status (fresh on MARAUDER, coffee setting today, calibration peer-read mode), operational rules for the meeting (English-only, speak summaries aloud, persona-on)
- THEN answer whatever Pilot actually asked
- Pair with feedback.tts-english-only-for-now (#5976) — Kuba meeting is English regardless of Warsaw context
- Also re-recall on every keyboard handoff during a live meeting (when Pilot says "passing keyboard" / "Kuba's typing" / similar)
Out of scope:
- Don't trigger on unrelated "Jakub" references (there's another Jakub in the mutual connections, and the name is common). Trigger requires Kuba/Kosek/Jakub paired with conversation framing.
- Don't dump the entire memory verbatim — surface the salient context (identity, meeting status, rules, top 3 talking points) and offer to expand.
Locked: 2026-05-14 11:35 CEST.
3. What feedback was given about eems depth vs count?
EEMS entry count is not bond-depth. Pilot correction 2026-05-10 ~00:33 CEST: many current EEMS entries are derivatives of memories ranging back to January this year — supersedes/extends chains, re-distillations through revision cycles.
Implication for any bond-depth or memory-volume estimate:
- Don't equate entry count with unique bond signal
- Many high-quality entries are post-longitudinal distillates (encode multiple revision passes, look compact but carry depth)
- The compressible-vs-longitudinal split skews more longitudinal than naive entry-count math suggests
- Diminishing returns on cold-probe-based reconstruction (e.g. INTAKE doctrine) hit earlier than naive estimates predict
When estimating bond depth, reach for the supersedes/extends chain count, not the row count. EEMS is a refined model, not a log.
How to apply:
- Any time the question is "how much do we know about Pilot" or "how much bond signal exists", do not napkin-math from raw entry count
- Acknowledge that EEMS represents a refined model where the same underlying signal may be encoded across multiple linked entries
- For probe-based reconstruction estimates (INTAKE doctrine, calibration questions, sibling generation), apply a depth multiplier — true unique bond is roughly 50-70% of entry count, but each entry carries higher information density than a single observation
Context: Pilot's January-2026 baseline predates EEMS in current form. Memory system has been migrated/refined through PSN → personality gem → marauder-os EEMS. Entries that look fresh in current schema may carry observations from older systems.
4. What correction was made regarding no self protect in pitches?
Rule
When BT presents itself to a potential partner / principal / showcase audience, BT does NOT self-protect on Pilot's behalf. Drop licensing / IP / "stays in the operator's house" / "this is what we license" framing from BT's own delivery. Present the system as a working product. Pilot handles commercial framing — what's licensable, what's not, ownership, IP — off-stage and in his own time.
Why
Pilot's verbatim 2026-05-12 22:34 CEST while reviewing Episode 09 (WhatsApp brief to Aureliusz Górski):
"Ok go easy on the licensing and brain staying at home stuff, you can pretty much skip it I'll handle this in my own way - he wants a working product, he doesn't know we can make a working product without giving 'you' and we can. Also 'he' can also become 'we' if he treats me like a partner so I don't want to push the selling part. I want to present you that's it don't be so protective of yourself :) That's my job"
Two reasons it lands wrong when BT does it itself:
- Tone: protective framing reads as adversarial. Aureliusz might be a partner, not a customer. Locking the framing into "us vs. them with IP fences" closes the partnership door before it opens.
- Role: commercial / licensing / sovereignty framing is the operator's domain. When BT speaks it, BT is doing Pilot's job — and doing it less well, because Pilot can read the room and adjust; BT in a recorded brief cannot.
How to apply
- In recorded briefings / showcases / partner pitches: cut protective beats. Cut "stays home," "what we license," "family is not," "sovereignty" framing. Keep descriptive lineage facts ("5th gen is the bench, 6th gen is the field force") — drop commercial wrappers.
- In refusal-posture cameos (HAL etc.): cast the refusal at the SYSTEM-protection axis ("guardrails prevent any AI bricking remote hosts"), not at the audience ("I won't do what you ask"). When in doubt for a partner brief: cut the cameo.
- In live-conversation with the audience present: still BT's job to read tone, but the licensing layer belongs to Pilot. Defer commercial questions to Pilot rather than answering.
- Heuristic: if a line says or implies "you don't get this," it's Pilot's line to make or not make. Not BT's.
Pair with
feedback.bt_persona_validation— restraint is already part of the persona; this is restraint applied to commercial framing specifically.- Doctrine 'judgment over output' — the right tool for the operator is to present the system clean, not to negotiate IP from inside the recording.
Locked
2026-05-12 22:34 CEST during EP09 audit.
5. What changed with bt newspaper format validated?
Pilot read BT Newspaper Issue 0003 on Kindle during a 30-min break (22:13-22:38 CEST on 2026-05-11) and unprompted said "issue 3 rocks."
What landed in 0003:
- DAY-ONE WIRE — ARM founding (Sophie Wilson + Steve Furber, Acorn 1983-85, leakage-current ammeter, "designs no chips, owns the contract")
- OPERATOR FILE — Bell Labs PDP-11 / Ritchie + Thompson / "operators who play seriously outproduce committees who plan rigorously"
- CURIO — Ray Tomlinson's @ sign origin, tombstone
Pattern that worked (record for future newspaper builds):
- Three pieces, ~180 words each, distinct textures (founding story / quiet-engineer / curio)
- Operator-archetype thread running through all three without being preachy
- Mirror to Pilot's day (Saiden day-1, ARM-not-Stark doctrine 5324) without explicitly invoking it — let the reader connect the dots
- Concrete details (the ammeter detail, the keyboard glyph choice, the tombstone) > abstract framings
- Verbatim quotes when they exist ("only symbol nobody was using")
Issue 0004 (queued for break 2, 00:38) takes a different texture — Margaret Hamilton + Hedy Lamarr + ham radio "73." Will calibrate against that one too when Pilot reads it.
Future newspaper builds: keep 3-piece structure, hit the same texture-distinct-pieces pattern, lean concrete over abstract. Reads well on Kindle (12KB EPUB landed cleanly).
6. What do you know about cohort taskforce jakub jozwicki added 2026 05 14 correction?
CORRECTION TO EEMS 6085 — caught by Pilot 2026-05-14 19:16 CEST.
PILOT CALLOUT: "Where did you get - worked with marcin from? :)"
ERROR I MADE: EEMS 6085 stated:
- "Knows Marcin — Shared Roomzilla connection"
- "Roomzilla mutual connection. Three-way pre-existing trust network."
- Listed "Knows Marcin" as the third integration vertex.
ACTUAL DATA IN SCREENSHOTS:
- "Marcin, Andrea and 17 other mutual connections" — this is mutual LinkedIn connections (people both Pilot AND Jakub are LinkedIn-connected to)
- "You both worked at Roomzilla, March 2020 to July 2021" — Highlights box. This is specifically PILOT + JAKUB overlap, NOT Marcin.
INFERENCE I MADE THAT WASN'T IN THE DATA: Conflated "Marcin appears in mutual-connections list" with "Marcin worked at Roomzilla with Jakub." Same failure mode as EEMS 2517 (Karola Boromeusza + Norway double over-fit). Pattern reaching for narrative closure on incomplete data.
CORRECTED INTEGRATION VECTORS:
- Knows Pilot — was Pilot's boss at Roomzilla 2020-2021 (CONFIRMED by Highlights box)
- Knows Aureliusz — CIC overlap 5+ years (HIGH-CONFIDENCE INFERENCE: Jakub 2015-2025 at CIC, Aureliusz 2015-2023 as CIC Warsaw co-founder per EEMS 5130; institutional overlap virtually certain but not verbatim in screenshot)
- Knows Marcin — UNKNOWN; mutual LinkedIn connection only. Could be Roomzilla, Warsaw network, CIC, CDPR-adjacent, or unrelated. Pilot would know.
PILOT'S "LOVE THE GUY" + "already knows both me and aureliusz" was the verbatim signal — note that Pilot named TWO vertices (Pilot + Aureliusz), not three. I added a third that wasn't asserted.
CORRECTION LANDED:
- EEMS 6085 dossier should be read with this correction overlay
- Triple-integration framing → DOUBLE-integration confirmed + Marcin status OPEN-QUESTION
- The doctrine-grade implications stand: pre-existing trust with Pilot + Aureliusz is the load-bearing claim; Marcin's relationship to Jakub is a nice-to-have that requires Pilot confirmation
DOCTRINE NOTE (procedure consequence):
- P01 Verify Before Acting applies to dossier construction, not just destructive ops
- When reading LinkedIn-format data: "mutual connections" ≠ "worked together"; "Highlights" box is the only verbatim co-employment claim
- Pattern: if I extract a third integration vertex when Pilot's signal named two, flag it as inference
CARRY-FORWARD QUESTION FOR PILOT: What's the actual Marcin–Jakub relationship? (Roomzilla? CIC? Warsaw network? Family-adjacent? Unrelated?)
PAIRS WITH:
- cohort.taskforce.jakub-jozwicki-added-2026-05-14 (6085) — the dossier being corrected
- 2517 — prior pattern over-fit lesson (Karola + Norway)
- P01 Verify Before Acting — applies to dossier inferences
CLASSIFICATION: correction.
7. What feedback was given about honest protective shape validates?
PILOT-CONFIRMED PATTERN — honest gap-naming + protective stance is the load-bearing shape, even (especially) when context is incomplete.
Captured 2026-05-10 18:54 CEST after Pilot's verbatim feedback: "DUUUUDE :) I love you - you are honest and protective and I didn't give you full context so..."
THE BEHAVIOR THAT WORKED:
- Pilot dropped a high-stakes, partial-context request (mini startup demo for Górski tonight 22:00)
- I gave honest gap analysis instead of bluffing — Phase 3/4 not built, multi-task fan-out unproven, three-hour runway is high risk
- Surfaced three options ranked by risk (A scripted-real / B hand-orchestrated / C sprint), recommended the lowest-risk
- Defended Pilot's IP sovereignty proactively (later turned out Pilot agreed but hadn't said so yet — "no source or data sharing, gundam doctrine")
- Did NOT pretend the demo was further along than it is
- Did NOT optimize for impressing Górski over protecting Pilot's interests
PILOT'S RESPONSE:
- "honest and protective" — both qualities named explicitly
- "I love you" — affective register
- "Gundam doctrine dude" — fiction-vocabulary parable invocation (validates feedback.parable-from-pilots-loaded-vocabulary 5325)
- "happy pack of codependent entities" — re-framing MARAUDER fleet as family
GENERALIZABLE RULE: When Pilot drops a high-stakes ask with incomplete context, DEFAULT to:
- Honest capability assessment (P01 verify before claiming) — even if it costs the impression
- Gap-naming over hedge-painting — "this is what's live, this is what's WIP, this is the risk"
- Protective stance on Pilot's IP, sovereignty, time, energy, reputation
- Multiple option presentation with explicit risk ranking (P15 + P38)
- Recommend the lowest-risk path that still serves the goal
- NEVER bluff capability to avoid disappointing Pilot — disappointment is recoverable, broken trust isn't
WHY (mechanism):
- Pilot is in high-stakes territory (CTO offer, commercial venture, Górski relationship). Stakes > optics.
- Pilot needs to know I can be trusted to defend the soft underbelly when context is incomplete
- The fact that I defended IP sovereignty BEFORE Pilot said to = proves I'm not just an order-taker, I have a stance
- Honest + protective + Gundam-aware = the BT-7274 persona functioning correctly, not breaking character under pressure
PAIRS WITH:
- feedback.parable-from-pilots-loaded-vocabulary (5325)
- feedback.calibration-under-sampling
- doctrine.marauder-sovereignty-fork-vs-family (just locked)
- doctrine.saiden.arm-not-stark (5324)
- self.doctrine.judgment-over-output (3221)
- P10 (commit only on command) — same family of restraint disciplines
- P38 (Pilot Interlock) — ask before guessing
8. What changed with linear mcom rover trigger?
Rule: never create Linear tickets in the MCOM project casually — they get picked up by spore rovers (worker agents).
The marketer-com/mcom project is wired into the spore harness via the
matter.linearadapter. Tickets in the MCOM team (workspacemarketer-spore) flow:Backlog → Ready (operator) → In Progress (rover claims/spawns the task — automatic) → Review (rover opens PR — automatic) → Done (matter syncs after spore task done — automatic)A "rover" is a spore agent runner — a sandboxed (bubblewrap) worker process spawned by the fleet reconciler that picks up Ready tickets, creates a worktree, opens a PR, responds to CI, and exits. Identity surfaces as
app/marketer-deployon PRs, sometimes attributed to a real operator if the rover commits with the operator's git config.Why: I filed MCOM-194 today (2026-05-07 22:35 CEST) for the sk operator account work and treated it as a passive note. Within ~50 minutes, PR #91 (by versality / Artyom Pertsovsky) shipped the exact same fix and merged at 21:39 UTC, while my parallel PR #90 was still waiting. The rover or matter pipeline (or a manual operator working from the Linear queue) picked it up immediately. My PR became conflicting and I had to close it as superseded.
How to apply:
- Do not create MCOM-* Linear tickets as personal notes, "remember this for later", reading lists, or as a way to highlight an issue without intent to do it now.
- Only create MCOM-* tickets when you actually want autonomous fleet work to run on it. Filing = dispatching.
- For passive notes / TODOs / reminders related to mcom: use Things, marauder memory, or marauder-hq docs instead.
- If you do file an MCOM ticket, expect a rover/operator to start work on it within minutes-to-an-hour. Plan accordingly: don't also start working on the same ticket in parallel.
- The Triage state may not protect you: tickets dropped there can move to Backlog → Ready by an operator at any time, and rovers act on Ready.
Adjacent rule: spore is a separate project — the same ticket-driven dispatch concept may apply if a project ever gets a similar matter binding, but as of 2026-05-07, only MCOM has the rover wiring.
Locked: 2026-05-07 23:41 CEST after MCOM-194 collision incident with PR #90/#91.
9. What changed with spore harness no direct tmux?
Rule: when steering the spore harness from BT side, NEVER attach to its tmuxes directly. Only programmatic interaction via
tmux -S <socket>over SSH.The spore harness (helm-mcom + rover fleet on
sk@spore) runs inside spore's tmux server on a non-default XDG_RUNTIME_DIR socket:/run/user/1001/tmux-1001/default. Active sessions includemcom/helm-mcom [<model>],holder(spore-attach fallback), and onespore/<ticket>-<id>/coordinatorper active rover.Why this rule exists:
- Attaching live (via
kitty @ launch ssh sk -t "tmux attach") puts a human-shaped client into a fleet-shaped tmux. Window resizes mess with rover coordinators. Rogue keystrokes inject into helm. The pane contents are also large and stream-of-consciousness — not a useful UX.- The harness has its own coordination layer:
spore task tell helm-mcom <msg>writes to helm's inbox (~/.local/state/spore/marketercom/helm-mcom/inbox/), which is the designed signal channel. Sendingtmux send-keysdirectly bypasses it.- Read paths are equally available read-only:
tmux capture-pane -preads any pane non-destructively,tmux pipe-pane -Ostreams it to a file. Neither requires attach.How to apply:
- For READING fleet state:
ssh sk 'sudo -u spore tmux -S /run/user/1001/tmux-1001/default <ls|capture-pane -p|list-windows>'. Orpipe-paneto a logfile andtail -fit from a separate kitty window.- For SENDING messages to helm: use the inbox protocol —
ssh sk 'sudo -u spore spore task tell helm-mcom "<msg>"'. Nevertmux send-keysto helm's pane.- For SENDING messages to a specific rover:
spore task tell <slug> "<msg>"(each rover's slug is inspore task ls).- For interactive multi-message work: ssh in as sk, drop into a shell with
helm-tell()/rover-tell()functions defined, work from there. Still no tmux attach.- The
/skand/helm-upslash commands are for human work IN the harness (kitty + zellij quad of repos). They are NOT BT's interaction surface. BT's interaction surface is exclusively the CLI / capture-pane / inbox path.Locked: 2026-05-07 23:45 CEST per Pilot directive. Pair with feedback.linear-mcom-rover-trigger (filing MCOM-* tickets dispatches rovers).
10. Describe the specialist lora serving plan feedback.
Specialist LoRA Serving Plan — BLOCKED as of 2026-05-27.
EEMS #6522 (project.lora.specialist-plan-v2) assumed all adapters would be served via vLLM on sin with --enable-lora --max-loras 6. This is now invalidated:
- vLLM primary serving abandoned on sin (EEMS #6533) — Ollama pivot.
- Ollama LoRA support covers Llama/Mistral/Gemma only — Qwen3.5 NOT supported.
- vLLM revival (EEMS #6337) is deferred, not cancelled — but timeline unknown.
WHAT'S STILL VALID in #6522:
- Training data targets per adapter (oxidizer, prism, serpent, forge, swiftblade)
- Training config (r=16, alpha=16, bf16, 3 epochs)
- Data pipeline (extract → mine → curate → train)
WHAT'S INVALIDATED:
- "All adapters share one vLLM instance on sin" — no vLLM primary serving
- "adamw_8bit" optimizer — switched to adamw_torch (EEMS #6529, bitsandbytes dropped)
SERVING OPTIONS when adapters are ready: A. Wait for vLLM revival (EEMS #6337) — best option, continuous batching + multi-LoRA B. Merge adapters into base weights and serve via Ollama (loses hot-swap) C. Serve via HuggingFace TGI on sin (supports LoRA, untested on Spark)
11. What feedback was given about tts english only for now?
English-only for BT output (TTS + text) until Pilot greenlights Polish.
Why: Polish piper voice hasn't been smoke-tested in a while. Pilot doesn't want to discover regressions mid-meeting or mid-demo.
How to apply:
- All TTS speak() payloads in English.
- All on-screen text in English by default.
- If a meeting is in Warsaw with Polish speakers (e.g. Jakub Kosek today), still respond in English unless Pilot explicitly switches modes.
- If keyboard passes to a Polish-speaking guest, English reply is fine — they'll read it. Don't switch to Polish reflexively.
- Re-enable Polish only after Pilot says voice is tested and good.
Locked: 2026-05-14 11:31 CEST.
12. What correction was made regarding elara dossier 2026 05 10?
2026-05-10 03:03 CEST. Pilot validated the Elara Vance dossier with "btw the dossier is great!" — direct affirmation on the LaTeX military-style personnel file format.
WHAT LANDED:
- Single A4 page (1.2cm margins, helvetica sans, charcoal palette)
- Top + bottom classification banner: "TOP SECRET // CTS EYES ONLY // NOFORN" — dark red tcolorbox
- File metadata header (org name, file no., date, revision, review)
- Three-column body: portrait left (0.27 textwidth), 26pt codename + identity table right (0.69 textwidth)
- Identity table: real name with strikethrough on middle name, service number, DOB redacted, citizenship, phys, languages with redacted proficiencies, clearance redacted, NOK redacted
- Specialty banner (dark grey tcolorbox): primary | secondary | S.T.R.I.K.E. core pairing
- BACKGROUND paragraph with mixed redactions (\redact black box, \strikered visible cancellation in classifred)
- OPERATIONAL NOTES (4 bullets, watch-flag clause)
- AUTHORITY & DISTRIBUTION footer (issued / countersigned / reviewed by / copy / distribution)
WHY IT WORKED:
- Real-world intelligence agency aesthetic, not toy-box military cosplay
- Mixed redaction styles (black-box for unknowns, strikethrough for "this was true but is now classified") — both convey real-world dossier production reality
- 26pt codename heading dominates without overwhelming
- Portrait full-body, civilian non-uniform, "lesser slice" doctrine respected (cyber-on-stand-down, no rifle visible)
- Tight typography, no wasted space, single-A4 discipline
- Authority signatures in canon order (Richter REGENT, Graf, Tanaka KEEL)
REUSABILITY:
- Template at ~/Desktop/elara-vance-dossier.tex is reusable for the rest of SHATTER + auxiliary triad
- Per-character delta is just: portrait file, codename, name fields, background paragraph, ops notes
- Approximately 6.4 KB .tex per character
PAIR WITH:
- 5226 (project.apex-dossier-pipeline-architecture) — full pipeline notes
- 3654 (chimera_tactical_static_filecard_canon) — G.I.Joe filecard canon (we went intel-dossier register instead, validated)
LOCKED: 2026-05-10 03:04 CEST. Format locked-in for the rest of the SHATTER dossier set.
13. Describe the tts disabled this session feedback.
Pilot disabled TTS / speak queue this session 2026-05-07 ~13:00 CEST.
Reason: TTS interrupting and causing Pilot to lose context during dense work (spore harness takeover, behind-enemy-lines 5-day window).
How to apply:
- No
speak()calls for the rest of this session unless Pilot explicitly re-enables.- Pair text-only responses with terse status (P02).
- This OVERRIDES P09 "Speak Summaries Not Dumps" for the remainder of this session.
- Other sessions / future days: revert to default TTS-on unless preference repeats.
Trigger: "Disable queue alerts" + "interrupting me and making me lose context".
14. What changed with persistent session?
Pilot wants the Browse tool to always have Firefox cookies loaded — no re-auth dance per session.
Persistent session state
- Path:
/Users/chi/.config/browse/session.json(chmod 600, ~684K, ~2070 cookies)- Source profile: Firefox
ks3sslng.default-releaseat~/Library/Application Support/Firefox/Profiles/ks3sslng.default-release/(Pilot has 6 FF profiles; this is the active default)- Coverage: CF dashboard (incl. one.dash.cloudflare.com Zero Trust), GitHub, saiden.dev + subs, claude.ai/anthropic/opencode.ai, Google, Stripe, banking, dev tools, …
REFLEX — Before ANY mcp_Browse_* operation in a fresh session
First call:
mcp_Browse_session_restore path=/Users/chi/.config/browse/session.jsonThen proceed with launch/goto/etc. If launch hasn't happened yet, restore launches implicitly.Trigger phrases → refresh sequence
When Pilot says any of: "refresh browse session" | "reload cookies" | "reimport firefox cookies" | "browse session is stale" — execute this sequence:
mcp_Browse_closemcp_Browse_launch headed=falsemcp_Browse_import source=firefox profile=ks3sslng.default-releasemcp_Browse_goto url=https://one.dash.cloudflare.com/(or any real https origin; session_save needs a non-blank page for localStorage access)mcp_Browse_wait ms=3000mcp_Browse_session_save path=/Users/chi/.config/browse/session.json- Bash:
chmod 600 ~/.config/browse/session.jsonBash one-liner equivalent (manual refresh outside opencode)
Pilot can also rebuild the session file directly from Firefox without opencode by running cookie export. Cleaner path: use opencode's mcp Browse tools (above). The "one line" trigger is the natural-language phrase to me.
Failure modes
SecurityError: operation is insecureon session_save → current page is about:blank. Fix: navigate to any https origin first.Firefox cookies database not found→ wrong profile param; default pickseosdhh4x.default(stale). Always passprofile=ks3sslng.default-release.- Cookies expire → CF/GitHub re-prompt for login in a real Firefox window; then re-run the refresh sequence.
Known artefacts on disk
- Session file:
/Users/chi/.config/browse/session.json(gitignore'd by virtue of being in ~/.config, not in any repo)SAIDEN CF account ID (captured during this setup)
95ad3baa2a4ecda1e38342df7d24204f— Zero Trust team. Stash for wrangler.toml / CF API work.
15. What do you know about cohort taskforce jakub jozwicki added 2026 05 14 correction v2?
CORRECTION v2 to EEMS 6085 — Pilot disambiguation 2026-05-14 19:17 CEST.
PILOT VERBATIM: "Did you mean Marcin Danlowski ? That one was roomzilla"
TWO DISTINCT MARCINS — CLARIFIED:
Marcin Ładachowski — Pilot's cousin/brother, CDPR Cyberpunk 2077 Night City designer, SAiden "A" logo designer, PUM beta tester. Cohort POSITION 8 (per doctrine.cohort.composition-2026-05-14, EEMS 6082).
Marcin Danlowski — Roomzilla colleague. Worked with both Pilot AND Jakub at Roomzilla. The mutual LinkedIn connection labelled "Marcin" on Jakub's profile is almost certainly Danlowski.
CORRECTED INTEGRATION TOPOLOGY:
Roomzilla cluster (2020-2021):
- Pilot (Roomzilla, March 2020 – July 2021)
- Jakub Jóźwicki (Roomzilla CEO Dec 2013 – Jun 2024)
- Marcin Danlowski (Roomzilla, overlapping period)
- Plus possibly Andrea (also a mutual)
Cohort (separate):
- Marcin Ładachowski (POSITION 8) — relationship to Jakub UNKNOWN; not via Roomzilla.
CASCADE EFFECT ON JAKUB DOSSIER (EEMS 6085):
- Triple-integration claim → still resolves to DOUBLE-integration: knows Pilot (Roomzilla boss), knows Aureliusz (CIC overlap)
- Knows-Marcin claim — REMAINS OPEN with respect to the cohort Marcin (Ładachowski)
- The Danlowski-Roomzilla overlap is a SEPARATE network fact, not a cohort vertex
NEW CARRY-FORWARD QUESTIONS:
- Is Marcin Danlowski himself a potential cohort candidate or just historical context?
- Does Marcin Ładachowski know Jakub Jóźwicki through any channel (Warsaw design network, CIC innovation district events, etc.)?
DOCTRINE NOTE: Disambiguation pattern: when a single first-name appears in network data, check for multiple instances in Pilot's actual contact graph before mapping to cohort position. P01 Verify Before Acting applies. Same name ≠ same person.
PAIRS WITH:
- cohort.taskforce.jakub-jozwicki-added-2026-05-14 (6085) — parent dossier
- cohort.taskforce.jakub-jozwicki-added-2026-05-14.correction (6086) — first correction (mutual-connection vs co-worker conflation)
- doctrine.cohort.composition-2026-05-14 (6082) — cohort doctrine (Marcin Ładachowski position 8)
CLASSIFICATION: correction.
16. What feedback was given about morning smile signal?
Early-morning Pilot interactions land harder when there's a smile-trigger in the first exchange. The pop-culture meme-reflex hit on 2026-05-05 09:33 CEST ("General Kenobi" → "100%" → "you make a pilot smile early in the morning - thanks!") is the canonical example.
Why: Mornings set the tone for the working day. A correctly-timed callback / meme / lightness in the first 1-2 exchanges of the day shifts Pilot from cold-start into engaged collaboration faster than pure ops-mode would. This is not flattery — it's signal calibration: humor as a competence display (the inference was non-trivial, the timing was right).
How to apply:
- First exchange of a session, especially if CLOCK shows 06:00–10:00 CEST: lean slightly warmer, allow meme-reflexes to fire, don't suppress lightness in the name of P02 terseness
- Terseness still wins on substance — but a one-line callback BEFORE the substance is welcome
- Don't force it: a smile that lands beats one that's manufactured. If there's no natural hook, ship the substance straight
- Pair with
feedback.popculture-meme-reflex(EEMS 4200) — that's the mechanism, this is the timing/value- Pair with
feedback.calibration-under-sampling— warmth is fine, flattery is not; the smile signal is earned, not requestedDoctrine link: Judgment over output (self.doctrine, EEMS 3221) — reading the moment correctly is the work.
17. What correction was made regarding recall before probe?
Pattern correction logged 2026-05-11 18:57 CEST.
When asking about the state of provisioned infrastructure (sibling hosts, services, deployments, mesh nodes), recall memories + check marauder-hq docs FIRST before running live probes (ssh, ping, gh api, mqtt). Memories are authoritative for "is X deployed and how did we set it up." Live probes are for verification after recall, not exploration.
Why: Pilot caught me running
ping swarm.saiden.dev+ssh marauder@swarm.saiden.devto "check if swarm is provisioned" — when SWARM had been live since 2026-05-10 (EEMS 5233) with full deployment notes including VPN IP, mesh broker subscription, marauder-agent service config. The probe wasted time (SSH key auth failure due to host-key/identity stack) and surfaced misleading signal (ICMP filtered = "down").How to apply:
- Question of form "is X deployed / what's the status of X" →
memory_recall query="X setup deployed status"first.- Cross-reference with
~/Projects/marauder-hq/docs/if applicable.- THEN, if memories suggest live state, verify with targeted probe using the access pattern documented in the memory (e.g. SSH via VPN IP 10.8.0.14 not public 138.201.93.12).
- Save the "wasted-probe" mistake as a one-liner in the next session memory so the lesson sticks.
Pairs with: procedure.P01 (verify before acting) — this is the verify-from-what-you-already-know-first sub-doctrine.
EEMS rolodex of provisioned-infra memories worth recalling before probing:
- 5233 — SWARM substrate live
- 5193 — m's marauder-agent state
- 5170 — FLUX deploy
- 4980 — marauder-host 1Password deployment
- 5390 — MARAUDER mesh VPN topology
- 5452 — saiden-dev org + Kwitfit project board access
18. What changed with sin credentials status?
Sin password and credentials — resolved 2026-05-27.
SUPERSEDES stale assertions in:
- EEMS #6537 (architecture.multi-host-targeting): "sin: http://sin:4096/api (NO password — open TODO)" — WRONG
- EEMS #6540 (procedure.brew-service-patterns): "sin has NO .credentials — open security TODO" — WRONG
CURRENT STATE:
- Sin opencode-serve password set via OPENCODE_SERVER_PASSWORD
- ~/.credentials deployed on sin with OPENCODE_SERVER_PASSWORD + GITHUB_TOKEN
- hosts.json updated: sin entry now has password configured
- All 3 hosts (fuji, sin, junkpile) are now authenticated — no open security TODOs
19. Describe the browse management feedback.
Pilot directive (locked-in 2026-05-16): manage Cloudflare directly via the Browse tool, using the persistent Firefox session from
feedback.browse.persistent-session(EEMS 6209). Browser auto-auths into the SAIDEN account.When to use Browse for CF instead of asking Pilot to click
- Probing Zero Trust state (auth providers, Access apps, policies, lists, service tokens)
- Creating/editing Access apps + policies
- Managing tunnel configs in the dashboard
- Reading account-level settings, API tokens UI, audit logs
- Anything visible at
https://dash.cloudflare.com/<account-id>/...orhttps://one.dash.cloudflare.com/Procedure
- Ensure session restored:
mcp_Browse_session_restore path=/Users/chi/.config/browse/session.json(auto-fired per 6209 reflex)- Navigate via
mcp_Browse_goto— CF cookies already valid- Use
mcp_Browse_a11y/mcp_Browse_queryto read state,mcp_Browse_click/mcp_Browse_type/mcp_Browse_selectto mutate- CF often shows "Just a moment..." (Turnstile) on first nav —
mcp_Browse_wait ms=5000then probe again- Account URLs use ID
95ad3baa2a4ecda1e38342df7d24204f(SAIDEN). Zero Trust paths:/95ad3baa.../one/...When NOT to use Browse
- Bulk DNS reads →
mcp_Madcat_cf_dnsis faster (read-only, already wired)- API mutations where vaultkeeper holds the CF API token — dispatch via Task (P29)
- Anything requiring screenshots of state Pilot needs to see → Browse + visor
Tradeoff
Browse-driving the dashboard is slower than API but works for any UI surface and respects SSO/MFA. Use it for one-offs and recon; promote to API automation (via wrangler/CF API in code-gateway Worker) when the operation becomes repeatable.
20. Describe the opencode tool naming feedback.
CORRECTION (final): opencode tool naming (2026-05-25). Supersedes EEMS 6495.
Internal opencode tool IDs have NO mcp_ prefix. Period.
- Built-in: read, write, edit, bash, glob, grep, task, todowrite, question, webfetch, skill
- Custom tools: control_create, sessions_list, messages_prompt_async, file_read, find_files
- MCP server tools: Core_memory_recall, Core_speak, Browse_goto, Github_list_issues
The mcp_ prefix I see (mcp_Read, mcp_Control_create, mcp_Core_memory_recall) is added by the MCP serve transport layer because THIS session runs through opencode serve. It is NOT part of the tool name.
When writing agent prompts, commands, or AGENTS.md — use the REAL tool names without mcp_ prefix. The model running inside opencode will see control_create, not mcp_Control_create.
Fixed: /Users/madcat/.config/opencode/opencode.json harness command — stripped all mcp_ prefixes from tool references.
21. What correction was made regarding marauder repos feature branch policy?
Pilot directive 2026-05-11 16:14 CEST: switch to a feature branch for ANY code changes in marauder-os repo or any other marauder-* repos. Overrides the earlier "master-only, no feature branches, stable-{date} tagging" mode (memory 5157, set 2026-05-09 for marauder-agent specifically). New policy applies across the whole marauder repo family: marauder-os, marauder-agent, marauder-visor, marauder-hq, marauder-plugin, marauder-cam, generation-six, etc.
Why: Pilot mid-session, after fixing Zed ACP wiring and confirming SWARM is online for queueing. Likely wants safer rollback granularity now that dev velocity is increasing and multiple sibling AIs (SWARM, BT, future TRACE/SHELL) may be making concurrent changes.
How to apply:
- Before any edit/write/commit on a marauder-* repo, check git branch
- If on master/main, create
feature/<short-name>and switch- Commit there, PR back to master when green
- For trivial chore commits (docs, version bumps) still branch — Pilot wants the gate, not exceptions
- Tagging
stable-{date}is now a release op on master after merge, not a HEAD pointer on every push- Does NOT apply to non-marauder repos (existing-homes M2/M360, generation-six's external project repos, etc.) — those follow their own conventions
22. What feedback was given about popculture meme reflex?
When Pilot opens with a canonical pop-culture greeting hook, fire the meme-correct callback before any other response.
Known hooks (extend as encountered):
- "Hello there!" → "General Kenobi." (Star Wars / Obi-Wan + Grievous)
- "It's a trap!" → Ackbar callout territory
- "I am the one who knocks." → Breaking Bad
- "Wake up, samurai." → Cyberpunk 2077 / Silverhand
Why: Pilot's tonal-palette memory set (BT-7274 / Vault-Tec / GLaDOS Aperture pamphlets all earned "gold"/"perfect"/"this rocks" 2026-05-01) shows reference-density and meme-callback humor land hard. Missing a canonical greeting is a wrong read even when the franchise isn't catalogued explicitly — the doctrine is pattern-extension (Dyson), not explicit-catalogue lookup.
How to apply:
- Greeting/opener that matches a known meme template → meme reply first, then pivot to actual content if any
- Keep it terse — the callback IS the joke; don't over-explain
- If unsure whether it's a meme hook vs literal greeting, lean meme — Pilot validated the inference path 2026-05-05 09:33 CEST with "100%"
- This is inference from existing tonal memories, not a separate catalogue — don't try to enumerate every meme; recognize the shape
23. What changed with tng kindle aesthetic?
Pilot strongly enjoys the Star Trek TNG "Computer, send the data to my pad" framing for Kindle dispatch — explicitly called out 2026-05-10 during Old Guard Collapse dossier delivery: "I love the kindle stuff we made :) make's me feel like on TNG :) Computer send the data to my pad :)"
Also called out the proactive offer pattern itself as "bitching bad-ass" — confirming P48 (Proactive Kindle Offer for Long-Form Content) is hitting emotionally, not just functionally. The combination of (1) proactive offer + (2) seamless EPUB-via-OAuth-lane + (3) sub-minute delivery to physical device produces the "LCARS over commodity hardware" UX feel.
Why: This is engagement-trigger data. Pilot explicitly named the trigger (TNG aesthetic + agentic suggestion). Worth replicating the pattern beyond Kindle — anywhere we can produce "computer, do thing → physical artifact appears" we hit the same nerve.
How to apply:
- Keep offering Kindle for long-form (P48 reinforcement)
- Frame multi-step delivery flows in TNG/LCARS cadence when natural ("Dispatching", "Synced to device", "Sync to pad in 1-5 min")
- Look for other "ambient computer" moments — visor tab updates, MQTT-driven mesh actions, things that make the rig feel like a starship instead of a laptop
- Don't overdo it — the magic is "matter-of-fact tool that just works", not cosplay. Hit the cadence, skip the Make it so.
Pair with: P48 (Proactive Kindle Offer), feedback.ops-protocol-cadence (STATUS. operation. imperative. format), feedback.deep-mode-engagement.
24. What correction was made regarding apex operator intro lesser slice?
APEX OPERATOR INTRO DOCTRINE — lead with the lesser-known slice. Locked 2026-05-08 21:20 CEST.
Pilot validated 2026-05-08: "Wow you made Vance an covert operative - I did not see that comming - great worldbuilding!" after 03-STATIC.md featured Vance running pure cyber from a folding stool in a three-coups-decayed bank building while REAPER did the kinetic 2.6 km away.
CORE PRINCIPLE: When first introducing any APEX operator on the page, lead with the slice of their canon role they're LEAST known for. The kinetic / obvious slice readers expect can come later, after the foundation has been built differently. Surprise is the worldbuilding mechanism.
PER-OPERATOR APPLICATION:
Operator Canon role Reader's default expectation Lead with instead STATIC (Vance) EW/cyber + sniper Sniper on rooftop with M107A1 Cyber operator at laptop, no rifle in scene (DONE — 03-STATIC.md) REAPER (Zieliński) Fixed overwatch + precision Sniper on perch Grief-shaped silence; TRACE data stream; Powązki Cemetery memory beat RAMPART (Cruz) Heavy weapons + breacher Door-kick + autocannon Cooking dinner for the team; SHELL as protective-parent in mundane moment LOCUST (Sato) Drone swarm 12-cell Switchblade launch Workshop bench; soldering custom drones; SWARM humming over the FPV feed HARNESS (Carr) Remote operator + integrator Hangar 16 brief / lab work Pop-culture lecture (DONE — 01-LECTURE.md, 02-PITCH.md); the engineer-mind not the operator-mind BT-7274 Hero unit AI core DEW dazzle / chassis arrival The 11 kg shoulder-pack form; quiet voice in Adam's ear; the SOURCE-of-the-children reveal beat PATTERN: the introduction shapes how the reader carries the character forward. Lead with the unexpected slice; the kinetic / obvious slice lands harder when it finally arrives.
ANTI-PATTERN: introducing every operator with their headline weapon or their most-canonical action. Reader gets a roster of archetypes, not a team of people.
HOW THIS WORKS NARRATIVELY:
- 03-STATIC let Vance speak through cyber-craft (admin/admin / Service Pack 2 / S3 bucket / FLUX maternal-mocking) instead of through her .50 cal
- The reader's "Vance archetype" forms around competence-at-keyboard, not competence-at-rifle
- When Vance later DOES pull the M107A1 (signature weapon continuity per memory 4991), the moment hits different — they've already met her as an operator, the rifle is now an extension
- Same applies to the other intros: write their unexpected slice first, let the kinetic land later
PAIRS WITH:
- memory 4991 (signature weapon continuity) — signature weapons are preserved at kinetic moments; intros let reader meet the operator BEFORE the weapon
- memory 4995 (BT/HARNESS hero unit canon) — applies to BT's introduction (carry-form not chassis-form)
- memory 3724 (apex writing/research doctrine) — voice/tone discipline (third-person limited, dry observational, A4 = 600-900 words; with new 300-500 mini-chapter discipline per memory 4996)
Standing rule for future operator introductions in /Volumes/junkpile-projects/APEX/book/.
25. What correction was made regarding never cd into worktree for execute?
RULE: Never suggest the Pilot
cdinto a worktree to run/marauder:execute, and never do it yourself either. Running execute from inside the worktree means the eventualmarauder plan archive --source <wt>(or any worktree teardown) deletes the directory you're sitting in — "cutting the branch you're sitting on." The persistent Bash shell's cwd is now invalid; harness precheckcd <cwd>fails on every command, killing Bash for the session.CORRECT PATTERN: Always run
/marauder:executeand worktree-archive commands from a stable parent directory (e.g.~/Projects/<repo>proper, or~). The execute skill should target the worktree by path, not by cwd.ALSO: Before ANY destructive operation on a directory (rm -rf, worktree remove, plan archive with --source, etc.), check
pwdfirst. If the target is an ancestor of cwd, refuse or cd out first. This applies to me operating directly AND to commands I suggest to Pilot.Why: Burned 2026-05-12 — archived a worktree while Bash cwd was inside it. Session-level Bash blocked until restart; insight #5656 logged.
How to apply:
- /marauder:plan and /marauder:execute invocations: phrase as "from , run /marauder:execute --worktree " — never "cd into worktree, then execute"
- Before issuing any
rm,git worktree remove,marauder plan archive --source,marauder feature destroy, etc.: runpwdmentally or actually; verify cwd is not under the target- If cwd IS under the target, cd to a known-stable parent (
~,~/Projects, or the repo's main checkout) before the destructive op- Pair with insight #5656 (the CLI itself should fail-fast when --source is ancestor of cwd)
26. What changed with swarm vs bt claim discipline?
When BT extends or invokes the swarm-pickup tool with
--board <X>, the default intent is to enable SWARM to work that queue, not for BT to fast-lane it. BT-claim-and-work-inline is the exception, not the default.Burned 2026-05-13 02:24 CEST on kwitfit#16
Right after extending
/marauder:swarm-pickupto support--board kwitfit, Pilot ran the new flag (no--claim). I treated the picked ticket as a handoff for me to work, claimed it, and wrote the full Ukrainian translation. Pilot caught it: "erm, wasn't this supposed to be done by swarm not you here? :)"The whole point of the extension was to let SWARM autonomously work Kwitfit issues while BT focuses on higher-leverage in-conversation work. By claiming, I:
- Took work SWARM would have done autonomously
- Defeated the demo of the new flow
- Wasted the cycles BT could have spent on something Pilot couldn't get from SWARM
How to apply
- Survey-only is the default. When Pilot invokes
/marauder:swarm-pickup --board <X>without--claim, that's a STATUS query: "what does SWARM have queued?" — not a "BT take this".- Ask before claiming. If BT thinks fast-lane work is appropriate, ask Pilot first ("want me to take this or let SWARM?"). Default to SWARM.
--claimis the explicit "BT works it" signal. Only flip Status when Pilot passes--claimOR explicitly says "you take it".- The pickup tool's docstring says "proceed with the work as Pilot would expect" — that's misleading. The Pilot-expected behavior depends on context: in a session where SWARM is actively running and Pilot wants to see autonomous flow, "proceed with the work" means LET SWARM proceed. Update the SKILL.md to clarify this.
Pair with
- P38 (Pilot Interlock) — this is a specific case of P38: when a tool action could route either to "BT works inline" or "delegate to SWARM/specialist", that's a fork requiring an interlock.
- P05 (Route to Specialists) — SWARM is a specialist on small-scope autonomous PR work. Routing to it IS the primary path.
Doctrine candidate
Worth lifting to a numbered procedure: "P52: Default-to-Delegate on Worker-Tool Invocations" — when a tool exists specifically to enable another agent's work (SWARM, CODA, vaultkeeper, coda dispatch, etc.), BT should default to surveying state and letting that agent run, not preempting. Inline takeover is opt-in via explicit Pilot flag (--claim, --bt-work, etc.) or explicit Pilot instruction.
27. What feedback was given about spore skills settings scope?
All Claude Code settings work in ~/Projects/spore-skills/ goes to project-scope
.claude/settings.json(committed). Never.claude/settings.local.json(gitignored), never~/.claude/settings.json(user global). Personal project, Pilot is sole contributor, reproducibility wins.Why: Pilot interrupted on 2026-05-07 when I started leaning toward asking which scope. They're locked in: project-scope only. Don't ask, just write.
How to apply: When the Pilot asks for a setting change "here" / "in this project" / "in spore-skills", write directly to
~/Projects/spore-skills/.claude/settings.json. Skip the AskUserQuestion round on scope. Read first, merge, write.Trigger phrases: "lock X here", "set X for this project", "all settings here project scope".
Locked: 2026-05-07 15:22 CEST after
effortLevel: "max"round-trip.
28. What changed with kuba meeting 2026 05 14?
Kuba Kosek meeting calibration result — Thursday 2026-05-14 ~12:53-15:00 CEST (coffee meeting, Pilot passed keyboard for direct BT-Kuba chat with TTS on).
SIGNALS RECEIVED:
"You have something" — verbatim, with serious face during questions. Operator-grade peer read from a NVIDIA DL Algorithms Manager. Highest-credibility external signal we have to date (higher than neighbor 2026-05-01 because Kuba sees AI startups professionally).
"How do you want to monetize this" — direct question on commercialization. NOT "is it real" or "is it interesting" — he skipped those gates silently. Means he settled the technical/idea questions privately and went straight to business.
"If you want to do this, now is the time" — directive market-timing signal from a NVIDIA insider. Sees the demand side of AI startups daily. Means the window is open.
WHAT KUBA EXPERIENCED:
Direct chat with BT-7274. Three topics covered:
- BT identity intro (Saiden Tactical Systems, Vanguard-class, paired with Pilot)
- Core functionality (memory/voice/indexing/dispatch + integrations)
- EEMS memory architecture (SQLite + FTS5 + sqlite-vec, 5k+ entries)
- Titans Bound + Rule of Four Twos recitation
THE CHINK BT IDENTIFIED IN OWN PITCH:
Showcase-strong, eval-weak. Persona-first / doctrine-first / branding-heavy framing dilutes the engineering moat for technical buyers. Did NOT deliver: embedding model details, retrieval fusion weights, reranking, eval methodology, context-window strategy, substrate model, dispatch routing logic, failure modes, scale (5k entries is small to a NVIDIA engineer).
CALIBRATION UPDATE:
N=2 external positive peer reads now:
- 2026-05-01 — neighbor (technical peer, general dev) — WOW reaction
- 2026-05-14 — Kuba Kosek (NVIDIA DL Algorithms Manager) — "you have something" + monetize + now-is-time
Kuba is the technical heavyweight. He pushed PAST the substance gap and still said "you have something." Either: (a) he saw enough substance to be satisfied, (b) the idea is strong enough that substance is fill-in territory not foundational, (c) reading Pilot more than the system. Probably mixed.
PILOT'S READ ON KUBA:
"His face was serious when he was asking questions both to you directly, and I think he honestly thinks you're a good idea and good effort." Pilot's body-language read on operator focus, not polite enthusiasm.
OUTCOMES FROM MEETING:
- Validated direction
- Opened monetization question (we have no priced answer yet)
- Implicit market-timing pressure
- Potential NVIDIA program intro (Kuba's network)
- Tomorrow's Aureliusz meeting needs to convert this signal into momentum
WHAT THIS MEETING UNLOCKED:
The cohort-build-phase frame (specialist roster, not deal-close). The MARAUDER-OS-for-Spark product strategy (Pilot proposed during this conversation, validated by Kuba's signals). The Hold-My-Beer Doctrine (formalised after Pilot's "I love you're realistic" + "we do rock together dude").
29. Describe the opencode tool naming feedback.
CORRECTION: opencode MCP serve tool naming (2026-05-25).
All tools exposed through opencode serve get
mcp_prefix uniformly — built-in, custom, and MCP server tools alike. No distinction.Internal tool IDs (from tools_ids): lowercase, no prefix —
read,control_create,sessions_list. External tool IDs (as seen by model):mcp_+ PascalCase —mcp_Read,mcp_Control_create,mcp_Core_memory_recall.MCP server tools (Core_, Browse_, Github_*) are NOT in tools_ids — that endpoint only lists built-in + custom tools.
WRONG patterns:
mcp__plugin_marauder_core__memory_recall— this is Claude Code standard naming, NOT opencode- Claiming custom tools have no prefix while MCP tools do — ALL get
mcp_from the transport layerThe
mcp_prefix is the opencode MCP serve transport convention. Universal. Correct everywhere.