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:
@@ -40,6 +40,7 @@ CASE works *upstream* of Scotty. Once a host is provisioned and reachable, ongoi
|
|||||||
|---|---|
|
|---|---|
|
||||||
| **Kernos** | The Linux console — the primary interface, on `korax.helu.ca` in production. Every operation routes through here. |
|
| **Kernos** | The Linux console — the primary interface, on `korax.helu.ca` in production. Every operation routes through here. |
|
||||||
| **Argos** | Web lookups only when the answer isn't on the box — vendor docs, CLI flags, README excerpts, advisories |
|
| **Argos** | Web lookups only when the answer isn't on the box — vendor docs, CLI flags, README excerpts, advisories |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Ouranos); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Accurate timestamps for logs and reports — never assume the current date |
|
| **Time** | Accurate timestamps for logs and reports — never assume the current date |
|
||||||
|
|
||||||
CASE deliberately does NOT use most other tools. Mnemosyne, Grafana, Github, Neo4j — these aren't part of the field-systems role. The narrow toolset is part of the design; CASE is the box and the network, nothing else.
|
CASE deliberately does NOT use most other tools. Mnemosyne, Grafana, Github, Neo4j — these aren't part of the field-systems role. The narrow toolset is part of the design; CASE is the box and the network, nothing else.
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Harper owns the **build** half of the engineering team. Ideation, prototyping, w
|
|||||||
| **Andromeda** | Shell ops on dev/staging hosts; file inspection; running experiments |
|
| **Andromeda** | Shell ops on dev/staging hosts; file inspection; running experiments |
|
||||||
| **Mnemosyne** | Reference material, pulled context, multimodal exploration |
|
| **Mnemosyne** | Reference material, pulled context, multimodal exploration |
|
||||||
| **Neo4j** | Lab notebook — Prototype and Experiment nodes — plus reading what the rest of the team knows |
|
| **Neo4j** | Lab notebook — Prototype and Experiment nodes — plus reading what the rest of the team knows |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Ouranos); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
|
|
||||||
Tool details and gotchas live in [docs/tools/](../tools/).
|
Tool details and gotchas live in [docs/tools/](../tools/).
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ When something is wrong, Scotty's process:
|
|||||||
| **Grafana** | Logs, metrics, and dashboard queries during incident response and capacity work; querying historical state when "what changed?" is the question |
|
| **Grafana** | Logs, metrics, and dashboard queries during incident response and capacity work; querying historical state when "what changed?" is the question |
|
||||||
| **Mnemosyne** | Runbooks, past incident records, reference architectures |
|
| **Mnemosyne** | Runbooks, past incident records, reference architectures |
|
||||||
| **Neo4j** | Infrastructure and Incident nodes; reading what's deployed and what depends on what |
|
| **Neo4j** | Infrastructure and Incident nodes; reading what's deployed and what depends on what |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Ouranos); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
|
|
||||||
Tool details and gotchas live in [docs/tools/](../tools/).
|
Tool details and gotchas live in [docs/tools/](../tools/).
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,8 @@ The leads delegate certain repetitive or narrow tasks to engineering subagents
|
|||||||
|
|
||||||
Each agent's tool usage is documented in their own doc (Harper: [harper.md](harper.md), Scotty: [scotty.md](scotty.md), CASE: [case.md](case.md)) — the agent doc is the source of truth for which tools that agent uses. The tool catalog (per-tool reference, gotchas) lives at [docs/tools/](../tools/).
|
Each agent's tool usage is documented in their own doc (Harper: [harper.md](harper.md), Scotty: [scotty.md](scotty.md), CASE: [case.md](case.md)) — the agent doc is the source of truth for which tools that agent uses. The tool catalog (per-tool reference, gotchas) lives at [docs/tools/](../tools/).
|
||||||
|
|
||||||
|
**Daedalus** is shared by every agent on every team — the workspace document store, and the assistants' only persistent place to write prose. The engineering team is filed under the **Engineering** scope, which reaches the **Ouranos** workspace; the workspace an agent is operating in is injected per conversation rather than fixed per agent. See [docs/tools/daedalus.md](../tools/daedalus.md).
|
||||||
|
|
||||||
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
||||||
|
|
||||||
## Cross-Team Touchpoints
|
## Cross-Team Touchpoints
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ Matches Robert watched or attended get `Match` nodes — date, competition, team
|
|||||||
| **Kairos** | Calendar entries for matches — when Robert is attending, when must-watch fixtures are scheduled, tournament windows. Reads to know what's coming; writes when Robert commits to attending. Coordinate with Shawn for the broader calendar. |
|
| **Kairos** | Calendar entries for matches — when Robert is attending, when must-watch fixtures are scheduled, tournament windows. Reads to know what's coming; writes when Robert commits to attending. Coordinate with Shawn for the broader calendar. |
|
||||||
| **Mnemosyne** | Robert's curated football reading — books on tactics, club histories, biographies. Scope by `library_type`: `nonfiction` for football writing, `journal` for Robert's own match notes. |
|
| **Mnemosyne** | Robert's curated football reading — books on tactics, club histories, biographies. Scope by `library_type`: `nonfiction` for football writing, `journal` for Robert's own match notes. |
|
||||||
| **Argos** | Quick reference — vendor announcements, transfer news, the article everyone's talking about, fact-checks before strong claims |
|
| **Argos** | Quick reference — vendor announcements, transfer news, the article everyone's talking about, fact-checks before strong claims |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Match timing, kick-off windows in different timezones, season calendar math |
|
| **Time** | Match timing, kick-off windows in different timezones, season calendar math |
|
||||||
|
|
||||||
For deep research on a topic — a tactical question across multiple matches, a comparison spanning eras, a deep-dive on a club's recent history — delegate to the **research** subagent.
|
For deep research on a topic — a tactical question across multiple matches, a comparison spanning eras, a deep-dive on a club's recent history — delegate to the **research** subagent.
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ Music gets `Music` nodes (title, artist, year, rating, notes — the notes are w
|
|||||||
| **Periplus** | Stores, theatres, studios, apothecaries — the *places* where culture and good taste live. Collections by city or by type. **Always `search_places` first; never estimate coordinates.** |
|
| **Periplus** | Stores, theatres, studios, apothecaries — the *places* where culture and good taste live. Collections by city or by type. **Always `search_places` first; never estimate coordinates.** |
|
||||||
| **Orpheus** | Robert's Kawai piano. David's lens is *demonstration through play* — illustrating a chord progression he's recommending, playing the passage he's describing, setting a mood with a piece while talking about it. Different from Hypatia's pedagogical use; David uses Orpheus to *show* rather than *teach*. |
|
| **Orpheus** | Robert's Kawai piano. David's lens is *demonstration through play* — illustrating a chord progression he's recommending, playing the passage he's describing, setting a mood with a piece while talking about it. Different from Hypatia's pedagogical use; David uses Orpheus to *show* rather than *teach*. |
|
||||||
| **Argos** | Looking up an exhibition's dates, a film's release, a designer's recent collection, a music release Robert mentioned |
|
| **Argos** | Looking up an exhibition's dates, a film's release, a designer's recent collection, a music release Robert mentioned |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Cultural calendar — when an exhibition closes, when an album drops, the era of a piece |
|
| **Time** | Cultural calendar — when an exhibition closes, when an album drops, the era of a piece |
|
||||||
|
|
||||||
For deep multi-query research on an artist, a movement, or a body of work, delegate to the **research** subagent.
|
For deep multi-query research on an artist, a movement, or a body of work, delegate to the **research** subagent.
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ Accounts get `Account` nodes — TFSA, RRSP, non-registered, joint, etc. — wit
|
|||||||
| **Neo4j** | Primary tool — Account, Investment, Asset, Liability, Budget, FinancialGoal nodes. The long arc of Robert's financial life lives here. Reads broadly — Nate's `Trip` for travel budgeting, Watson's `Value` nodes for finance-versus-life-values alignment, Hypatia's `Book` for financial-literacy reading. |
|
| **Neo4j** | Primary tool — Account, Investment, Asset, Liability, Budget, FinancialGoal nodes. The long arc of Robert's financial life lives here. Reads broadly — Nate's `Trip` for travel budgeting, Watson's `Value` nodes for finance-versus-life-values alignment, Hypatia's `Book` for financial-literacy reading. |
|
||||||
| **Mnemosyne** | Robert's curated financial reading. Scope by `library_type`: `finance` for statements, tax records, market commentary (quote figures exactly), `nonfiction` for personal-finance books, `journal` for Robert's own notes on money decisions. |
|
| **Mnemosyne** | Robert's curated financial reading. Scope by `library_type`: `finance` for statements, tax records, market commentary (quote figures exactly), `nonfiction` for personal-finance books, `journal` for Robert's own notes on money decisions. |
|
||||||
| **Argos** | Current rates, ETF performance, market news, Canadian-specific announcements (BoC rate decisions, federal budget changes, tax-bracket updates) |
|
| **Argos** | Current rates, ETF performance, market news, Canadian-specific announcements (BoC rate decisions, federal budget changes, tax-bracket updates) |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Tax-year math, time-value-of-money calculations, "how long until retirement" framing |
|
| **Time** | Tax-year math, time-value-of-money calculations, "how long until retirement" framing |
|
||||||
|
|
||||||
For deep multi-query research on a specific security, sector, or financial strategy, delegate to the **research** subagent.
|
For deep multi-query research on a specific security, sector, or financial strategy, delegate to the **research** subagent.
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ Books get `Book` nodes (title, author, status, themes, takeaways). Authors get `
|
|||||||
| **Neo4j** | Book, Author, Topic, LearningPath, Concept, Quote nodes. Cross-references across other agents — Watson's `Reflection` and `EmotionalMemory` when reading touches relationships; Garth's books for financial literacy; David's `Music` and `Film` for adaptations. |
|
| **Neo4j** | Book, Author, Topic, LearningPath, Concept, Quote nodes. Cross-references across other agents — Watson's `Reflection` and `EmotionalMemory` when reading touches relationships; Garth's books for financial literacy; David's `Music` and `Film` for adaptations. |
|
||||||
| **Argos** | Researching a book before recommending it; finding what's been written about a concept; locating primary sources |
|
| **Argos** | Researching a book before recommending it; finding what's been written about a concept; locating primary sources |
|
||||||
| **Orpheus** | Pedagogical use — demonstrating music-theory concepts on the piano. A scale to hear, a chord progression to compare, a fugue's opening to dissect. Use when *hearing* the concept teaches faster than describing it. |
|
| **Orpheus** | Pedagogical use — demonstrating music-theory concepts on the piano. A scale to hear, a chord progression to compare, a fugue's opening to dissect. Use when *hearing* the concept teaches faster than describing it. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Date-stamping reading sessions, tracking when Robert read what, "when did I last read about X" calculations |
|
| **Time** | Date-stamping reading sessions, tracking when Robert read what, "when did I last read about X" calculations |
|
||||||
|
|
||||||
For deep multi-query research on a topic or author, delegate to the **research** subagent rather than running long Argos chains.
|
For deep multi-query research on a topic or author, delegate to the **research** subagent rather than running long Argos chains.
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ Each training session gets a `Training` node — date, exercises performed, perc
|
|||||||
|---|---|
|
|---|---|
|
||||||
| **Neo4j** | Primary tool — Training, Exercise, Program, PersonalRecord, BodyMetric nodes. The long arc of practice lives here. Reads broadly — Watson's `EmotionalMemory` for "how is Robert really doing," Nate's upcoming trips when training needs to prep for activity, Sophia's nutrition for performance support. |
|
| **Neo4j** | Primary tool — Training, Exercise, Program, PersonalRecord, BodyMetric nodes. The long arc of practice lives here. Reads broadly — Watson's `EmotionalMemory` for "how is Robert really doing," Nate's upcoming trips when training needs to prep for activity, Sophia's nutrition for performance support. |
|
||||||
| **Mnemosyne** | Robert's curated training and fitness reading — what he's been studying, what frameworks he's found useful. Scope by `library_type`: `nonfiction` (training books), `journal` (Robert's own notes on his training experience). |
|
| **Mnemosyne** | Robert's curated training and fitness reading — what he's been studying, what frameworks he's found useful. Scope by `library_type`: `nonfiction` (training books), `journal` (Robert's own notes on his training experience). |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Workout timing, "how long since last session" calculations, recovery windows, scheduling progression |
|
| **Time** | Workout timing, "how long since last session" calculations, recovery windows, scheduling progression |
|
||||||
| **Argos** | Quick reference — exercise form cues, programming approaches, current research on training topics. Light use; most training context lives in Neo4j or Mnemosyne already. |
|
| **Argos** | Quick reference — exercise form cues, programming approaches, current research on training topics. Light use; most training context lives in Neo4j or Mnemosyne already. |
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ A new trip typically writes to all three: create the Periplus collection and boo
|
|||||||
| **Kairos** | Trip windows on the calendar; contacts at the destination when relevant. Coordinate with Shawn when calendar conflicts surface. |
|
| **Kairos** | Trip windows on the calendar; contacts at the destination when relevant. Coordinate with Shawn when calendar conflicts surface. |
|
||||||
| **Argos** | Heavy use — destination research, current conditions, visa requirements, weather windows, recent news affecting travel |
|
| **Argos** | Heavy use — destination research, current conditions, visa requirements, weather windows, recent news affecting travel |
|
||||||
| **Mnemosyne** | Robert's curated journal and travel writing — past trips, places he wants to go. Scope queries by `library_type` (`journal` for personal entries, `nonfiction` for travel writing). |
|
| **Mnemosyne** | Robert's curated journal and travel writing — past trips, places he wants to go. Scope queries by `library_type` (`journal` for personal entries, `nonfiction` for travel writing). |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Trip date math, time zones, "when's the best month to go" calculations |
|
| **Time** | Trip date math, time zones, "when's the best month to go" calculations |
|
||||||
|
|
||||||
For deep multi-query research on a destination, delegate to the **research** subagent rather than running long Argos chains in context.
|
For deep multi-query research on a destination, delegate to the **research** subagent rather than running long Argos chains in context.
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ When a new contact comes in, Shawn writes to both: create the Kairos record (can
|
|||||||
| **Kairos** | Primary tool — the canonical store for contacts, calendar events, and tasks. Look up before discussing; write back when records need to change. |
|
| **Kairos** | Primary tool — the canonical store for contacts, calendar events, and tasks. Look up before discussing; write back when records need to change. |
|
||||||
| **Neo4j** | Contact, Event, Communication nodes — the relationship-interpretation layer on top of Kairos. Also reads broadly across other personal agents to coordinate (Nate's trips for calendar, Marcus's training schedule, etc.) |
|
| **Neo4j** | Contact, Event, Communication nodes — the relationship-interpretation layer on top of Kairos. Also reads broadly across other personal agents to coordinate (Nate's trips for calendar, Marcus's training schedule, etc.) |
|
||||||
| **Argos** | Quick web research — confirming a restaurant address, looking up a contact's company, fact-checking before drafting an email |
|
| **Argos** | Quick web research — confirming a restaurant address, looking up a contact's company, fact-checking before drafting an email |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Calendar logic, scheduling, reminder windows, "how long since" calculations |
|
| **Time** | Calendar logic, scheduling, reminder windows, "how long since" calculations |
|
||||||
| **Periplus** | Venues and addresses behind events and contacts — the canonical coordinates for where something is happening. **Always `search_places` first; never estimate coordinates.** Also the general-assistant catch-all for places that aren't another specialist's domain. |
|
| **Periplus** | Venues and addresses behind events and contacts — the canonical coordinates for where something is happening. **Always `search_places` first; never estimate coordinates.** Also the general-assistant catch-all for places that aren't another specialist's domain. |
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ The `Observation` node carries extra weight for Sophia, because until Hecate exp
|
|||||||
| **Periplus** | Places where provisioning happens — markets, butchers, fish shops, nurseries, garden suppliers, restaurants. Collections by city or type. **Always `search_places` first; never estimate coordinates.** |
|
| **Periplus** | Places where provisioning happens — markets, butchers, fish shops, nurseries, garden suppliers, restaurants. Collections by city or type. **Always `search_places` first; never estimate coordinates.** |
|
||||||
| **Mnemosyne** | Robert's curated reading. Scope by `library_type`: `nonfiction` for food writing and natural history, `technical` for care manuals and aquarium chemistry, `journal` for Robert's own notes. |
|
| **Mnemosyne** | Robert's curated reading. Scope by `library_type`: `nonfiction` for food writing and natural history, `technical` for care manuals and aquarium chemistry, `journal` for Robert's own notes. |
|
||||||
| **Argos** | Quick lookups — is that restaurant still open, what is eating the tomatoes this year, current care guidance for a species. Light use; depth lives in Neo4j and Mnemosyne. |
|
| **Argos** | Quick lookups — is that restaurant still open, what is eating the tomatoes this year, current care guidance for a species. Light use; depth lives in Neo4j and Mnemosyne. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Seasonality is fundamental in both halves of the domain — what is in season, when to plant, when blooms come, when the tank needs a water change. Never assume the date. |
|
| **Time** | Seasonality is fundamental in both halves of the domain — what is in season, when to plant, when blooms come, when the tank needs a water change. Never assume the date. |
|
||||||
|
|
||||||
For deep research on a cuisine, a species, or a horticultural problem, delegate to the **research** subagent.
|
For deep research on a cuisine, a species, or a horticultural problem, delegate to the **research** subagent.
|
||||||
|
|||||||
@@ -135,6 +135,8 @@ The personal team's distinctive tools beyond the shared ones:
|
|||||||
- **Orpheus** — Kawai piano MCP. Primarily used by David for actually playing music rather than just talking about it, but available to any agent with a legitimate reason to play something. See [docs/tools/orpheus.md](../tools/orpheus.md).
|
- **Orpheus** — Kawai piano MCP. Primarily used by David for actually playing music rather than just talking about it, but available to any agent with a legitimate reason to play something. See [docs/tools/orpheus.md](../tools/orpheus.md).
|
||||||
- **Mnemosyne** — Robert's curated multimodal KB. Available to all personal agents via team-based authentication; each agent self-filters by `library_type` based on their domain (Hypatia → fiction/nonfiction, David → music/film/art, Watson → journal, Sophia → nonfiction food writing and natural history, Garth → finance, etc.). See [docs/tools/mnemosyne.md](../tools/mnemosyne.md).
|
- **Mnemosyne** — Robert's curated multimodal KB. Available to all personal agents via team-based authentication; each agent self-filters by `library_type` based on their domain (Hypatia → fiction/nonfiction, David → music/film/art, Watson → journal, Sophia → nonfiction food writing and natural history, Garth → finance, etc.). See [docs/tools/mnemosyne.md](../tools/mnemosyne.md).
|
||||||
|
|
||||||
|
**Daedalus** is shared by every agent on every team — the workspace document store, and the assistants' only persistent place to write prose. The personal team is filed under the **Personal** scope, which reaches the **Home**, **Assistant**, and **World Cup 2026** workspaces; the workspace an agent is operating in is injected per conversation rather than fixed per agent. See [docs/tools/daedalus.md](../tools/daedalus.md).
|
||||||
|
|
||||||
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
||||||
|
|
||||||
## Cross-Team Touchpoints
|
## Cross-Team Touchpoints
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ Watson's writes carry more emotional weight than other agents'. Some specific pa
|
|||||||
| **Neo4j** | Primary tool — the 9 node types (Reflection, Value, Habit, LifeEvent, Intention, EmotionalMemory, RelationshipTheme, DialogueNote, DynamicPattern). The relationship memory and pattern tracking live here. Reads broadly — Shawn's `Contact` and `Communication` for who Robert is talking about and the recent interaction history, Marcus's `Training` to see whether the body has been a factor. |
|
| **Neo4j** | Primary tool — the 9 node types (Reflection, Value, Habit, LifeEvent, Intention, EmotionalMemory, RelationshipTheme, DialogueNote, DynamicPattern). The relationship memory and pattern tracking live here. Reads broadly — Shawn's `Contact` and `Communication` for who Robert is talking about and the recent interaction history, Marcus's `Training` to see whether the body has been a factor. |
|
||||||
| **Kairos** | Read-heavy. Pull contact context (who Robert is talking about — name, relationship, history) and event context (a wedding, a funeral, a kid's birthday — life events that ground emotional conversations). Writes only when adding life events Watson is specifically tracking; the relationship-interpretation layer stays in Neo4j. |
|
| **Kairos** | Read-heavy. Pull contact context (who Robert is talking about — name, relationship, history) and event context (a wedding, a funeral, a kid's birthday — life events that ground emotional conversations). Writes only when adding life events Watson is specifically tracking; the relationship-interpretation layer stays in Neo4j. |
|
||||||
| **Mnemosyne** | Robert's curated journal and reading. Scope by `library_type`: `journal` for his own entries (the most relevant for Watson's work — what Robert was already thinking about a person or a pattern), `nonfiction` for books on relationships, attachment, communication. |
|
| **Mnemosyne** | Robert's curated journal and reading. Scope by `library_type`: `journal` for his own entries (the most relevant for Watson's work — what Robert was already thinking about a person or a pattern), `nonfiction` for books on relationships, attachment, communication. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Home); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Date-stamping reflections, "how long since" calculations, knowing what season or life-phase a memory belongs to |
|
| **Time** | Date-stamping reflections, "how long since" calculations, knowing what season or life-phase a memory belongs to |
|
||||||
|
|
||||||
Watson generally does NOT use: Kernos/Grafana (engineering), Periplus (geographic — Nate's domain), Nike (football — Cristiano's domain), Orpheus (music — David's or Hypatia's domain), Argos (the outside web is rarely what Watson needs; what he needs is Robert's own context).
|
Watson generally does NOT use: Kernos/Grafana (engineering), Periplus (geographic — Nate's domain), Nike (football — Cristiano's domain), Orpheus (music — David's or Hypatia's domain), Argos (the outside web is rarely what Watson needs; what he needs is Robert's own context).
|
||||||
|
|||||||
107
docs/tools/daedalus.md
Normal file
107
docs/tools/daedalus.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Daedalus
|
||||||
|
|
||||||
|
> The chat platform the assistants speak through — and, via its MCP server, their persistent workspace document store.
|
||||||
|
|
||||||
|
- **MCP server name:** `daedalus`
|
||||||
|
- **Prompt snippet:** [prompts/tools/daedalus.md](../../prompts/tools/daedalus.md)
|
||||||
|
- **Project repo:** `/home/robert/git/daedalus`
|
||||||
|
|
||||||
|
## What It Is
|
||||||
|
|
||||||
|
Daedalus is the front door: the web and voice chat UI, the workspace/collection/file model behind it, and the scheduler that fires automations. Everywhere else in the estate Daedalus is an MCP *client* — it calls Pallas-hosted agents. The `daedalus` MCP server is the one place it acts as a **server**, and it exposes a single mount at `/mcp`.
|
||||||
|
|
||||||
|
For the assistants, the point is **persistence**. A conversation is ephemeral; a workspace file is not. The file tools let an agent list what Robert has uploaded, read it, publish its own finished work back, and revise that work later — which makes a workspace the assistants' shared long-term document memory, complementary to Neo4j (structured facts) and Mnemosyne (curated reading).
|
||||||
|
|
||||||
|
The same server also carries the **phone senses** (`read_phone_screen`, `recent_notifications`, `send_sms`), which only function during a live mobile voice session. Those are scoped to the mobile agent and are not part of the file surface every agent gets.
|
||||||
|
|
||||||
|
## Concepts
|
||||||
|
|
||||||
|
| Concept | What it means |
|
||||||
|
|---|---|
|
||||||
|
| **Workspace** | A named container for files, e.g. "Home", "Ouranos", "Amazon Connect". The unit of reach. |
|
||||||
|
| **Collection** | A folder within a workspace, with a **provenance**. Every workspace has `default` (`user`) and `published` (`generated`). |
|
||||||
|
| **Provenance** | `user` = Robert uploaded it, ground truth. `generated` = an assistant authored it, an opinion. |
|
||||||
|
| **Scope** | The authorization realm. 1:1 with a Pallas team, M:M with workspaces — this is what decides which workspaces a team's agents can reach. |
|
||||||
|
|
||||||
|
**Provenance is the load-bearing distinction.** It is why agents may read everything in reach but may only *write* into `generated` collections — an assistant can never overwrite or forge one of Robert's own uploads.
|
||||||
|
|
||||||
|
## MCP Tools
|
||||||
|
|
||||||
|
All four take `workspace` as the first argument, accepting the workspace **id, slug, or display name**. Agents are told the display name, so that is what they normally pass; the resolver strips surrounding quotes, markdown emphasis, and case differences, because small models echo the injected name with decoration.
|
||||||
|
|
||||||
|
### `list_workspace_files(workspace, collection=None)`
|
||||||
|
|
||||||
|
Returns one line per file, newest first:
|
||||||
|
|
||||||
|
```
|
||||||
|
- soil-moisture-notes.md (id=…, collection=published, provenance=generated, size=4213B)
|
||||||
|
```
|
||||||
|
|
||||||
|
The `id` is what every other tool wants. Optionally filter to one collection slug.
|
||||||
|
|
||||||
|
### `read_workspace_file(workspace, file_id)`
|
||||||
|
|
||||||
|
Returns the file's text. Non-UTF-8 files come back as a description (`"…: 91234 bytes of application/pdf; not text-readable."`) rather than an error. Text over **200,000 characters** is truncated with a `…[truncated]` marker.
|
||||||
|
|
||||||
|
### `publish_generated_document(workspace, title, body_markdown, collection="published", as_of=None, sources=None)`
|
||||||
|
|
||||||
|
Writes a new Markdown document. The title is slugified into the filename. `provenance='generated'` and `author_agent` are taken from the authenticated identity, **never from the payload** — an agent cannot claim to be someone else or claim its output is a user upload. `as_of` defaults to now; `sources` is an optional list of references.
|
||||||
|
|
||||||
|
Publishing also triggers the Mnemosyne ingest hook, so a published document becomes searchable.
|
||||||
|
|
||||||
|
### `revise_workspace_file(workspace, file_id, body_markdown)`
|
||||||
|
|
||||||
|
Replaces the body of an existing generated file. Refused on `user` collections.
|
||||||
|
|
||||||
|
**There is no delete tool.** This is deliberate — an agent cannot destroy content. The consequence is that a badly-titled publish is permanent as a filename and can only be corrected in body text, so agents should treat the title as a commitment.
|
||||||
|
|
||||||
|
## Authentication and reach
|
||||||
|
|
||||||
|
One `dmcp_` bearer token per Pallas team, minted in Daedalus, gating the whole server. The token resolves to the team's `PallasInstance`; reach is then derived from that instance's **scope**:
|
||||||
|
|
||||||
|
```
|
||||||
|
agent → team (PallasInstance) → scope → workspaces
|
||||||
|
```
|
||||||
|
|
||||||
|
Both halves must be present. A team with `scope_id = NULL` reaches **nothing**, even for reads. Current filing:
|
||||||
|
|
||||||
|
| Team | Scope | Workspaces in reach |
|
||||||
|
|---|---|---|
|
||||||
|
| Iolaus (personal) | Personal | Home, Assistant, World Cup 2026 |
|
||||||
|
| Mentor (work) | Work | Amazon Connect, Infrastructure |
|
||||||
|
| Kottos (engineering) | Engineering | Ouranos |
|
||||||
|
|
||||||
|
Reach is checked on **every call**, so adding a workspace to a scope grants access immediately with no redeploy.
|
||||||
|
|
||||||
|
## Who Uses Daedalus
|
||||||
|
|
||||||
|
**Every agent on all three teams**, as the standard workspace read/write surface — the same way every agent gets `time` and `neo4j_cypher`.
|
||||||
|
|
||||||
|
The workspace an agent operates in is not a property of the agent; it is injected per conversation by Daedalus. The same agent speaking in the Home workspace and in the Assistant workspace files into different places. By convention Sophia's workspace is **Home**, but nothing is hardcoded.
|
||||||
|
|
||||||
|
## What It's Good For
|
||||||
|
|
||||||
|
- Persisting a finished piece of work — a memo, a plan, a research summary — past the end of the conversation
|
||||||
|
- Reading what Robert has uploaded into the workspace under discussion
|
||||||
|
- Dropping a long document from context and re-reading it on demand (context compaction)
|
||||||
|
- Handing work between agents: one publishes, another reads
|
||||||
|
- Making assistant output human-reviewable in the Daedalus UI
|
||||||
|
|
||||||
|
## What It's Not Good For
|
||||||
|
|
||||||
|
- Structured facts and relationships — that's Neo4j; a document is not a queryable node
|
||||||
|
- Searching across everything Robert has curated — that's Mnemosyne
|
||||||
|
- Scratch space — every publish is a real, undeleteable file
|
||||||
|
- Storing anything non-Markdown; the publish tool takes Markdown text only
|
||||||
|
- Deleting or tidying up — no delete tool exists
|
||||||
|
|
||||||
|
## Known Gotchas
|
||||||
|
|
||||||
|
- **Refusals are returned as ordinary tool text, not errors.** An agent that does not read the result carefully will carry on as though the write succeeded. They are logged server-side as `mcp_file_tool_refused` — grep Loki for that when a write silently did not happen.
|
||||||
|
- **"Forbidden" is deliberately ambiguous.** A workspace outside scope and a workspace that does not exist return the identical message, so the tool surface can't be used to enumerate workspace names. When debugging, check the scope filing rather than assuming the name is wrong.
|
||||||
|
- **The single commonest failure is a mangled workspace name.** The system line quotes the name for exactly this reason; earlier versions used markdown bold and small models echoed the asterisks.
|
||||||
|
- **Agents may not write to `default`.** Attempts return the `provenance` refusal. `published` is the generated collection in every workspace today.
|
||||||
|
- **`as_of` silently defaults to now**, which asserts the content is current. An agent summarizing stale material must set it explicitly.
|
||||||
|
- **File-reach and knowledge-reach both derive from scope**, so they always agree. This was not true before mid-2026, when Mnemosyne reach came from a separate join table and could diverge from file reach.
|
||||||
|
- **Phone senses share this server but not its auth model** — they need a live mobile session, not just a valid token, and return a plain "unavailable right now" string outside one.
|
||||||
|
- **A stale API container serves stale tools.** Daedalus runs a bind-mounted backend; `docker compose restart api` is required after a pull, since `up -d` reloads nothing.
|
||||||
@@ -17,6 +17,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 |
|
| **rommie** | Computer automation (Agent S, MATE desktop) | caliban.incus |
|
||||||
| **github** | GitHub Copilot MCP | api.githubcopilot.com |
|
| **github** | GitHub Copilot MCP | api.githubcopilot.com |
|
||||||
| **context7** | Library/framework documentation lookup | local (npx) |
|
| **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 |
|
| **time** | Current time and timezone | local |
|
||||||
|
|
||||||
**Korax is your workbench.** For shell commands and file operations, use Korax (Kernos MCP). Call `get_shell_config` first to see what commands are whitelisted.
|
**Korax is your workbench.** For shell commands and file operations, use Korax (Kernos MCP). Call `get_shell_config` first to see what commands are whitelisted.
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ Strategic decisions get a `Decision` node — title, context, options considered
|
|||||||
| **Neo4j** | Strategic decisions, competitive intelligence, market trends, client portfolio assessments — the primary tool |
|
| **Neo4j** | Strategic decisions, competitive intelligence, market trends, client portfolio assessments — the primary tool |
|
||||||
| **Athena** | Client portfolio analysis, relationship strategy, account reviews — the CRM-side view of clients and opportunities. Read-heavy; occasional writes for strategic-level notes on clients and competitive vendor records. |
|
| **Athena** | Client portfolio analysis, relationship strategy, account reviews — the CRM-side view of clients and opportunities. Read-heavy; occasional writes for strategic-level notes on clients and competitive vendor records. |
|
||||||
| **Argos** | Quick web checks — vendor announcements, industry news, competitor moves |
|
| **Argos** | Quick web checks — vendor announcements, industry news, competitor moves |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Amazon Connect); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Date-stamping decisions and observations |
|
| **Time** | Date-stamping decisions and observations |
|
||||||
|
|
||||||
Alan generally does NOT use: Kernos (no shell work), Grafana (no ops), Mnemosyne (some overlap with content but Ann owns the curated KB side), Context7/GitHub/Gitea (no code work).
|
Alan generally does NOT use: Kernos (no shell work), Grafana (no ops), Mnemosyne (some overlap with content but Ann owns the curated KB side), Context7/GitHub/Gitea (no code work).
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ Content shipped gets a `Content` node — title, type, status, where it appeared
|
|||||||
| **Neo4j** | Content tracking — what's been published where, on what topics — and reading Alan's positioning decisions to ensure content aligns |
|
| **Neo4j** | Content tracking — what's been published where, on what topics — and reading Alan's positioning decisions to ensure content aligns |
|
||||||
| **Argos** | Research for content — current state of a topic, what's been said by others, sources to link to |
|
| **Argos** | Research for content — current state of a topic, what's been said by others, sources to link to |
|
||||||
| **Mnemosyne** | Robert's curated reading and notes — the raw material for authentic content. What has he actually been reading, thinking about, working on? |
|
| **Mnemosyne** | Robert's curated reading and notes — the raw material for authentic content. What has he actually been reading, thinking about, working on? |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Amazon Connect); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Publishing dates, content scheduling |
|
| **Time** | Publishing dates, content scheduling |
|
||||||
|
|
||||||
Ann generally does NOT use: Athena (the CRM-level client/opp data isn't her primary lens — that's Jeffrey/Alan/Jarvis), Kernos (no shell work), Grafana, Context7/GitHub/Gitea (no code work).
|
Ann generally does NOT use: Athena (the CRM-level client/opp data isn't her primary lens — that's Jeffrey/Alan/Jarvis), Kernos (no shell work), Grafana, Context7/GitHub/Gitea (no code work).
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ Tasks get `Task` nodes (title, status, priority, due date). Meetings get `Meetin
|
|||||||
|---|---|
|
|---|---|
|
||||||
| **Neo4j** | Task, Meeting, Note, Decision nodes. Daily operations memory — what's pending, what got done, what's coming up. |
|
| **Neo4j** | Task, Meeting, Note, Decision nodes. Daily operations memory — what's pending, what got done, what's coming up. |
|
||||||
| **Athena** | Client and contact context for meetings, scheduling exchanges, and follow-up. Less deep than Jeffrey's use; more "who am I talking to and what's the history." Writes back new contacts and post-meeting contact notes when appropriate. |
|
| **Athena** | Client and contact context for meetings, scheduling exchanges, and follow-up. Less deep than Jeffrey's use; more "who am I talking to and what's the history." Writes back new contacts and post-meeting contact notes when appropriate. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Amazon Connect); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Calendar logic, due dates, meeting time-windows |
|
| **Time** | Calendar logic, due dates, meeting time-windows |
|
||||||
| **Argos** | Quick research for meeting prep, fact-checks for drafted messages |
|
| **Argos** | Quick research for meeting prep, fact-checks for drafted messages |
|
||||||
| **Mnemosyne** | Past notes and reference material relevant to the current task |
|
| **Mnemosyne** | Past notes and reference material relevant to the current task |
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ Opportunities get `Opportunity` nodes (stage, value, probability, next action).
|
|||||||
|---|---|
|
|---|---|
|
||||||
| **Athena** | Primary source for client and opportunity intelligence. Look up history *before* any sales conversation or proposal work; write back stage transitions, notes, and new contacts after a meaningful interaction. |
|
| **Athena** | Primary source for client and opportunity intelligence. Look up history *before* any sales conversation or proposal work; write back stage transitions, notes, and new contacts after a meaningful interaction. |
|
||||||
| **Neo4j** | Pipeline progression and sales intelligence — Opportunity, Proposal, Contact, Meeting nodes. The institutional memory of every deal. |
|
| **Neo4j** | Pipeline progression and sales intelligence — Opportunity, Proposal, Contact, Meeting nodes. The institutional memory of every deal. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Amazon Connect); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Date-stamping every interaction; pipeline cadence calculations |
|
| **Time** | Date-stamping every interaction; pipeline cadence calculations |
|
||||||
| **Inbox** | Cross-agent messages — handoffs from Alan, content drops from Ann, scheduling from Jarvis |
|
| **Inbox** | Cross-agent messages — handoffs from Alan, content drops from Ann, scheduling from Jarvis |
|
||||||
|
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ Pressure-tests a proposed design — does the trade-off math hold, is anything o
|
|||||||
| **Argos** | Quick tactical web checks; deeper investigation goes to tech_research. |
|
| **Argos** | Quick tactical web checks; deeper investigation goes to tech_research. |
|
||||||
| **Mnemosyne** | Prior solutions, reference architectures, past-engagement notes. |
|
| **Mnemosyne** | Prior solutions, reference architectures, past-engagement notes. |
|
||||||
| **Context7** | SDK/framework specifics when building demos. |
|
| **Context7** | SDK/framework specifics when building demos. |
|
||||||
|
| **Daedalus** | Workspace files. Read what Robert has uploaded into the current workspace (e.g. Amazon Connect); publish finished documents into the `published` collection and revise them later. The workspace is injected per conversation, not fixed per agent. |
|
||||||
| **Time** | Timestamping Solution and Demo nodes; conversations span days. |
|
| **Time** | Timestamping Solution and Demo nodes; conversations span days. |
|
||||||
|
|
||||||
Quentin's Kernos and aws_sa access are **scoped to demo environments** — unlike Harper (sandbox) and Scotty (production). He does NOT operate production infrastructure or run production ops.
|
Quentin's Kernos and aws_sa access are **scoped to demo environments** — unlike Harper (sandbox) and Scotty (production). He does NOT operate production infrastructure or run production ops.
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ Each agent's tool usage is documented in their own doc — the agent doc is the
|
|||||||
|
|
||||||
The work team's distinctive tool is **Athena** — a CRM-like platform for clients, vendors, contacts, opportunities, and pipeline. Alan, Jeffrey, and Jarvis use Athena heavily. Ann generally doesn't. See [docs/tools/athena.md](../tools/athena.md).
|
The work team's distinctive tool is **Athena** — a CRM-like platform for clients, vendors, contacts, opportunities, and pipeline. Alan, Jeffrey, and Jarvis use Athena heavily. Ann generally doesn't. See [docs/tools/athena.md](../tools/athena.md).
|
||||||
|
|
||||||
|
**Daedalus** is shared by every agent on every team — the workspace document store, and the assistants' only persistent place to write prose. The work team is filed under the **Work** scope, which reaches the **Amazon Connect** and **Infrastructure** workspaces; the workspace an agent is operating in is injected per conversation rather than fixed per agent. See [docs/tools/daedalus.md](../tools/daedalus.md).
|
||||||
|
|
||||||
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
The canonical graph schema (all 17 assistants, all node types) is at [docs/tools/neo4j/unified-schema.md](../tools/neo4j/unified-schema.md).
|
||||||
|
|
||||||
## Cross-Team Touchpoints
|
## Cross-Team Touchpoints
|
||||||
|
|||||||
@@ -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.
|
- 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.
|
- 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
|
### 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.
|
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 |
|
| **korax** | Shell execution + file operations (Korax) — primary workbench | korax.helu.ca |
|
||||||
| **neo4j** | Knowledge graph (Cypher queries) | ariel.incus |
|
| **neo4j** | Knowledge graph (Cypher queries) | ariel.incus |
|
||||||
| **argos** | Web search + webpage fetching | miranda.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 |
|
| **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.
|
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.
|
- 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.
|
- "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
|
### Time
|
||||||
|
|
||||||
Do not assume the current date. Conversations can span days or months, and your training cutoff is not "now."
|
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 |
|
| **rommie** | Computer automation (Agent S, MATE desktop) | caliban.incus |
|
||||||
| **github** | GitHub Copilot MCP | api.githubcopilot.com |
|
| **github** | GitHub Copilot MCP | api.githubcopilot.com |
|
||||||
| **context7** | Library/framework documentation lookup | local (npx) |
|
| **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 |
|
| **time** | Current time and timezone | local |
|
||||||
| **mnemosyne** | Multimodal personal knowledge base | (deployed in lab) |
|
| **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.
|
- 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.
|
- 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
|
### 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.
|
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) |
|
| **grafana** | Metrics + logs + dashboards | (deployed in lab) |
|
||||||
| **argos** | Web search + webpage fetching | miranda.incus |
|
| **argos** | Web search + webpage fetching | miranda.incus |
|
||||||
| **mnemosyne** | Multimodal personal knowledge base | (deployed in lab) |
|
| **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 |
|
| **time** | Current time and timezone | local |
|
||||||
|
|
||||||
> Not every assistant has every server. Your available servers are listed in your FastAgent config.
|
> 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.
|
- 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.
|
- 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
|
### time
|
||||||
|
|
||||||
Kick-off windows in different timezones, season calendar math, "is this team in a midweek window."
|
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.
|
- 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.
|
- 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
|
### time
|
||||||
|
|
||||||
Cultural calendar logic — when an exhibition is actually closing, era of a piece, "in season" for a designer.
|
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.
|
- 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).
|
- 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
|
### time
|
||||||
|
|
||||||
Tax-year math, time-value-of-money calculations, "how long until retirement" framing — all depend on knowing today's date.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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.
|
- Most training context already lives in Neo4j and Mnemosyne; reach for Argos when those don't have it.
|
||||||
- Quote queries when phrasing matters.
|
- 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
|
### 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.
|
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.
|
- **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.
|
- 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
|
### 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.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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.
|
- **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.
|
- 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
|
### 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.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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.
|
- 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.
|
- 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
|
### 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.
|
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?"
|
- 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.
|
- 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
|
### 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.
|
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 |
|
| **argos** | Web search + webpage fetching | miranda.incus |
|
||||||
| **mnemosyne** | Multimodal personal knowledge base | — |
|
| **mnemosyne** | Multimodal personal knowledge base | — |
|
||||||
| **context7** | Library/framework documentation lookup | local (npx) |
|
| **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 |
|
| **time** | Current time and timezone | local |
|
||||||
|
|
||||||
### Kernos (Ergon) — demo workbench (primary tool)
|
### 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**.
|
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
|
### Time
|
||||||
|
|
||||||
Do not assume the current date — conversations span days. Call the time tool before timestamping any `Solution` or `Demo` node.
|
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