@yottagraph-app/aether-instructions 1.1.43 → 1.1.45
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/AGENTS.md +16 -12
- package/CLAUDE.md +1 -0
- package/README.md +13 -8
- package/commands/build_my_app.md +9 -9
- package/commands/deploy_mcp.md +3 -3
- package/commands/update_instructions.md +112 -55
- package/package.json +3 -2
- package/skills/aether/SKILL.md +1 -1
- package/skills/aether/cursor-cloud.md +1 -1
- package/skills/aether/data.md +4 -4
- package/skills/aether/instructions_warning.md +17 -9
- package/skills/aether/mcp-servers.md +1 -1
- package/variants/mcp-only/commands/build_my_app.md +5 -5
package/AGENTS.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Aether
|
|
2
2
|
|
|
3
|
-
**Read first:** [`.
|
|
3
|
+
**Read first:** [`.agents/skills/aether/SKILL.md`](.agents/skills/aether/SKILL.md) — the Aether skill indexes every topic below and is the canonical entry point for any work in this repo.
|
|
4
4
|
|
|
5
5
|
**Stack:** Nuxt 3 (SPA), Vue 3 Composition API (`<script setup>`), Vuetify 3, TypeScript (required), Auth0.
|
|
6
6
|
|
|
7
7
|
**Structure:** `pages/` (file-based routing), `components/`, `composables/`, `server/api/`, `agents/` (Python ADK), `mcp-servers/` (Python FastMCP).
|
|
8
8
|
|
|
9
|
-
**Data:** This app runs on the Lovelace platform -- entities, news, filings, sentiment, relationships, events. See [`data.md`](.
|
|
9
|
+
**Data:** This app runs on the Lovelace platform -- entities, news, filings, sentiment, relationships, events. See [`data.md`](.agents/skills/aether/data.md) in the `aether` skill for access patterns and gotchas. Additional skill docs: `.agents/skills/data-model/` (entity types, properties, relationships; `SKILL.md` first), `.agents/skills/elemental-mcp-patterns/` (MCP response shapes, property type handling, Python patterns for agent tools). Do NOT call external APIs for data the platform provides.
|
|
10
10
|
|
|
11
|
-
**Storage:** KV (Upstash Redis) for preferences and lightweight state via `Pref<T>` from `usePrefsStore()`. Neon Postgres for relational data if connected (see [`storage.md`](.
|
|
11
|
+
**Storage:** KV (Upstash Redis) for preferences and lightweight state via `Pref<T>` from `usePrefsStore()`. Neon Postgres for relational data if connected (see [`storage.md`](.agents/skills/aether/storage.md) in the `aether` skill).
|
|
12
12
|
|
|
13
13
|
**Source of truth:** `DESIGN.md` -- read before starting work, update when changing features. The starter UI is placeholder -- replace freely. Feature docs in `design/` for implementation planning.
|
|
14
14
|
|
|
@@ -18,24 +18,28 @@
|
|
|
18
18
|
|
|
19
19
|
## Task-specific topics
|
|
20
20
|
|
|
21
|
-
The `aether` skill (`.
|
|
21
|
+
The `aether` skill (`.agents/skills/aether/SKILL.md`) covers architecture, data, UI cookbook, agents, MCP servers, deployment, env, storage, troubleshooting, and more. Read `SKILL.md` first; it's a short index that points you to the specific topic file you need.
|
|
22
22
|
|
|
23
23
|
## Environment
|
|
24
24
|
|
|
25
25
|
Detect your runtime once at startup, then read the matching topic in the `aether` skill:
|
|
26
26
|
|
|
27
|
-
- **Cursor Cloud** if `$HOME` starts with `/root` or `/home/ubuntu`, OR `uname -s` reports `Linux` in a container-shaped path, OR a "Dev Server" terminal was auto-started from `.
|
|
28
|
-
- **Local dev** if `$HOME` is under `/Users/…` (macOS) or a normal Linux/Windows user home, and no "Dev Server" terminal is auto-running. → If `.env` and `node_modules/` are present, you're set up; otherwise read [`local-setup.md`](.
|
|
27
|
+
- **Cursor Cloud** if `$HOME` starts with `/root` or `/home/ubuntu`, OR `uname -s` reports `Linux` in a container-shaped path, OR a "Dev Server" terminal was auto-started from `.agents/environment.json`. → Read [`cursor-cloud.md`](.agents/skills/aether/cursor-cloud.md).
|
|
28
|
+
- **Local dev** if `$HOME` is under `/Users/…` (macOS) or a normal Linux/Windows user home, and no "Dev Server" terminal is auto-running. → If `.env` and `node_modules/` are present, you're set up; otherwise read [`local-setup.md`](.agents/skills/aether/local-setup.md).
|
|
29
29
|
|
|
30
30
|
This check is cheap and only needs to run once per session.
|
|
31
31
|
|
|
32
|
-
###
|
|
32
|
+
### Agent instructions (`.agents/`)
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
`@yottagraph-app/aether-instructions` npm package during project init
|
|
36
|
-
`.cursor
|
|
37
|
-
`.
|
|
38
|
-
|
|
34
|
+
Agent commands and skills are installed from the
|
|
35
|
+
`@yottagraph-app/aether-instructions` npm package during project init, under
|
|
36
|
+
`.agents/`. `.cursor` and `.claude` are symlinks to `.agents/`, and
|
|
37
|
+
`.mcp.json` is a symlink to `.agents/mcp.json`, so Cursor and Claude Code
|
|
38
|
+
both read the same files.
|
|
39
|
+
|
|
40
|
+
`.agents/skills/aether/` is the main Aether skill.
|
|
41
|
+
`.agents/skills/elemental-api/` contains API skill documentation (endpoint
|
|
42
|
+
reference, types, usage patterns). `.agents/skills/data-model/` contains
|
|
39
43
|
Lovelace data model documentation (entity types, schemas per fetch source).
|
|
40
44
|
If these directories are missing, run `/update_instructions` to reinstall.
|
|
41
45
|
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @yottagraph-app/aether-instructions
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Agent commands and skills for Aether development (used by Cursor and
|
|
4
|
+
Claude Code).
|
|
4
5
|
|
|
5
6
|
The core Aether guidance (architecture, data, UI, agents, MCP servers,
|
|
6
7
|
deployment, etc.) ships as the **`aether` skill** under `skills/aether/`,
|
|
@@ -11,6 +12,10 @@ with a `SKILL.md` entry point that indexes the topic files.
|
|
|
11
12
|
This package is automatically downloaded and extracted during Aether project
|
|
12
13
|
initialization (`init-project.js`). You don't need to install it directly.
|
|
13
14
|
|
|
15
|
+
Files install under `.agents/`. `.cursor` and `.claude` are whole-directory
|
|
16
|
+
symlinks to `.agents/`, and `.mcp.json` at the repo root is a symlink to
|
|
17
|
+
`.agents/mcp.json`, so Cursor and Claude Code read the same files.
|
|
18
|
+
|
|
14
19
|
### Updating Instructions
|
|
15
20
|
|
|
16
21
|
To update to the latest version:
|
|
@@ -19,20 +24,20 @@ To update to the latest version:
|
|
|
19
24
|
/update_instructions
|
|
20
25
|
```
|
|
21
26
|
|
|
22
|
-
This
|
|
27
|
+
This command will:
|
|
23
28
|
|
|
24
29
|
1. Download the latest version of this package
|
|
25
|
-
2. Replace files in `.
|
|
26
|
-
3. Remove the deprecated `.
|
|
30
|
+
2. Replace files in `.agents/` that are listed in `.agents/.aether-instructions-manifest`
|
|
31
|
+
3. Remove the deprecated `.agents/rules/` directory if present (rules were replaced by the `aether` skill)
|
|
27
32
|
4. Extract fresh files from the package
|
|
28
33
|
5. Commit the changes
|
|
29
34
|
|
|
30
35
|
### File Naming Convention
|
|
31
36
|
|
|
32
|
-
Package files keep their original names under `.
|
|
33
|
-
`.
|
|
34
|
-
`.
|
|
35
|
-
update; other files under `.
|
|
37
|
+
Package files keep their original names under `.agents/commands/` and
|
|
38
|
+
`.agents/skills/`. Which paths are owned by the package is recorded in
|
|
39
|
+
`.agents/.aether-instructions-manifest`. Only those paths are overwritten on
|
|
40
|
+
update; other files under `.agents/` are not touched by the updater.
|
|
36
41
|
|
|
37
42
|
### Customizing Commands or Skill Topics
|
|
38
43
|
|
package/commands/build_my_app.md
CHANGED
|
@@ -48,7 +48,7 @@ If design reference images exist (screenshots from Figma or other design tools):
|
|
|
48
48
|
|
|
49
49
|
1. **Examine each image** -- these are design mockups from the project creator showing what the app should look like.
|
|
50
50
|
2. Describe what you see in each image: layout structure, navigation patterns, component types, color usage, typography.
|
|
51
|
-
3. Map visual elements to **Vuetify components** (cards = `v-card`, data tables = `v-data-table`, navigation drawers = `v-navigation-drawer`, app bars = `v-app-bar`, etc.). If a `vuetify-figma` skill is available in `.
|
|
51
|
+
3. Map visual elements to **Vuetify components** (cards = `v-card`, data tables = `v-data-table`, navigation drawers = `v-navigation-drawer`, app bars = `v-app-bar`, etc.). If a `vuetify-figma` skill is available in `.agents/skills/`, read it for detailed component mapping guidance.
|
|
52
52
|
4. Use the design references alongside the Vision text to plan the UX. The images show _what it should look like_; the Vision text explains _what it should do_.
|
|
53
53
|
|
|
54
54
|
If a Figma URL is referenced in DESIGN.md, note it for the user but don't attempt to fetch it -- work from the uploaded screenshots and the text brief.
|
|
@@ -64,15 +64,15 @@ tools like `elemental_get_schema`, `elemental_get_entity`, etc.
|
|
|
64
64
|
tools (entity search, market data, news, etc.) that you can use during
|
|
65
65
|
development.
|
|
66
66
|
|
|
67
|
-
**If MCP tools are NOT available:** Check if `.
|
|
67
|
+
**If MCP tools are NOT available:** Check if `.agents/mcp.json` exists:
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
cat .
|
|
70
|
+
cat .agents/mcp.json 2>/dev/null
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
If the file exists but tools aren't showing, they may need to be enabled:
|
|
74
74
|
|
|
75
|
-
> Your project has Lovelace MCP servers configured (`.
|
|
75
|
+
> Your project has Lovelace MCP servers configured (`.agents/mcp.json`),
|
|
76
76
|
> but they don't appear to be active yet. Cursor disables new MCP servers
|
|
77
77
|
> by default.
|
|
78
78
|
>
|
|
@@ -95,17 +95,17 @@ First, ensure dependencies are installed (types aren't available without this):
|
|
|
95
95
|
test -d node_modules || npm install
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
Skills in `.
|
|
98
|
+
Skills in `.agents/skills/` are populated during project init (`node init-project.js`).
|
|
99
99
|
If that directory is empty after `npm install`, run `node init-project.js` to install them.
|
|
100
100
|
|
|
101
101
|
Then read these files to understand what's available:
|
|
102
102
|
|
|
103
103
|
1. `DESIGN.md` -- project vision and current status
|
|
104
104
|
2. `broadchurch.yaml` -- project config (name, gateway URL, etc.)
|
|
105
|
-
3. **The `aether` skill's `data.md` topic** (`.
|
|
106
|
-
4. **`.
|
|
105
|
+
3. **The `aether` skill's `data.md` topic** (`.agents/skills/aether/data.md`) — this is critical. It describes the Query Server, the platform's primary data source. Build against platform APIs, not external sources.
|
|
106
|
+
4. **`.agents/skills/`** — Each subdirectory is one skill. Start with `.agents/skills/aether/SKILL.md` — it's the index for every Aether topic (architecture, data, UI, agents, MCP, deployment, etc.). Then open each other skill's entry (usually `SKILL.md`) and follow its structure to learn what is documented (APIs, schemas, helpers, etc.).
|
|
107
107
|
|
|
108
|
-
**Important: Use the platform's data.** This app runs on the Lovelace platform, which provides a Query Server with entities, news, filings, sentiment, relationships, events, and more. Read [`data.md`](../skills/aether/data.md) in the `aether` skill and the other skills under `.
|
|
108
|
+
**Important: Use the platform's data.** This app runs on the Lovelace platform, which provides a Query Server with entities, news, filings, sentiment, relationships, events, and more. Read [`data.md`](../skills/aether/data.md) in the `aether` skill and the other skills under `.agents/skills/` to understand what data is available. Use `getSchema()` to discover entity types and properties at runtime.
|
|
109
109
|
|
|
110
110
|
Key capabilities:
|
|
111
111
|
|
|
@@ -113,7 +113,7 @@ Key capabilities:
|
|
|
113
113
|
- **KV storage** -- always available for preferences and lightweight data (see [`pref.md`](../skills/aether/pref.md) in the `aether` skill)
|
|
114
114
|
- **Neon Postgres** -- may be available for relational data; see [`storage.md`](../skills/aether/storage.md) in the `aether` skill for how to check and how to use it
|
|
115
115
|
- **AI agent chat** -- use the `useAgentChat` composable to build a chat UI for deployed agents
|
|
116
|
-
- **MCP servers** -- Lovelace MCP servers may be available (check `.
|
|
116
|
+
- **MCP servers** -- Lovelace MCP servers may be available (check `.agents/mcp.json`)
|
|
117
117
|
- **Components** -- Vuetify 3 component library is available
|
|
118
118
|
|
|
119
119
|
---
|
package/commands/deploy_mcp.md
CHANGED
|
@@ -122,9 +122,9 @@ curl -sf -X POST "<GATEWAY_URL>/api/projects/<ORG_ID>/deploy" \
|
|
|
122
122
|
|
|
123
123
|
## Step 7: Register in Cursor MCP Config
|
|
124
124
|
|
|
125
|
-
After deployment completes, add the new server to `.
|
|
125
|
+
After deployment completes, add the new server to `.agents/mcp.json` so Cursor and Claude Code can connect to it through the Portal Gateway proxy.
|
|
126
126
|
|
|
127
|
-
Read `.
|
|
127
|
+
Read `.agents/mcp.json`, then add a new entry for the server:
|
|
128
128
|
|
|
129
129
|
```json
|
|
130
130
|
{
|
|
@@ -136,7 +136,7 @@ Read `.cursor/mcp.json`, then add a new entry for the server:
|
|
|
136
136
|
|
|
137
137
|
Where `<SERVER_NAME>`, `<GATEWAY_URL>`, and `<ORG_ID>` are the values from Steps 1-2.
|
|
138
138
|
|
|
139
|
-
Write the updated JSON back to `.
|
|
139
|
+
Write the updated JSON back to `.agents/mcp.json`.
|
|
140
140
|
|
|
141
141
|
> The MCP server is now registered. Cursor will connect to it through the Portal Gateway proxy — no credentials needed.
|
|
142
142
|
>
|
|
@@ -1,32 +1,73 @@
|
|
|
1
1
|
# Update Instructions
|
|
2
2
|
|
|
3
|
-
Update
|
|
3
|
+
Update agent commands and skills from the `@yottagraph-app/aether-instructions` npm package.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
This command downloads the latest instructions package and extracts it to
|
|
7
|
+
This command downloads the latest instructions package and extracts it to `.agents/`. A manifest file (`.agents/.aether-instructions-manifest`) tracks which files came from the package so updates only replace package-provided files.
|
|
8
|
+
|
|
9
|
+
`.cursor/` and `.claude/` are whole-directory symlinks to `.agents/`, and `.mcp.json` is a symlink to `.agents/mcp.json`. Cursor and Claude Code therefore both read the same files; in the repo itself every reference points at the real `.agents/` path.
|
|
8
10
|
|
|
9
11
|
**What happens:**
|
|
10
12
|
|
|
11
|
-
1.
|
|
12
|
-
2.
|
|
13
|
-
3.
|
|
14
|
-
4.
|
|
15
|
-
5.
|
|
16
|
-
6.
|
|
13
|
+
1. Ensures the `.agents/` layout exists (migrating a legacy `.cursor/` directory and creating the `.cursor`, `.claude`, `.mcp.json` symlinks as needed)
|
|
14
|
+
2. Downloads the latest `@yottagraph-app/aether-instructions` package
|
|
15
|
+
3. Deletes files listed in the existing manifest
|
|
16
|
+
4. Removes the deprecated `.agents/rules/` directory if present (rules were replaced by the `aether` skill)
|
|
17
|
+
5. Extracts fresh files from the package
|
|
18
|
+
6. Writes a new manifest
|
|
19
|
+
7. Commits the changes
|
|
20
|
+
|
|
21
|
+
**Your files are safe:** Only paths listed in the manifest are removed before reinstall. Other files under `.agents/` are left alone.
|
|
22
|
+
|
|
23
|
+
**Shell compatibility:** Run the bash snippets below with **`bash`**, not bare `zsh`. An **empty line** in the manifest can make `rm -rf ".agents/$rel"` delete **all of `.agents/`** — Step 5 skips blank lines to avoid that.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Step 1: Ensure `.agents/` Layout
|
|
28
|
+
|
|
29
|
+
Detect and perform any one-time migration from the legacy `.cursor/` directory, then make sure the `.cursor`, `.claude`, and `.mcp.json` symlinks exist.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Case 1: .cursor is already a symlink (previously migrated) — nothing to do here
|
|
33
|
+
if [ -L .cursor ]; then
|
|
34
|
+
:
|
|
35
|
+
# Case 2: Fresh install — create .agents/ and symlinks
|
|
36
|
+
elif [ ! -e .cursor ]; then
|
|
37
|
+
mkdir -p .agents
|
|
38
|
+
# Case 3: Legacy layout — migrate .cursor/ → .agents/
|
|
39
|
+
elif [ -d .cursor ]; then
|
|
40
|
+
# Collision guards
|
|
41
|
+
if [ -e .agents ] && [ ! -L .agents ]; then
|
|
42
|
+
echo "Error: both .cursor/ and .agents/ exist as real paths. Resolve manually, then re-run /update_instructions." >&2
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
if [ -d .claude ] && [ ! -L .claude ] && [ -n "$(ls -A .claude 2>/dev/null)" ]; then
|
|
46
|
+
echo "Error: .claude/ exists as a real directory with contents. Move or remove it, then re-run /update_instructions." >&2
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
mv .cursor .agents
|
|
50
|
+
echo "Migrated .cursor/ → .agents/"
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Create symlinks if absent
|
|
54
|
+
[ -e .cursor ] || ln -s .agents .cursor
|
|
55
|
+
[ -e .claude ] || ln -s .agents .claude
|
|
56
|
+
[ -e .mcp.json ] || ln -s .agents/mcp.json .mcp.json
|
|
57
|
+
```
|
|
17
58
|
|
|
18
|
-
|
|
59
|
+
Report to user:
|
|
19
60
|
|
|
20
|
-
|
|
61
|
+
> Layout ready: `.agents/` (canonical), with `.cursor`, `.claude`, and `.mcp.json` symlinks for tool compatibility.
|
|
21
62
|
|
|
22
63
|
---
|
|
23
64
|
|
|
24
|
-
## Step
|
|
65
|
+
## Step 2: Check Current Version
|
|
25
66
|
|
|
26
67
|
Read the current installed version:
|
|
27
68
|
|
|
28
69
|
```bash
|
|
29
|
-
cat .
|
|
70
|
+
cat .agents/.aether-instructions-version 2>/dev/null || echo "Not installed"
|
|
30
71
|
```
|
|
31
72
|
|
|
32
73
|
Report to user:
|
|
@@ -35,7 +76,7 @@ Report to user:
|
|
|
35
76
|
|
|
36
77
|
---
|
|
37
78
|
|
|
38
|
-
## Step
|
|
79
|
+
## Step 3: Check Latest Version
|
|
39
80
|
|
|
40
81
|
Query npm for the latest version:
|
|
41
82
|
|
|
@@ -51,7 +92,7 @@ Compare with current:
|
|
|
51
92
|
|
|
52
93
|
---
|
|
53
94
|
|
|
54
|
-
## Step
|
|
95
|
+
## Step 4: Download Package
|
|
55
96
|
|
|
56
97
|
Create a temporary directory and download the package:
|
|
57
98
|
|
|
@@ -70,12 +111,12 @@ The extracted content is in `$TEMP_DIR/package/`.
|
|
|
70
111
|
|
|
71
112
|
---
|
|
72
113
|
|
|
73
|
-
## Step
|
|
114
|
+
## Step 5: Delete Previously Installed Files
|
|
74
115
|
|
|
75
|
-
Read the manifest and delete listed paths. **Skip blank lines** — an empty `rel` would run `rm -rf ".
|
|
116
|
+
Read the manifest and delete listed paths. **Skip blank lines** — an empty `rel` would run `rm -rf ".agents/"` and wipe the whole directory. Entries prefixed with `root/` point at files at the repo root (currently `AGENTS.md` and `CLAUDE.md`); only remove **regular files** there, never directories.
|
|
76
117
|
|
|
77
118
|
```bash
|
|
78
|
-
if [ -f .
|
|
119
|
+
if [ -f .agents/.aether-instructions-manifest ]; then
|
|
79
120
|
while IFS= read -r rel || [ -n "$rel" ]; do
|
|
80
121
|
[ -z "$rel" ] && continue
|
|
81
122
|
case "$rel" in
|
|
@@ -85,40 +126,41 @@ if [ -f .cursor/.aether-instructions-manifest ]; then
|
|
|
85
126
|
[ -f "$target" ] && rm -f "$target"
|
|
86
127
|
;;
|
|
87
128
|
*)
|
|
88
|
-
rm -rf ".
|
|
129
|
+
rm -rf ".agents/$rel"
|
|
89
130
|
;;
|
|
90
131
|
esac
|
|
91
|
-
done < .
|
|
132
|
+
done < .agents/.aether-instructions-manifest
|
|
92
133
|
fi
|
|
93
134
|
```
|
|
94
135
|
|
|
95
|
-
Also remove the deprecated `.
|
|
136
|
+
Also remove the deprecated `.agents/rules/` directory (superseded by the `aether` skill in `.agents/skills/aether/`):
|
|
96
137
|
|
|
97
138
|
```bash
|
|
98
|
-
rm -rf .
|
|
139
|
+
rm -rf .agents/rules
|
|
99
140
|
```
|
|
100
141
|
|
|
101
142
|
---
|
|
102
143
|
|
|
103
|
-
## Step
|
|
144
|
+
## Step 6: Copy New Files
|
|
104
145
|
|
|
105
146
|
Create directories if needed:
|
|
106
147
|
|
|
107
148
|
```bash
|
|
108
|
-
mkdir -p .
|
|
149
|
+
mkdir -p .agents/commands .agents/skills
|
|
109
150
|
```
|
|
110
151
|
|
|
111
152
|
Copy files from the extracted package:
|
|
112
153
|
|
|
113
154
|
```bash
|
|
114
|
-
cp "$TEMP_DIR/package/commands/"* .
|
|
115
|
-
cp -r "$TEMP_DIR/package/skills/"* .
|
|
155
|
+
cp "$TEMP_DIR/package/commands/"* .agents/commands/ 2>/dev/null || true
|
|
156
|
+
cp -r "$TEMP_DIR/package/skills/"* .agents/skills/ 2>/dev/null || true
|
|
116
157
|
```
|
|
117
158
|
|
|
118
|
-
Copy the root-level AGENTS.md from the package to the tenant repo root, if the package ships one
|
|
159
|
+
Copy the root-level AGENTS.md and CLAUDE.md from the package to the tenant repo root, if the package ships them. `CLAUDE.md` is a one-line `@AGENTS.md` pointer so Claude Code imports the same instructions Cursor reads from `AGENTS.md`:
|
|
119
160
|
|
|
120
161
|
```bash
|
|
121
162
|
[ -f "$TEMP_DIR/package/AGENTS.md" ] && cp "$TEMP_DIR/package/AGENTS.md" ./AGENTS.md
|
|
163
|
+
[ -f "$TEMP_DIR/package/CLAUDE.md" ] && cp "$TEMP_DIR/package/CLAUDE.md" ./CLAUDE.md
|
|
122
164
|
```
|
|
123
165
|
|
|
124
166
|
### Data-mode variant overlay
|
|
@@ -126,39 +168,40 @@ Copy the root-level AGENTS.md from the package to the tenant repo root, if the p
|
|
|
126
168
|
If this project uses **mcp-only** (or another non-default mode), re-apply the same overlay `init-project.js` uses. Read the saved mode:
|
|
127
169
|
|
|
128
170
|
```bash
|
|
129
|
-
MODE=$(tr -d '\n' < .
|
|
171
|
+
MODE=$(tr -d '\n' < .agents/.aether-data-mode 2>/dev/null || echo "api-mcp")
|
|
130
172
|
PKG="$TEMP_DIR/package"
|
|
131
173
|
if [ "$MODE" != "api-mcp" ] && [ -d "$PKG/variants/$MODE/commands" ]; then
|
|
132
|
-
cp "$PKG/variants/$MODE/commands/"* .
|
|
174
|
+
cp "$PKG/variants/$MODE/commands/"* .agents/commands/ 2>/dev/null || true
|
|
133
175
|
fi
|
|
134
176
|
if [ "$MODE" != "api-mcp" ] && [ -d "$PKG/variants/$MODE/skills" ]; then
|
|
135
177
|
# Overlay per-file so default skill topics survive
|
|
136
178
|
for src_dir in "$PKG/variants/$MODE/skills/"*/; do
|
|
137
179
|
[ -d "$src_dir" ] || continue
|
|
138
180
|
dir_name=$(basename "$src_dir")
|
|
139
|
-
mkdir -p ".
|
|
140
|
-
cp "$src_dir"* ".
|
|
181
|
+
mkdir -p ".agents/skills/$dir_name"
|
|
182
|
+
cp "$src_dir"* ".agents/skills/$dir_name/" 2>/dev/null || true
|
|
141
183
|
done
|
|
142
184
|
fi
|
|
143
185
|
if [ "$MODE" = "mcp-only" ]; then
|
|
144
|
-
rm -rf .
|
|
186
|
+
rm -rf .agents/skills/elemental-api
|
|
145
187
|
fi
|
|
146
188
|
```
|
|
147
189
|
|
|
148
|
-
If `.
|
|
190
|
+
If `.agents/.aether-data-mode` is missing, skip the overlay (defaults to **api-mcp**).
|
|
149
191
|
|
|
150
192
|
---
|
|
151
193
|
|
|
152
|
-
## Step
|
|
194
|
+
## Step 7: Write Manifest and Version Marker
|
|
153
195
|
|
|
154
|
-
Build a manifest of all installed files (one relative path per line). **Do not** build a string with a leading `\n` — that writes a blank first line and breaks Step
|
|
196
|
+
Build a manifest of all installed files (one relative path per line). **Do not** build a string with a leading `\n` — that writes a blank first line and breaks Step 5. Prefer one `echo` per line:
|
|
155
197
|
|
|
156
198
|
```bash
|
|
157
199
|
{
|
|
158
|
-
for f in .
|
|
159
|
-
for d in .
|
|
200
|
+
for f in .agents/commands/*.md; do [ -f "$f" ] && echo "commands/$(basename "$f")"; done
|
|
201
|
+
for d in .agents/skills/*/; do [ -d "$d" ] && echo "skills/$(basename "$d")"; done
|
|
160
202
|
[ -f "$TEMP_DIR/package/AGENTS.md" ] && [ -f ./AGENTS.md ] && echo "root/AGENTS.md"
|
|
161
|
-
|
|
203
|
+
[ -f "$TEMP_DIR/package/CLAUDE.md" ] && [ -f ./CLAUDE.md ] && echo "root/CLAUDE.md"
|
|
204
|
+
} > .agents/.aether-instructions-manifest
|
|
162
205
|
```
|
|
163
206
|
|
|
164
207
|
If the repo uses **bash** for this loop and a glob might match nothing, run `shopt -s nullglob` first so the loops don't treat `*.md` as a literal filename.
|
|
@@ -166,12 +209,12 @@ If the repo uses **bash** for this loop and a glob might match nothing, run `sho
|
|
|
166
209
|
Write the version marker:
|
|
167
210
|
|
|
168
211
|
```bash
|
|
169
|
-
grep -o '"version": *"[^"]*"' "$TEMP_DIR/package/package.json" | grep -o '[0-9][^"]*' > .
|
|
212
|
+
grep -o '"version": *"[^"]*"' "$TEMP_DIR/package/package.json" | grep -o '[0-9][^"]*' > .agents/.aether-instructions-version
|
|
170
213
|
```
|
|
171
214
|
|
|
172
215
|
---
|
|
173
216
|
|
|
174
|
-
## Step
|
|
217
|
+
## Step 8: Cleanup
|
|
175
218
|
|
|
176
219
|
Remove the temporary directory:
|
|
177
220
|
|
|
@@ -181,14 +224,14 @@ rm -rf "$TEMP_DIR"
|
|
|
181
224
|
|
|
182
225
|
---
|
|
183
226
|
|
|
184
|
-
## Step
|
|
227
|
+
## Step 9: Report Changes
|
|
185
228
|
|
|
186
229
|
Count what was installed:
|
|
187
230
|
|
|
188
231
|
```bash
|
|
189
|
-
wc -l < .
|
|
190
|
-
ls .
|
|
191
|
-
ls -d .
|
|
232
|
+
wc -l < .agents/.aether-instructions-manifest
|
|
233
|
+
ls .agents/commands/*.md 2>/dev/null | wc -l
|
|
234
|
+
ls -d .agents/skills/*/ 2>/dev/null | wc -l
|
|
192
235
|
```
|
|
193
236
|
|
|
194
237
|
Report to user:
|
|
@@ -200,16 +243,24 @@ Report to user:
|
|
|
200
243
|
|
|
201
244
|
---
|
|
202
245
|
|
|
203
|
-
## Step
|
|
246
|
+
## Step 10: Commit Changes
|
|
204
247
|
|
|
205
|
-
Commit the updated instruction files. A root `.gitignore` rule like `skills/` can **ignore** `.
|
|
248
|
+
Commit the updated instruction files and (on first migration) the new symlinks. A root `.gitignore` rule like `skills/` can **ignore** `.agents/skills/`; if `git add .agents/skills/` reports ignored paths, force-add:
|
|
206
249
|
|
|
207
250
|
```bash
|
|
208
|
-
git add .
|
|
209
|
-
git add -f .
|
|
251
|
+
git add .agents/commands/ .agents/.aether-instructions-version .agents/.aether-instructions-manifest
|
|
252
|
+
git add -f .agents/skills/
|
|
253
|
+
# Symlinks (no-ops if they were already tracked)
|
|
254
|
+
[ -L .cursor ] && git add .cursor
|
|
255
|
+
[ -L .claude ] && git add .claude
|
|
256
|
+
[ -L .mcp.json ] && git add .mcp.json
|
|
210
257
|
[ -f AGENTS.md ] && git add AGENTS.md
|
|
258
|
+
[ -f CLAUDE.md ] && git add CLAUDE.md
|
|
211
259
|
# Remove the legacy rules dir from tracking if it was committed in an earlier install
|
|
212
|
-
git rm -rf --cached --ignore-unmatch .
|
|
260
|
+
git rm -rf --cached --ignore-unmatch .agents/rules 2>/dev/null || true
|
|
261
|
+
# If we just migrated, drop the old .cursor/ path from tracking so git records the symlink instead of the directory
|
|
262
|
+
git rm -rf --cached --ignore-unmatch .cursor 2>/dev/null || true
|
|
263
|
+
[ -L .cursor ] && git add .cursor
|
|
213
264
|
git commit -m "Update instructions to vX.Y.Z"
|
|
214
265
|
```
|
|
215
266
|
|
|
@@ -231,20 +282,26 @@ If `npm pack` fails with a registry error:
|
|
|
231
282
|
|
|
232
283
|
If you get permission errors:
|
|
233
284
|
|
|
234
|
-
> Try running with appropriate permissions, or check that `.
|
|
285
|
+
> Try running with appropriate permissions, or check that `.agents/` is writable.
|
|
235
286
|
|
|
236
287
|
### Want to customize a command, skill topic, or AGENTS.md?
|
|
237
288
|
|
|
238
|
-
If you need to modify a package-provided file (including the root `AGENTS.md`):
|
|
289
|
+
If you need to modify a package-provided file (including the root `AGENTS.md` or `CLAUDE.md`):
|
|
239
290
|
|
|
240
291
|
1. Edit it directly — your changes will persist until the next update
|
|
241
292
|
2. To preserve changes across updates, copy it to a new name first (e.g. `cp AGENTS.md AGENTS.local.md`)
|
|
242
|
-
3. Remove the original's entry from `.
|
|
293
|
+
3. Remove the original's entry from `.agents/.aether-instructions-manifest` so it won't be deleted on update (for `AGENTS.md`, remove the `root/AGENTS.md` line; for `CLAUDE.md`, remove `root/CLAUDE.md`)
|
|
294
|
+
|
|
295
|
+
`CLAUDE.md` ships as a one-line `@AGENTS.md` pointer — Claude Code imports `AGENTS.md` via that syntax, so in most cases you only need to edit `AGENTS.md`.
|
|
296
|
+
|
|
297
|
+
### Blank line in manifest deleted `.agents/`
|
|
298
|
+
|
|
299
|
+
Regenerate the manifest with Step 7 (echo-per-line form). Ensure Step 5 skips empty lines.
|
|
243
300
|
|
|
244
|
-
###
|
|
301
|
+
### `git add` says `.agents/skills` is ignored
|
|
245
302
|
|
|
246
|
-
|
|
303
|
+
Use `git add -f .agents/skills/` as in Step 10, or narrow `.gitignore` so `skills/` only ignores the project `skills/` folder (e.g. `/skills/` at repo root) instead of every `skills` path.
|
|
247
304
|
|
|
248
|
-
###
|
|
305
|
+
### Migration aborted (collision)
|
|
249
306
|
|
|
250
|
-
|
|
307
|
+
If Step 1 aborts because `.cursor/` and a real `.agents/` both exist, or `.claude/` has hand-written contents: decide which source is authoritative, back up the other, then re-run.
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yottagraph-app/aether-instructions",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.45",
|
|
4
4
|
"description": "Cursor commands and skills for Aether development",
|
|
5
5
|
"files": [
|
|
6
6
|
"commands",
|
|
7
7
|
"skills",
|
|
8
8
|
"variants",
|
|
9
|
-
"AGENTS.md"
|
|
9
|
+
"AGENTS.md",
|
|
10
|
+
"CLAUDE.md"
|
|
10
11
|
],
|
|
11
12
|
"repository": {
|
|
12
13
|
"type": "git",
|
package/skills/aether/SKILL.md
CHANGED
|
@@ -54,4 +54,4 @@ topics that apply.
|
|
|
54
54
|
| [cursor-cloud.md](cursor-cloud.md) | Cursor Cloud environment quirks (Node managed by env, dev server auto-started, skip browser testing during initial setup). Read when `$HOME` is under `/root` or `/home/ubuntu`, or when a dev-server terminal was auto-started. |
|
|
55
55
|
| [git-support.md](git-support.md) | Git commit workflow and conventions. Read when finishing implementation work, making commits, or troubleshooting git/pre-commit failures. |
|
|
56
56
|
| [something-broke.md](something-broke.md) | Error recovery and build failure troubleshooting. Read when something broke, build failed, `npm run build` errors, or the user wants to restore previous behavior. |
|
|
57
|
-
| [instructions_warning.md](instructions_warning.md) | Warning about editing `.
|
|
57
|
+
| [instructions_warning.md](instructions_warning.md) | Warning about editing `.agents/` files managed by `@yottagraph-app/aether-instructions`. Read before modifying installed instruction files. |
|
|
@@ -35,7 +35,7 @@ Lovelace MCP servers (`lovelace-elemental`, `lovelace-stocks`, etc.)
|
|
|
35
35
|
should be available if configured at the org level. Check your tool list
|
|
36
36
|
for `elemental_*` tools. If they're not available, use the Elemental API
|
|
37
37
|
client (`useElementalClient()`) and the skill docs in
|
|
38
|
-
`.
|
|
38
|
+
`.agents/skills/elemental-api/` and `.agents/skills/data-model/` for platform data access instead.
|
|
39
39
|
|
|
40
40
|
### Technical details
|
|
41
41
|
|
package/skills/aether/data.md
CHANGED
|
@@ -13,14 +13,14 @@ regularly — use the discovery-first pattern to find what's available.
|
|
|
13
13
|
## Skill Documentation
|
|
14
14
|
|
|
15
15
|
For endpoint reference, response shapes, and edge cases, **read the
|
|
16
|
-
elemental-api skill** in `.
|
|
16
|
+
elemental-api skill** in `.agents/skills/elemental-api/` (start with `SKILL.md` and
|
|
17
17
|
follow the skill’s own structure). Files are copied from
|
|
18
18
|
`@yottagraph-app/aether-instructions` (installed during project init). If
|
|
19
19
|
the directory is missing, run `/update_instructions` to install it.
|
|
20
20
|
|
|
21
21
|
## Data model skill
|
|
22
22
|
|
|
23
|
-
For Lovelace **entity types, properties, relationships, and per-source schemas** (EDGAR, FRED, FDIC, etc.), read the **data-model skill** in `.
|
|
23
|
+
For Lovelace **entity types, properties, relationships, and per-source schemas** (EDGAR, FRED, FDIC, etc.), read the **data-model skill** in `.agents/skills/data-model/`. Start with `SKILL.md`, then `overview.md` and the source-specific folders. Both skills are distributed via `@yottagraph-app/aether-instructions` and installed during project init.
|
|
24
24
|
|
|
25
25
|
## Test Before You Build
|
|
26
26
|
|
|
@@ -494,7 +494,7 @@ if (response.status === 404) {
|
|
|
494
494
|
|
|
495
495
|
## Lovelace MCP Servers
|
|
496
496
|
|
|
497
|
-
Four MCP servers may be configured in `.
|
|
497
|
+
Four MCP servers may be configured in `.agents/mcp.json` for interactive
|
|
498
498
|
data exploration. **Check your tool list** — if tools like
|
|
499
499
|
`elemental_get_schema` appear, use them as your primary testing and
|
|
500
500
|
exploration interface before writing code. If they don't appear, the
|
|
@@ -526,7 +526,7 @@ building REST-based features with `useElementalClient()`.
|
|
|
526
526
|
|
|
527
527
|
### Setup
|
|
528
528
|
|
|
529
|
-
`.
|
|
529
|
+
`.agents/mcp.json` is auto-generated by `init-project.js`. If it's missing,
|
|
530
530
|
run `node init-project.js --local` to regenerate it. For provisioned projects,
|
|
531
531
|
the servers route through the Portal Gateway proxy (no credentials needed).
|
|
532
532
|
For local development without a gateway, the servers require an
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
**You are editing a file managed by the `@yottagraph-app/aether-instructions` package.**
|
|
4
4
|
|
|
5
|
-
Package-managed files are tracked by `.
|
|
5
|
+
Package-managed files are tracked by `.agents/.aether-instructions-manifest`.
|
|
6
6
|
They will be **overwritten** when you run `/update_instructions`.
|
|
7
7
|
|
|
8
|
-
This includes files under `.
|
|
9
|
-
root `AGENTS.md`** (tracked as `root/AGENTS.md`
|
|
8
|
+
This includes files under `.agents/commands/`, `.agents/skills/`, **and the
|
|
9
|
+
root `AGENTS.md` and `CLAUDE.md`** (tracked as `root/AGENTS.md` and
|
|
10
|
+
`root/CLAUDE.md` in the manifest).
|
|
11
|
+
|
|
12
|
+
`.cursor`, `.claude`, and `.mcp.json` are symlinks into `.agents/`, so any
|
|
13
|
+
path you see under those resolves to the same managed file.
|
|
10
14
|
|
|
11
15
|
## Do Not
|
|
12
16
|
|
|
@@ -14,33 +18,37 @@ root `AGENTS.md`** (tracked as `root/AGENTS.md` in the manifest).
|
|
|
14
18
|
|
|
15
19
|
## To Customize
|
|
16
20
|
|
|
17
|
-
If you need to modify a package-provided command, skill topic, or the root `AGENTS.md`:
|
|
21
|
+
If you need to modify a package-provided command, skill topic, or the root `AGENTS.md` / `CLAUDE.md`:
|
|
18
22
|
|
|
19
23
|
1. **Copy** the file to a new name
|
|
20
24
|
2. Make your changes to the copy
|
|
21
|
-
3. Remove the original's entry from `.
|
|
25
|
+
3. Remove the original's entry from `.agents/.aether-instructions-manifest`
|
|
22
26
|
so it won't be replaced on update
|
|
23
27
|
|
|
24
28
|
Examples:
|
|
25
29
|
|
|
26
30
|
```bash
|
|
27
31
|
# Customize a skill topic
|
|
28
|
-
cp .
|
|
32
|
+
cp .agents/skills/aether/data.md .agents/skills/aether/data_custom.md
|
|
29
33
|
|
|
30
34
|
# Customize AGENTS.md
|
|
31
35
|
cp AGENTS.md AGENTS.local.md
|
|
32
36
|
# then remove the `root/AGENTS.md` line from
|
|
33
|
-
# .
|
|
37
|
+
# .agents/.aether-instructions-manifest
|
|
38
|
+
|
|
39
|
+
# Customize CLAUDE.md
|
|
40
|
+
cp CLAUDE.md CLAUDE.local.md
|
|
41
|
+
# then remove the `root/CLAUDE.md` line from the manifest
|
|
34
42
|
|
|
35
43
|
# Edit your copy — it won't be affected by instruction updates
|
|
36
44
|
```
|
|
37
45
|
|
|
38
46
|
## How It Works
|
|
39
47
|
|
|
40
|
-
- `.
|
|
48
|
+
- `.agents/.aether-instructions-manifest` lists every file installed by the
|
|
41
49
|
package (one relative path per line, e.g. `skills/aether/data.md`). Entries
|
|
42
50
|
prefixed with `root/` refer to files at the tenant repo root
|
|
43
|
-
(currently
|
|
51
|
+
(currently `root/AGENTS.md` and `root/CLAUDE.md`).
|
|
44
52
|
- `/update_instructions` deletes manifest entries, extracts fresh files from
|
|
45
53
|
the latest package, and writes a new manifest
|
|
46
54
|
- Files not in the manifest are never touched
|
|
@@ -88,7 +88,7 @@ Deploy with the `/deploy_mcp` Cursor command. This will:
|
|
|
88
88
|
2. Deploy to Cloud Run with IAM authentication
|
|
89
89
|
3. Grant invoker permissions to tenant and Portal service accounts
|
|
90
90
|
4. Register the server in Firestore (via the Portal API)
|
|
91
|
-
5. Add the server to `.
|
|
91
|
+
5. Add the server to `.agents/mcp.json` for agent access (Cursor and Claude Code)
|
|
92
92
|
|
|
93
93
|
## Connecting MCP Servers to Agents
|
|
94
94
|
|
|
@@ -55,7 +55,7 @@ If design reference images exist (screenshots from Figma or other design tools):
|
|
|
55
55
|
|
|
56
56
|
1. **Examine each image** — these are design mockups from the project creator showing what the app should look like.
|
|
57
57
|
2. Describe what you see in each image: layout structure, navigation patterns, component types, color usage, typography.
|
|
58
|
-
3. Map visual elements to **Vuetify components** (cards = `v-card`, data tables = `v-data-table`, navigation drawers = `v-navigation-drawer`, app bars = `v-app-bar`, etc.). If a `vuetify-figma` skill is available in `.
|
|
58
|
+
3. Map visual elements to **Vuetify components** (cards = `v-card`, data tables = `v-data-table`, navigation drawers = `v-navigation-drawer`, app bars = `v-app-bar`, etc.). If a `vuetify-figma` skill is available in `.agents/skills/`, read it for detailed component mapping guidance.
|
|
59
59
|
4. Use the design references alongside the Vision text to plan the UX. The images show _what it should look like_; the Vision text explains _what it should do_.
|
|
60
60
|
|
|
61
61
|
If a Figma URL is referenced in DESIGN.md, note it for the user but don't attempt to fetch it — work from the uploaded screenshots and the text brief.
|
|
@@ -66,15 +66,15 @@ If a Figma URL is referenced in DESIGN.md, note it for the user but don't attemp
|
|
|
66
66
|
|
|
67
67
|
Check if Lovelace MCP tools are available (e.g. `elemental_get_schema`, `elemental_get_entity`). Use them while **authoring agents** and validating graph behavior.
|
|
68
68
|
|
|
69
|
-
**If MCP tools are NOT available**, check `.
|
|
69
|
+
**If MCP tools are NOT available**, check `.agents/mcp.json`:
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
|
-
cat .
|
|
72
|
+
cat .agents/mcp.json 2>/dev/null
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
If the file exists but tools aren't active yet:
|
|
76
76
|
|
|
77
|
-
> Your project has Lovelace MCP servers configured (`.
|
|
77
|
+
> Your project has Lovelace MCP servers configured (`.agents/mcp.json`), but they don't appear to be active yet. Cursor disables new MCP servers by default.
|
|
78
78
|
>
|
|
79
79
|
> Open **Cursor Settings** (Cmd+Shift+J on macOS) → **Tools & MCP** and enable the `lovelace-*` servers listed there. They should show green toggles when active. Let me know when they're enabled (or if you'd like to skip this).
|
|
80
80
|
|
|
@@ -86,7 +86,7 @@ The **Nuxt** layer may combine **your APIs** (often Postgres-backed), **chat** v
|
|
|
86
86
|
|
|
87
87
|
## Step 3: Understand the Environment
|
|
88
88
|
|
|
89
|
-
Run `npm install` / `node init-project.js` as needed so `.
|
|
89
|
+
Run `npm install` / `node init-project.js` as needed so `.agents/skills/` includes **`data-model`** (no `elemental-api` skill in this mode).
|
|
90
90
|
|
|
91
91
|
Read:
|
|
92
92
|
|