@yottagraph-app/aether-instructions 1.1.35 → 1.1.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yottagraph-app/aether-instructions",
3
- "version": "1.1.35",
3
+ "version": "1.1.36",
4
4
  "description": "Cursor rules, commands, and skills for Aether development",
5
5
  "files": [
6
6
  "rules",
package/rules/agents.mdc CHANGED
@@ -455,3 +455,29 @@ exploration but requires more tool calls and is more error-prone.
455
455
  returns formatted strings. Fewer tools, more reliable, better for production
456
456
  use cases. **Prefer this pattern** unless the agent genuinely needs to
457
457
  explore arbitrary entity types.
458
+
459
+ ### McpToolset passthrough is not a substitute for custom tools
460
+
461
+ When DESIGN.md specifies named agent tools (e.g. `entity_search`,
462
+ `corporate_structure`, `event_monitor`), each must be implemented as a
463
+ **Python function** that calls MCP, formats results, and handles errors.
464
+ Passing a raw `McpToolset` as the agent's only tool source and writing a
465
+ long system prompt does **not** satisfy the spec.
466
+
467
+ `McpToolset` passthrough means:
468
+ - The LLM receives raw JSON responses — no Markdown formatting, no
469
+ human-readable reports
470
+ - No session-state caching — repeated queries for the same entity make
471
+ redundant MCP calls every turn
472
+ - No property type handling — `data_nindex` values (entity references)
473
+ render as meaningless 19-digit numbers
474
+ - No error boundaries — MCP failures surface as opaque tool errors
475
+ - No compound cache keys or report generation — the patterns that make
476
+ multi-turn research conversations reliable
477
+
478
+ `McpToolset` passthrough is fine for **simple exploration agents** or
479
+ quick prototypes. It is **not acceptable** when the project spec
480
+ describes a production agent with a defined tool suite. If DESIGN.md
481
+ lists N custom tools, build N custom Python functions — each calling MCP
482
+ tools internally, formatting output as Markdown, catching exceptions,
483
+ and saving reports to session state where appropriate.
@@ -604,6 +604,17 @@ These are mistakes previous agents have made. Do not repeat them.
604
604
  when the `ref` field is actually present in the tool response data.
605
605
  The client renders these as numbered citations with source links.
606
606
 
607
+ 6. **Do not pass raw `McpToolset` when the spec calls for custom tools.**
608
+ If DESIGN.md describes named tools (e.g. `entity_search`,
609
+ `corporate_structure`, `event_monitor`), each must be a Python
610
+ function that calls MCP internally. Passing `McpToolset` as the
611
+ agent's only tool source means: no Markdown report formatting, no
612
+ session-state caching, no property type resolution (`data_nindex`
613
+ values render as raw NEIDs), no compound cache keys, and no error
614
+ boundaries. The LLM gets raw JSON and hallucinates when responses
615
+ are large. `McpToolset` passthrough is acceptable for quick
616
+ prototypes but not for production agents with a defined tool suite.
617
+
607
618
  ---
608
619
 
609
620
  ## Citation Handling
@@ -114,6 +114,18 @@ Match the brief: dashboards from `/api/...`, **chat** as primary, or both. No El
114
114
 
115
115
  ## Step 6: Build
116
116
 
117
+ **If the brief is agent-heavy** (the agent IS the product — chatbot,
118
+ research assistant, investigation tool, etc.), build the agent FIRST:
119
+
120
+ 1. **`agents/`** — Build the full agent with all tools specified in DESIGN.md.
121
+ Each named tool must be a Python function — do NOT just pass `McpToolset`
122
+ through and write a system prompt. Read the `agents` rule ("McpToolset
123
+ passthrough" section) for why this matters.
124
+ 2. Test the agent locally with `adk web` before building the UI.
125
+ 3. Then build the UI around the working agent.
126
+
127
+ **For all projects:**
128
+
117
129
  1. **`agents/`** — one or more agents per `agents-data` (sync, research, channeling, or mixed).
118
130
  2. **`server/api/` + composables + `pages/`** — when the brief needs materialized lists or detail.
119
131
  3. **`pages/chat` or custom** — when the brief is agent-forward.
@@ -121,6 +133,26 @@ Match the brief: dashboards from `/api/...`, **chat** as primary, or both. No El
121
133
 
122
134
  ---
123
135
 
136
+ ## Step 6b: Audit Against the Spec
137
+
138
+ Before committing, re-read DESIGN.md and compare what you built against
139
+ what it specifies. This is a mechanical check — no judgment needed.
140
+
141
+ 1. **List every agent tool** DESIGN.md describes (by name, with purpose).
142
+ 2. For each, confirm it exists in your code with the described behavior.
143
+ 3. If the spec describes N custom tools and you built fewer, **go back
144
+ and build the missing ones** before proceeding.
145
+ 4. If you used `McpToolset` passthrough where the spec calls for custom
146
+ Python tool functions, **replace it** — passthrough does not satisfy a
147
+ spec that describes named tools with specific behaviors.
148
+ 5. Check that tools format output as Markdown, handle errors, and cache
149
+ results in session state where the spec requires it.
150
+
151
+ Do not skip this step. The most common failure mode is building a polished
152
+ UI connected to a stub agent that passes raw MCP tools through to the LLM.
153
+
154
+ ---
155
+
124
156
  ## Step 7: Verify and Commit
125
157
 
126
158
  After building, ensure dependencies are installed and run a production build: