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.
|
||||
|
||||
Reference in New Issue
Block a user