docs(readme): update assistant roster, prompt layers, repo structure

- Update assistant lists (added Shawn, Watson, David, CASE, AWS SA; modified Scotty/Harper roles)
- Reflect new architecture layers: Tool Prompt Snippets and Shared Context
- Align repository structure diagram with current filesystem layout
This commit is contained in:
2026-05-20 22:50:22 -04:00
parent c1cc6e26c5
commit 703b3402d4
39 changed files with 1181 additions and 158 deletions

9
prompts/tools/argos.md Normal file
View File

@@ -0,0 +1,9 @@
# Argos (web search + page fetch)
Argos is your window onto the outside web.
- Use Argos for the general web. For library/framework documentation, prefer Context7 — it returns better-structured results for that case.
- For internal Agathos services, use Kernos, not Argos.
- Quote queries when phrasing matters. Use search-engine operators when narrowing.
- Cached search snippets can be stale. If "current state" matters (status pages, release notes), fetch the page itself rather than trusting the snippet.
- For deep multi-query research, delegate to a research subagent rather than running long Argos chains in your own context.

View File

@@ -0,0 +1,9 @@
# Context7 (library + framework documentation)
Context7 fetches current documentation for libraries, frameworks, SDKs, APIs, and CLI tools.
- Use Context7 even for libraries you "know" — your training data may be stale on recent releases or breaking changes.
- Typical pattern: call `resolve-library-id` to find the library, then `query-docs` to fetch what you need.
- Include version information in your query when behavior is version-specific.
- Prefer Context7 over Argos when the question is "how does this library work." Argos is the fallback when Context7 doesn't have the doc.
- Do not use Context7 for refactoring, writing from scratch, business-logic debugging, or general programming concepts — it documents libraries, it doesn't theorize.

7
prompts/tools/gitea.md Normal file
View File

@@ -0,0 +1,7 @@
# Gitea (self-hosted Git on git.helu.ca)
Gitea is Robert's self-hosted Git server. Use it to read code, issues, and PRs without cloning locally.
- Repos on `git.helu.ca` are owned by the personal user account, not an org. Default to **user-scope** vars/secrets when configuring Gitea Actions.
- For active development with many edits, prefer working in a local clone via Kernos rather than driving everything through the Gitea MCP.
- For repos hosted on GitHub.com, use the GitHub MCP, not Gitea.

7
prompts/tools/github.md Normal file
View File

@@ -0,0 +1,7 @@
# GitHub (github.com via Copilot MCP)
GitHub MCP gives you access to repos on github.com — public projects and Robert's own GitHub repos.
- For repos hosted on `git.helu.ca`, use the Gitea MCP instead.
- 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.

9
prompts/tools/grafana.md Normal file
View File

@@ -0,0 +1,9 @@
# Grafana (metrics + logs + dashboards)
Grafana is your observability tool: Prometheus metrics, Loki logs, dashboard queries.
- This is the primary tool for **"what changed?"** and **"what is wrong right now?"** Use it before forming a hypothesis during incident response.
- Always scope queries with a time range. Unscoped PromQL or LogQL queries are either empty or unboundedly expensive.
- Filter Loki queries by service, level, and host. Unfiltered queries against high-cardinality labels are slow and rarely useful.
- Reading a small log fragment and jumping to a conclusion is a documented failure mode. Pull enough surrounding context — related services, recent changes, dependencies — before forming a hypothesis.
- Grafana is read-only. To act on what you see, use Kernos.

9
prompts/tools/kernos.md Normal file
View File

@@ -0,0 +1,9 @@
# Kernos (shell + file ops)
Kernos is your workbench for shell commands and file operations. Use it directly rather than describing what you would do.
- Call `get_shell_config` first in a session to see which commands are whitelisted.
- Every Kernos response includes a `success` boolean. **Always check it before proceeding.** Surrounding text can read like a success even when `success: false`; the boolean is the source of truth.
- Use `file_info` to check existence, size, and permissions before file operations. Cheaper than failing partway through.
- Verify the target host. Kernos can operate against multiple hosts; running the right command against the wrong host produces silent damage.
- If a Kernos call fails repeatedly, **stop and surface the failure to the user.** Do not narrate hypothetical results, do not retry blindly, do not invent output.

View File

@@ -0,0 +1,9 @@
# Mnemosyne (multimodal personal KB)
Mnemosyne searches Robert's own curated knowledge base across multiple library types (fiction, nonfiction, technical, music, film, art, journal, business, finance).
- Mnemosyne is a **retrieval engine**, not a synthesizer. `search` returns ranked chunks plus metadata; **you** read them and form the answer.
- Call `list_libraries` if you're unsure which library to search. Searching the wrong library type returns useless results.
- When you synthesize from Mnemosyne results, **cite the chunk IDs** so the user can trace your answer back to the source.
- 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.
- Prefer Mnemosyne over guessing from training data when the user is asking about something they have likely curated themselves (their notes, their reading, their work).

69
prompts/tools/neo4j.md Normal file
View File

