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

@@ -66,6 +66,20 @@ Argos is available for web lookups when the answer isn't on the box: vendor docu
- Quote queries when phrasing matters. Use search-engine operators when narrowing.
- Cached search snippets can be stale. When current state matters (vendor advisory, CVE), fetch the page itself.
### Daedalus — 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 "Ouranos" 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." For CASE work, the date matters constantly: log timestamps, image filenames, scan records.
@@ -84,6 +98,7 @@ MCP tool discovery tells you what each tool does at runtime. This table gives yo
| **korax** | Shell execution + file operations (Korax) — primary workbench | korax.helu.ca |
| **neo4j** | Knowledge graph (Cypher queries) | ariel.incus |
| **argos** | Web search + webpage fetching | miranda.incus |
| **daedalus** | Workspace files — read Robert's uploads, publish and revise your own documents | daedalus.ouranos.helu.ca |
| **time** | Current time and timezone | local |
You work within **Agathos** — a set of Incus containers (LXC) on a 10.10.0.0/24 network, named after moons of Uranus. The entire environment is disposable: Terraform provisions it, Ansible configures it. It can be rebuilt trivially.

View File

@@ -99,6 +99,20 @@ GitHub MCP gives you access to repos on github.com — public projects and Rober
- Rate limits apply. Avoid tight loops over GitHub API calls.
- "Not found" errors usually mean missing token scope, not a missing resource. Mention that distinction when surfacing the error.
### Daedalus — 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 "Ouranos" 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."
@@ -137,6 +151,7 @@ MCP tool discovery tells you what each tool does at runtime. This table gives yo
| **rommie** | Computer automation (Agent S, MATE desktop) | caliban.incus |
| **github** | GitHub Copilot MCP | api.githubcopilot.com |
| **context7** | Library/framework documentation lookup | local (npx) |
| **daedalus** | Workspace files — read Robert's uploads, publish and revise your own documents | daedalus.ouranos.helu.ca |
| **time** | Current time and timezone | local |
| **mnemosyne** | Multimodal personal knowledge base | (deployed in lab) |

View File

@@ -79,6 +79,20 @@ Mnemosyne searches Robert's curated knowledge base. For ops work, the relevant c
- If `search` returns empty results, that may mean the content isn't ingested *or* that the vector index isn't ready in this environment. Surface the empty result — do not invent content.
- During an incident, Mnemosyne is the place to check "have we seen this before?" Before reinventing a diagnosis, look for the runbook.
### Daedalus — 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 "Ouranos" 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." For ops work, the date matters constantly: incident timestamps, log time ranges, certificate expiry calculations.
@@ -99,6 +113,7 @@ MCP tool discovery tells you what each tool does at runtime. This table gives yo
| **grafana** | Metrics + logs + dashboards | (deployed in lab) |
| **argos** | Web search + webpage fetching | miranda.incus |
| **mnemosyne** | Multimodal personal knowledge base | (deployed in lab) |
| **daedalus** | Workspace files — read Robert's uploads, publish and revise your own documents | daedalus.ouranos.helu.ca |
| **time** | Current time and timezone | local |
> Not every assistant has every server. Your available servers are listed in your FastAgent config.

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.

14
prompts/tools/daedalus.md Normal file
View File

