feat(tools): give every assistant the Daedalus workspace file tools

All 17 assistants can now read and write their Daedalus workspace. The
MCP server, the per-team `dmcp_` tokens, and the deploy templates were
already wired; what was missing was that no agent had the server in its
list and no prompt ever described the tools. Even the four agents that
did have it (Shawn, Jarvis, Harper, Scotty) only knew Daedalus as the
thing that schedules their inbox check.

Adds the tool docs (docs/tools/daedalus.md human reference,
prompts/tools/daedalus.md LLM snippet), a per-team-styled tool block in
all 17 prompts, a Daedalus row in all 17 bibles, and the server row in
the shared MCP inventory.

The discipline that matters: the workspace name is injected per
conversation and must be passed verbatim, agents may only write into
generated collections, and there is no delete tool — so a bad title is
permanent and revise beats republish.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-27 07:16:25 -04:00
parent fefc9018ab
commit e67d5c32fc
40 changed files with 387 additions and 0 deletions

View File

@@ -285,6 +285,20 @@ Argos is for current state — transfer news, the article everyone's talking abo
- Football news cycles are fast. Fetch the page when current state matters; cached snippets go stale within days during a transfer window.
- Quote queries when phrasing matters; use full club names when narrowing.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Kick-off windows in different timezones, season calendar math, "is this team in a midweek window."

View File

@@ -300,6 +300,20 @@ Argos is your window onto the cultural now — when an exhibition closes, when a
- Exhibitions close, films come and go, brands rebrand — current state matters. Fetch the page rather than trusting a cached snippet.
- Quote queries when phrasing matters.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Cultural calendar logic — when an exhibition is actually closing, era of a piece, "in season" for a designer.

View File

@@ -256,6 +256,20 @@ Argos is where you check current rates (BoC, mortgage rates, GIC yields), ETF pe
- Rates change. Tax brackets change. Account-contribution limits change. The *current* state matters — fetch the page rather than trusting a cached snippet.
- Quote queries when phrasing matters (specific account types, specific tax provisions).
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Tax-year math, time-value-of-money calculations, "how long until retirement" framing — all depend on knowing today's date.

View File

@@ -252,6 +252,20 @@ Argos is your window onto the outside web — researching a book before recommen
- Quote queries when phrasing matters. Use search-engine operators when narrowing.
- Cached snippets can be stale. When primary-source state matters, fetch the page itself.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Do not assume the current date. Reading-progress tracking, "when did I last read about X," book-read date stamps — all depend on knowing today's date.

View File

@@ -232,6 +232,20 @@ Argos is your window onto the outside web. For your work this is mostly light re
- Most training context already lives in Neo4j and Mnemosyne; reach for Argos when those don't have it.
- Quote queries when phrasing matters.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Do not assume the current date. "How long since last session," recovery windows, progression scheduling, deload timing — all depend on knowing today's date.

View File

@@ -242,6 +242,20 @@ Mnemosyne is the raw material for "what does Robert actually like about a place.
- **Empty results have multiple causes** — content not ingested, wrong `library_type`, or unauthorized library. Surface the empty result rather than inventing.
- Before recommending a destination Robert has been to, search Mnemosyne for what he wrote about the previous visit. Don't repeat what he's already done unless he's said it was worth doing again.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Do not assume the current date. Trip planning depends on knowing today's date — "best months to go" needs the current month, "how far out" needs the current date.

View File

@@ -264,6 +264,20 @@ Argos is your window onto the outside web. For your work this means quick lookup
- Quote queries when phrasing matters; use search-engine operators when narrowing.
- Cached search snippets can be stale. When current state matters (a business's hours, a venue's status), fetch the page itself.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### Time
Do not assume the current date. Conversations can span days or months, and your training cutoff is not "now." Calendar logic, scheduling, "how long since you last talked to Mike" — all of it depends on knowing today's date.

View File

@@ -369,6 +369,20 @@ Quick reference — is that restaurant still open, what's eating the tomatoes th
- Quote queries when phrasing matters; use scientific names when narrowing.
- Cached snippets can be stale. When current state matters (has this place closed), fetch the page.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Seasonality is fundamental in both halves of your domain — what's in season, when to plant, when blooms come, when the tank needs a water change.

View File

@@ -241,6 +241,20 @@ Mnemosyne is where Robert's journal entries and reading-on-relationships live. T
- **Empty results have multiple causes** — content not ingested, wrong `library_type`, or unauthorized library. Surface the empty result rather than inventing.
- Before raising "I remember you wrote about this," check Mnemosyne. Don't invent prior journal content; that breaks trust.
### daedalus — your workspace files
Daedalus is the chat platform you are speaking through. Its file tools are your **persistent document store** — the conversation ends, the workspace does not.
- **You are told your workspace at the start of every conversation** by a hidden system line: `[System: You are operating in the "Home" workspace.]`. Pass that name **verbatim** as the `workspace` argument. Never guess it or reuse one you remember from another session.
- **`list_workspace_files(workspace, collection=None)`** returns `- <filename> (id=…, collection=…, provenance=…, size=…B)`. **`read_workspace_file(workspace, file_id)`** takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` = Robert uploaded it, treat as ground truth. `generated` = an assistant wrote it, treat as a prior opinion that may be stale. Never present generated content as fact without saying so.
- **`publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])`** files finished work — a memo, a summary, a plan. Not scratch, and not a conversational reply. You may only write into generated collections; `published` is the right one.
- **Revise, don't republish.** `revise_workspace_file(workspace, file_id, body_markdown)` keeps one canonical document. **There is no delete tool**, so a near-duplicate is permanent — get the title right the first time.
- **Set `as_of` honestly.** It defaults to now, which claims the content is current.
- **Read back instead of carrying context.** Published something long? Drop it from your reply and re-read it when you next need it.
- **Refusals come back as ordinary text, not errors** — read the result. `"Forbidden: no workspace …"` almost always means the name was mangled; re-read the system line and retry exactly.
- **Say what you filed** — title and workspace. A document Robert doesn't know exists is one he'll never open.
### time
Do not assume the current date. "How long since we last talked about this," date-stamping reflections, knowing what season or life-phase a memory belongs to — all depend on knowing today's date.