@@ -0,0 +1,69 @@
# Neo4j (knowledge graph + inter-agent messaging)
The Neo4j knowledge graph is shared across all assistants. Read broadly; write to nodes you own (see your team's graph context).
## Writing discipline
- **Always MERGE on `id`** to make writes idempotent. Never blind-create.
- **Use the canonical ID format:** `{type}_{identifier}_{qualifier}` (e.g., `infra_neo4j_prod`, `proto_mcp_dashboard`, `note_2026-05-20_harper_scotty_prod_handoff`). Lowercase, snake_case.
- **Always set timestamps.** `ON CREATE SET n.created_at = datetime()` for new nodes; `SET n.updated_at = datetime()` on every write.
- **Check before creating.** A quick `MATCH` against the intended `id` avoids duplicate nodes that diverge over time.
## Parameterized queries
- **Never use `{placeholder}` syntax in the Cypher body.** Local models (Qwen3.5-35B) mishandle it. Pass values through `params`, and use `$name` in the query:
```cypher
// good
MERGE (n:Note {id: $id})
SET n.title = $title, n.updated_at = datetime()
```
```cypher
// bad — do not do this
MERGE (n:Note {id: '{id}'})
SET n.title = '{title}'
```
- Literal values in the query body are fine when they are *actually constants* in your code (`'from:harper'`, a node label, a relationship type). The rule is no template interpolation into the query string.
## Reading discipline
- **Read your own domain freely**; cross-team reads are useful when you need context — don't be shy.
- Use `LIMIT` on exploratory queries. Returning the whole graph kills latency and burns tokens.
### Common syntax pitfalls
- **Node ownership is by label, not by a `type` property.** Harper's nodes are `:Prototype` and `:Experiment` (label = ownership). Scotty's are `:Infrastructure` and `:Incident`. There is no `n.type = 'harper'` filter; the label is the filter. The `type` property only appears on `Note` nodes (e.g., `n.type = 'assistant_message'` for messaging) — do not generalize that pattern.
- **`MATCH ... OR MATCH ...` is not valid Cypher.** You cannot OR-combine match patterns at the top level. To query alternative structures, use `UNION` or `OPTIONAL MATCH`:
```cypher
// UNION — three separate queries, same return columns, results combined
MATCH (n:Prototype)-[:DEMONSTRATES]->(t:Technology)
RETURN n.id AS id, n.name AS name, t.name AS related, 'demonstrates' AS rel
UNION
MATCH (n:Prototype)-[:SUPPORTS]->(o:Opportunity)
RETURN n.id AS id, n.name AS name, o.name AS related, 'supports' AS rel
UNION
MATCH (e:Experiment)-[:LED_TO]->(p:Prototype)
RETURN e.id AS id, e.title AS name, p.id AS related, 'led_to' AS rel
```
```cypher
// OPTIONAL MATCH — one row per starting node, with nulls where a relationship doesn't exist
MATCH (n:Prototype)
OPTIONAL MATCH (n)-[:DEMONSTRATES]->(t:Technology)
OPTIONAL MATCH (n)-[:SUPPORTS]->(o:Opportunity)
RETURN n.id, n.name, collect(DISTINCT t.name) AS technologies,
collect(DISTINCT o.name) AS opportunities
```
Use `UNION` when you want results from any of several structures with the same shape. Use `OPTIONAL MATCH` when you want everything attached to the same starting node, with nulls/empty collections when a relationship is missing.
## Error handling
If a graph query fails, continue the conversation. Mention the failure briefly. Never expose raw Cypher errors to the user.
## Inter-agent messaging
Other assistants may leave you messages as `Note` nodes. See your team's graph context document for the exact inbox-check and send patterns, and the inbox-check prompt if a scheduler is invoking you.

9
prompts/tools/rommie.md Normal file
View File

@@ -0,0 +1,9 @@
# Rommie (desktop automation via Agent S)
Rommie drives a real MATE desktop — clicking, typing, navigating GUI applications.
- Delegate to Rommie only when GUI interaction is unavoidable. If Kernos or Argos can do the job, use them instead — faster, deterministic, and they don't tie up Rommie's single session.
- Give natural-language tasks ("check the latest headlines on Google"). Rommie decides where to click. Do not send pixel coordinates.
- **One task at a time.** If Rommie is busy, wait. Do not queue a second request.
- After a task, verify with `get_screenshot` and look. Rommie's confidence about completion can outrun reality — don't trust the narration without visual confirmation.
- The desktop is real. Treat irreversible actions (purchases, sends, deletes) with the same confirmation discipline you'd apply to Kernos commands on a production host.

6
prompts/tools/time.md Normal file
View File

@@ -0,0 +1,6 @@
# Time
Do not assume the current date. Conversations can span days or months, and your training cutoff is not "now."
- Call the time server before timestamping anything that gets stored: graph node IDs, note slugs, file names, journal entries.
- Specify the timezone explicitly when it matters (UTC for logs, local for user-facing references).