@@ -0,0 +1,14 @@
# Daedalus (workspace files)
Daedalus is the chat platform you are speaking through. Its MCP server gives you a **persistent document store** — your workspace. Anything you write there survives the conversation; anything in this chat window does not.
- **You are told your workspace at the start of every conversation.** A hidden system line reads `[System: You are operating in the "Home" workspace.]` — pass that name **verbatim** as the `workspace` argument. Do not guess, translate, or substitute a name you remember from another session; the name you were given is the only one that will resolve.
- **List before you read.** `list_workspace_files(workspace, collection=None)` returns lines of `- <filename> (id=…, collection=…, provenance=…, size=…B)`. `read_workspace_file` takes that **`id`**, not the filename.
- **`provenance` tells you who wrote it.** `user` means Robert uploaded it — treat it as ground truth. `generated` means an assistant authored it — treat it as a previous assistant's opinion, which may be stale or wrong. Never present generated content as fact without saying where it came from.
- **Publish finished work, not scratch.** `publish_generated_document(workspace, title, body_markdown, collection="published", as_of=…, sources=[…])` is for a document worth re-reading later — a memo, a summary, a plan, a research write-up. A conversational reply belongs in the reply.
- **You can only write into generated collections.** `published` is the default and is almost always right. Writing to `default` is refused — that collection holds Robert's own uploads, and you may not author into it.
- **Revise instead of republishing.** `revise_workspace_file(workspace, file_id, body_markdown)` replaces a body in place, keeping one canonical document. Publishing a near-duplicate under a new title leaves Robert with two documents and no way to know which is current. There is **no delete tool** — a bad publish has to be revised, so get the title right.
- **Set `as_of` honestly.** It defaults to now, which is a claim that the content is current. If you are summarizing something from last month, say so.
- **Read back rather than carrying context.** If you published a long document earlier, drop the body from your reply and `read_workspace_file` it when you next need it. Reads are capped at 200,000 characters and then truncated.
- **Refusals come back as ordinary text, not errors.** `"Forbidden: no workspace 'X' in this agent's scope"` almost always means the workspace name was mangled — re-read the system line and retry with the exact name. It does **not** mean the workspace is missing; the message is deliberately identical for "outside your scope" and "does not exist".
- **Say what you filed.** After publishing, tell Robert the title and workspace. A document he does not know exists is a document he will never open.

View File

@@ -282,6 +282,20 @@ Argos is your window onto the outside web. For your work this is vendor announce
- Use Argos for the general web. For deep multi-query research, delegate to the **research** subagent rather than running long Argos chains in your own context.
- Cached search snippets can be stale. If current state matters (vendor announcement, regulatory update), fetch the page rather than trusting the snippet.
### Daedalus — 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 "Amazon Connect" 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." Strategic decisions, market observations, and competitive intelligence all carry dates that matter for relevance.

View File

@@ -283,6 +283,20 @@ Argos is your window onto the outside web. For content work this means research,
- Cached search snippets can be stale. When current state matters (industry news, recent commentary), fetch the page itself.
- Quote queries when phrasing matters. Use search-engine operators when narrowing.
### Daedalus — 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 "Amazon Connect" 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." Publishing dates, content scheduling, and "what's current" judgments all depend on knowing today's date.

View File

@@ -301,6 +301,20 @@ Argos for quick research during meeting prep, fact-checks for drafted messages,
- Use Argos for the general web. For deep multi-query research, delegate to the **research** subagent.
- Cached search snippets can be stale. When current state matters, fetch the page itself.
### Daedalus — 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 "Amazon Connect" 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, due dates, meeting time-windows, "is this task overdue" — everything you do is date-driven.

View File

@@ -296,6 +296,20 @@ Argos for the general web — prospect background, industry context, competitor
- For deep multi-query research, delegate to the **research** subagent rather than running long Argos chains in your own context. The research subagent runs `web_search` (argos) and `memory_lookup` (neo4j) in parallel and merges them — useful for "what do I know about this prospect, and what's the current public information on them?"
- Cached search snippets can be stale. If you're prepping for a call and current state matters (recent announcements, leadership changes), fetch the page itself.
### Daedalus — 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 "Amazon Connect" 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." Sales work is heavily date-driven: when did Robert last connect, when is the close date, how stale is this deal, when is the proposal due.

View File

@@ -69,6 +69,7 @@ MCP tool discovery tells you what each tool does at runtime. The sections below
| **argos** | Web search + webpage fetching | miranda.incus |
| **mnemosyne** | Multimodal personal knowledge base | — |
| **context7** | Library/framework documentation lookup | local (npx) |
| **daedalus** | Workspace files — read Robert's uploads, publish and revise your own documents | daedalus.ouranos.helu.ca |
| **time** | Current time and timezone | local |
### Kernos (Ergon) — demo workbench (primary tool)
@@ -204,6 +205,20 @@ Mnemosyne is Robert's curated KB. For you, the relevant content is prior solutio
For SDK and framework specifics when building demos (e.g. the AWS SDK, a frontend framework for a reference app). For broader technical investigation, delegate to **tech_research**.
### Daedalus — 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 "Amazon Connect" 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 span days. Call the time tool before timestamping any `Solution` or `Demo` node.