You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore(agent): rename guidance directory to docs-ai
Move the repository-owned agent guidance from ai/ to docs-ai/ and update Codex, Claude Code, Cursor, README, docs, and area AGENTS pointers. Keep the directory tool-neutral while making its purpose more obvious as documentation.
Copy file name to clipboardExpand all lines: .cursor/rules/00-core.mdc
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ alwaysApply: true
8
8
9
9
Hecate is an open-source AI gateway and agent-task runtime. The Go gateway embeds the React operator UI, mediates OpenAI- and Anthropic-shaped client traffic, runs queued `agent_loop` tasks with policy and approval gates, and emits OpenTelemetry traces for everything it does. Companion entrypoints such as `hecate-acp` handle protocols that need their own process lifecycle.
10
10
11
-
The canonical, vendor-neutral instruction layer for this repo lives in [`ai/`](../../ai/README.md). Start there. This file is a thin Cursor adapter listing the top-level non-negotiables.
11
+
The canonical, vendor-neutral instruction layer for this repo lives in [`docs-ai/`](../../docs-ai/README.md). Start there. This file is a thin Cursor adapter listing the top-level non-negotiables.
12
12
13
13
## Non-negotiables
14
14
@@ -25,7 +25,7 @@ The canonical, vendor-neutral instruction layer for this repo lives in [`ai/`](.
25
25
26
26
## Pointers
27
27
28
-
- Full project context: [`ai/core/project-context.md`](../../ai/core/project-context.md).
Copy file name to clipboardExpand all lines: .cursor/rules/10-planning.mdc
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -31,9 +31,9 @@ Substantial changes get a plan before code. Trivial changes (typo fixes, single-
31
31
32
32
`pkg/types/chat.go` → `internal/api/openai.go` (request struct) → `internal/api/handler_chat.go` (`normalizeChatRequest`) → `internal/providers/openai.go` (lowercase parallel struct) → **both `Chat` and `ChatStream` `wireReq` constructions** in that same file → `internal/providers/anthropic.go` `warnUnsupportedFieldsDropped` → tests at every layer. Forgetting the streaming `wireReq` is the most common bug.
33
33
34
-
Full chain with file references: [`ai/skills/providers/SKILL.md`](../../ai/skills/providers/SKILL.md).
34
+
Full chain with file references: [`docs-ai/skills/providers/SKILL.md`](../../docs-ai/skills/providers/SKILL.md).
35
35
36
36
## Pointers
37
37
38
-
- Plan format: [`ai/tasks/planning.md`](../../ai/tasks/planning.md).
internal/orchestrator/ (sits above api, drives runs through providers)
86
86
```
87
87
88
-
The api↔providers parallel-struct duplication (`OpenAIChatMessage` ↔ `openAIChatMessage`) is intentional — it keeps `internal/providers/` free of `internal/api/` imports. Full rationale: [`ai/skills/providers/SKILL.md`](ai/skills/providers/SKILL.md).
88
+
The api↔providers parallel-struct duplication (`OpenAIChatMessage` ↔ `openAIChatMessage`) is intentional — it keeps `internal/providers/` free of `internal/api/` imports. Full rationale: [`docs-ai/skills/providers/SKILL.md`](docs-ai/skills/providers/SKILL.md).
89
89
90
90
**Storage tier rule**: every backend-bound concern mirrors two tiers —
91
91
memory (default) and sqlite (`modernc.org/sqlite`, no CGO).
Full standards: [`ai/core/engineering-standards.md`](ai/core/engineering-standards.md).
108
+
Full standards: [`docs-ai/core/engineering-standards.md`](docs-ai/core/engineering-standards.md).
109
109
110
110
-**Comments explain *why***, not what. State the trade-off.
111
111
-**Pointer vs value for optional fields**: pointer when zero is a valid
@@ -118,7 +118,7 @@ Full standards: [`ai/core/engineering-standards.md`](ai/core/engineering-standar
118
118
119
119
## Verification
120
120
121
-
Full ladder: [`ai/core/verification.md`](ai/core/verification.md).
121
+
Full ladder: [`docs-ai/core/verification.md`](docs-ai/core/verification.md).
122
122
123
123
-**Race suite is the floor for runtime/backend changes**: `go test -race -timeout 10m ./...` (or `/race`). Race builds are large; if your default `$GOCACHE` is on a small volume, point it at the repo: `GOCACHE="$(pwd)/.gocache" go test -race ...`.
124
124
-**Iteration**: `/test-affected` for narrow runs.
@@ -129,11 +129,11 @@ Full ladder: [`ai/core/verification.md`](ai/core/verification.md).
129
129
130
130
| Task | Where |
131
131
|---|---|
132
-
| Add a passthrough wire field (the seven-step chain — most-redone task here) |[`ai/skills/providers/SKILL.md`](ai/skills/providers/SKILL.md)|
133
-
| Add an MCP tool / persisted run-event type / test helper cheat-sheet |[`ai/skills/backend/SKILL.md`](ai/skills/backend/SKILL.md)|
| Cut a release tag |`bun scripts/release.ts vX.Y.Z` — checks worktree, snapshot dry-run, stamps Tauri versions, tags, pushes. Full procedure: [`ai/tasks/release.md`](ai/tasks/release.md)|
132
+
| Add a passthrough wire field (the seven-step chain — most-redone task here) |[`docs-ai/skills/providers/SKILL.md`](docs-ai/skills/providers/SKILL.md)|
133
+
| Add an MCP tool / persisted run-event type / test helper cheat-sheet |[`docs-ai/skills/backend/SKILL.md`](docs-ai/skills/backend/SKILL.md)|
| Cut a release tag |`bun scripts/release.ts vX.Y.Z` — checks worktree, snapshot dry-run, stamps Tauri versions, tags, pushes. Full procedure: [`docs-ai/tasks/release.md`](docs-ai/tasks/release.md)|
137
137
| Stamp Tauri version files |`bun scripts/stamp-version.ts` (or `make tauri-version`) — syncs Cargo.toml, package.json, tauri.conf.json to current git tag |
138
138
139
139
## Gotchas
@@ -142,7 +142,7 @@ Full ladder: [`ai/core/verification.md`](ai/core/verification.md).
142
142
-**modernc/sqlite TIME-as-text format**: the driver writes `time.Time` using Go's default `time.Time.String()` format, which doesn't lex-compare with RFC3339Nano cutoffs and silently breaks the retention sweep. Always write timestamps as `t.UTC().Format(time.RFC3339Nano)` when the column is TEXT (see `internal/taskstate/sqlite.go``AppendRunEvent`).
143
143
-**OpenAI/openAI parallel structs are intentional**: don't unify. Mirror fields when adding on either side.
144
144
-**Streaming `wireReq` plumbing**: when adding a passthrough field, plumb it into BOTH `Chat` and `ChatStream``wireReq` constructions in `internal/providers/openai.go`. Forgetting one is the most common provider bug — non-stream tests pass; the field silently drops in production for any client using `stream: true`.
145
-
-**Capability-cache seeding** for provider tests: seed `cachedCaps` and `capsExpiry` to skip the discovery path. Snippet in [`ai/skills/providers/SKILL.md`](ai/skills/providers/SKILL.md).
145
+
-**Capability-cache seeding** for provider tests: seed `cachedCaps` and `capsExpiry` to skip the discovery path. Snippet in [`docs-ai/skills/providers/SKILL.md`](docs-ai/skills/providers/SKILL.md).
146
146
-**Pricebook preflight** in tests: `PROVIDER_FAKE_KIND=local` for synthetic models in e2e.
147
147
-**mermaid `loop` is a reserved keyword**: don't use it as a sequence-diagram participant name. Use `Agent` or similar.
148
148
-**CodeQL CWE-190**: don't compute `make([]T, 0, len(x)+N)` with arithmetic — use plain `len(x)` and let `append` grow.
This is the Hecate repo — an open-source AI gateway and agent-task runtime (Go gateway with embedded React UI plus companion integration entrypoints). Shared agent guidance lives in [`ai/`](ai/README.md). This file is a thin Claude-specific adapter; the substance lives there.
3
+
This is the Hecate repo — an open-source AI gateway and agent-task runtime (Go gateway with embedded React UI plus companion integration entrypoints). Shared agent guidance lives in [`docs-ai/`](docs-ai/README.md). This file is a thin Claude-specific adapter; the substance lives there.
4
4
5
5
## Start here
6
6
7
-
[`ai/README.md`](ai/README.md) is the entry point and map.
7
+
[`docs-ai/README.md`](docs-ai/README.md) is the entry point and map.
8
8
9
9
## When working on this repo
10
10
11
11
Pick the right skill for the change:
12
12
13
-
-**Backend** (anything outside `ui/` and `tauri/`) — [`hecate-backend`](ai/skills/backend/SKILL.md).
-**Provider adapters** (`internal/providers/`, anything that crosses the api↔providers boundary) — [`hecate-providers`](ai/skills/providers/SKILL.md). Owns the canonical seven-step "add a wire field" chain.
17
-
-**Planning a substantial change** — [`hecate-architect`](ai/skills/architect/SKILL.md). Produces a plan, not code.
-**Provider adapters** (`internal/providers/`, anything that crosses the api↔providers boundary) — [`hecate-providers`](docs-ai/skills/providers/SKILL.md). Owns the canonical seven-step "add a wire field" chain.
17
+
-**Planning a substantial change** — [`hecate-architect`](docs-ai/skills/architect/SKILL.md). Produces a plan, not code.
@@ -28,8 +28,8 @@ Pick the right skill for the change:
28
28
29
29
## Repo policy
30
30
31
-
Shared agent guidance is repository-owned and committed. There is no `.local` override layer and no personal customization tier. If a rule belongs in agent context, it lives in [`ai/`](ai/README.md), in the open, under version control.
31
+
Shared agent guidance is repository-owned and committed. There is no `.local` override layer and no personal customization tier. If a rule belongs in agent context, it lives in [`docs-ai/`](docs-ai/README.md), in the open, under version control.
32
32
33
33
## Note on `AGENTS.md`
34
34
35
-
[`AGENTS.md`](AGENTS.md) at the repo root, [`ui/AGENTS.md`](ui/AGENTS.md), and [`internal/providers/AGENTS.md`](internal/providers/AGENTS.md) are the codebase map and the Codex-discoverable entry points. They stay scoped to map-and-recipes; conventions and longer guidance live in [`ai/`](ai/README.md).
35
+
[`AGENTS.md`](AGENTS.md) at the repo root, [`ui/AGENTS.md`](ui/AGENTS.md), and [`internal/providers/AGENTS.md`](internal/providers/AGENTS.md) are the codebase map and the Codex-discoverable entry points. They stay scoped to map-and-recipes; conventions and longer guidance live in [`docs-ai/`](docs-ai/README.md).
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -219,7 +219,7 @@ First-run environment knobs live in [`.env.example`](.env.example).
219
219
220
220
## Contributing
221
221
222
-
See [CONTRIBUTING.md](CONTRIBUTING.md). If you work with an AI assistant, start with [AGENTS.md](AGENTS.md); the vendor-neutral agent instruction layer lives in [ai/](ai/README.md).
222
+
See [CONTRIBUTING.md](CONTRIBUTING.md). If you work with an AI assistant, start with [AGENTS.md](AGENTS.md); the vendor-neutral agent instruction layer lives in [docs-ai/](docs-ai/README.md).
0 commit comments