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:
@@ -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.
|
||||
|
||||
@@ -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) |
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
14
prompts/tools/daedalus.md
Normal 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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user