@contentrain/skills 0.2.1 → 0.3.0
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/README.md +24 -2
- package/package.json +8 -2
- package/skills/contentrain/SKILL.md +48 -0
- package/skills/contentrain-bulk/SKILL.md +7 -0
- package/skills/contentrain-content/SKILL.md +27 -0
- package/skills/contentrain-diff/SKILL.md +15 -0
- package/skills/contentrain-doctor/SKILL.md +7 -0
- package/skills/contentrain-generate/SKILL.md +7 -0
- package/skills/contentrain-generate/references/generated-client.md +9 -7
- package/skills/contentrain-init/SKILL.md +18 -1
- package/skills/contentrain-model/SKILL.md +7 -0
- package/skills/contentrain-normalize/SKILL.md +65 -0
- package/skills/contentrain-quality/SKILL.md +7 -0
- package/skills/contentrain-review/SKILL.md +6 -0
- package/skills/contentrain-sdk/SKILL.md +34 -2
- package/skills/contentrain-serve/SKILL.md +7 -0
- package/skills/contentrain-translate/SKILL.md +15 -0
- package/skills/contentrain-validate-fix/SKILL.md +6 -0
package/README.md
CHANGED
|
@@ -1,24 +1,46 @@
|
|
|
1
1
|
# `@contentrain/skills`
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@contentrain/skills)
|
|
4
|
+
[](https://agentskills.io)
|
|
4
5
|
[](https://github.com/Contentrain/ai/tree/main/packages/skills)
|
|
6
|
+
[](https://ai.contentrain.io/packages/skills)
|
|
5
7
|
|
|
6
8
|
Workflow skills and framework guides for Contentrain-aware AI agents.
|
|
7
9
|
|
|
10
|
+
Start here:
|
|
11
|
+
|
|
12
|
+
- [2-minute product demo](https://ai.contentrain.io/demo)
|
|
13
|
+
- [Rules & skills docs](https://ai.contentrain.io/packages/rules)
|
|
14
|
+
- [Framework integration guide](https://ai.contentrain.io/guides/frameworks)
|
|
15
|
+
|
|
8
16
|
This package follows the [Agent Skills standard](https://agentskills.io) for progressive disclosure: each skill has a `SKILL.md` (loaded on activation) and optional `references/` (loaded on demand).
|
|
9
17
|
|
|
10
18
|
## Install
|
|
11
19
|
|
|
20
|
+
### Via npm (programmatic access to catalogs and constants)
|
|
21
|
+
|
|
12
22
|
```bash
|
|
13
23
|
pnpm add @contentrain/skills
|
|
14
24
|
```
|
|
15
25
|
|
|
16
|
-
|
|
26
|
+
### Via skills CLI (install skills into your AI agent)
|
|
17
27
|
|
|
18
28
|
```bash
|
|
19
|
-
|
|
29
|
+
# Install all 15 skills
|
|
30
|
+
npx skills add Contentrain/ai/packages/skills
|
|
31
|
+
|
|
32
|
+
# Install a specific skill
|
|
33
|
+
npx skills add Contentrain/ai/packages/skills --skill contentrain-normalize
|
|
34
|
+
|
|
35
|
+
# Install to a specific agent
|
|
36
|
+
npx skills add Contentrain/ai/packages/skills --agent claude-code
|
|
37
|
+
|
|
38
|
+
# List available skills
|
|
39
|
+
npx skills add Contentrain/ai/packages/skills --list
|
|
20
40
|
```
|
|
21
41
|
|
|
42
|
+
Works with Claude Code, Cursor, Windsurf, GitHub Copilot, OpenAI Codex, Gemini CLI, and 40+ other agents.
|
|
43
|
+
|
|
22
44
|
## What It Contains
|
|
23
45
|
|
|
24
46
|
### Agent Skills (standard format)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentrain/skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "AI agent skills for Contentrain — workflow procedures, framework integration guides",
|
|
6
6
|
"type": "module",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"url": "git+https://github.com/Contentrain/ai.git",
|
|
10
10
|
"directory": "packages/skills"
|
|
11
11
|
},
|
|
12
|
-
"homepage": "https://
|
|
12
|
+
"homepage": "https://ai.contentrain.io/packages/rules#skills",
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/Contentrain/ai/issues"
|
|
15
15
|
},
|
|
@@ -17,8 +17,14 @@
|
|
|
17
17
|
"contentrain",
|
|
18
18
|
"ai",
|
|
19
19
|
"skills",
|
|
20
|
+
"agent-skills",
|
|
20
21
|
"mcp",
|
|
21
22
|
"workflow",
|
|
23
|
+
"claude-code",
|
|
24
|
+
"cursor",
|
|
25
|
+
"windsurf",
|
|
26
|
+
"copilot",
|
|
27
|
+
"codex",
|
|
22
28
|
"vue",
|
|
23
29
|
"react",
|
|
24
30
|
"nuxt",
|
|
@@ -10,6 +10,34 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
Contentrain is a Git-based, AI-first content management system. Content lives in `.contentrain/` as JSON and Markdown files, managed through MCP tools. This skill covers architecture, content formats, and tool usage.
|
|
12
12
|
|
|
13
|
+
## Ecosystem Overview
|
|
14
|
+
|
|
15
|
+
Contentrain consists of 6 packages that work together:
|
|
16
|
+
|
|
17
|
+
| Package | Role | How agent uses it |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| @contentrain/mcp | 16 MCP tools (scan, apply, validate, merge...) | MCP tool calls |
|
|
20
|
+
| contentrain (CLI) | init, serve, generate, doctor, diff, status | Shell commands |
|
|
21
|
+
| @contentrain/types | Shared TypeScript contracts | Type safety |
|
|
22
|
+
| @contentrain/query | Generated SDK client (Prisma-pattern) | `import from '#contentrain'` |
|
|
23
|
+
| @contentrain/rules | Behavioral guardrails (~86 lines, always-loaded) | Auto-loaded by IDE |
|
|
24
|
+
| @contentrain/skills | Procedural workflows (this file) | On-demand by agent |
|
|
25
|
+
|
|
26
|
+
### CLI Serve — Review & Approval Bridge
|
|
27
|
+
|
|
28
|
+
For workflows requiring human review (normalize, content review):
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
contentrain serve # http://localhost:3333
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
| Page | When to use |
|
|
35
|
+
|---|---|
|
|
36
|
+
| /normalize | Extraction/reuse preview and approval |
|
|
37
|
+
| /branches | Merge or delete pending branches |
|
|
38
|
+
| /validate | Review validation errors visually |
|
|
39
|
+
| /content | Browse models and entries |
|
|
40
|
+
|
|
13
41
|
## Architecture: Agent vs MCP
|
|
14
42
|
|
|
15
43
|
The system separates **intelligence** (agent) from **infrastructure** (MCP tools).
|
|
@@ -94,6 +122,7 @@ slug: getting-started
|
|
|
94
122
|
| `contentrain_apply` | Apply normalize operation (extract or reuse) |
|
|
95
123
|
| `contentrain_validate` | Validate content against model schemas |
|
|
96
124
|
| `contentrain_submit` | Push contentrain/* branches to remote |
|
|
125
|
+
| `contentrain_merge` | Merge a review-mode branch into contentrain locally |
|
|
97
126
|
| `contentrain_bulk` | Run batch operations on existing content |
|
|
98
127
|
|
|
99
128
|
## Calling Sequences
|
|
@@ -121,6 +150,18 @@ apply(reuse, dry_run:true) --> [review] --> apply(reuse, dry_run:false)
|
|
|
121
150
|
--> validate --> submit --> [repeat per model]
|
|
122
151
|
```
|
|
123
152
|
|
|
153
|
+
## MUST Rules
|
|
154
|
+
|
|
155
|
+
These are enforced by MCP — violating them causes errors. Know them upfront:
|
|
156
|
+
|
|
157
|
+
- MUST call `contentrain_status` before any write operation on existing projects
|
|
158
|
+
- MUST call `contentrain_describe_format` before creating models or content
|
|
159
|
+
- MUST use `dry_run: true` before `contentrain_apply` execute
|
|
160
|
+
- MUST call `contentrain_validate` before `contentrain_submit`
|
|
161
|
+
- MUST run `npx contentrain generate` after model/content changes that affect SDK
|
|
162
|
+
- MUST NOT write to `.contentrain/meta/`, `.contentrain/client/`, `.contentrain/context.json` directly
|
|
163
|
+
- MUST NOT auto-merge normalize branches (always review mode)
|
|
164
|
+
|
|
124
165
|
## Key Guardrails
|
|
125
166
|
|
|
126
167
|
1. **Always call `contentrain_status` first** when working with an existing project
|
|
@@ -147,3 +188,10 @@ apply(reuse, dry_run:true) --> [review] --> apply(reuse, dry_run:false)
|
|
|
147
188
|
| [i18n](references/i18n.md) | Internationalization quality rules |
|
|
148
189
|
| [Security](references/security.md) | XSS prevention, secret detection, URL validation |
|
|
149
190
|
| [Workflow](references/workflow.md) | Git workflow, branch naming, conflict resolution |
|
|
191
|
+
|
|
192
|
+
## Related Skills
|
|
193
|
+
|
|
194
|
+
- **contentrain-normalize** — Two-phase extraction and source patching
|
|
195
|
+
- **contentrain-serve** — Browser-based review and approval UI
|
|
196
|
+
- **contentrain-generate** — SDK client generation
|
|
197
|
+
- **contentrain-sdk** — @contentrain/query usage
|
|
@@ -97,3 +97,10 @@ Report:
|
|
|
97
97
|
- locale or entry count affected
|
|
98
98
|
- validation outcome if run
|
|
99
99
|
- submit status
|
|
100
|
+
|
|
101
|
+
## Related Skills
|
|
102
|
+
|
|
103
|
+
- **contentrain-content** — Single-entry content operations
|
|
104
|
+
- **contentrain-validate-fix** — Validate after bulk changes
|
|
105
|
+
- **contentrain-generate** — Regenerate SDK after bulk locale copy
|
|
106
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -18,6 +18,16 @@ The user wants to create new content, add entries to a collection, populate a si
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## MUST Rules
|
|
22
|
+
|
|
23
|
+
- MUST call `contentrain_describe` before writing content (know the schema)
|
|
24
|
+
- MUST provide ALL required fields in entries
|
|
25
|
+
- MUST create entries for ALL supported locales when model has `i18n: true`
|
|
26
|
+
- MUST NOT set system fields (id, slug, createdAt, updatedAt, status, source)
|
|
27
|
+
- MUST run `npx contentrain generate` after adding new models or changing fields
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
21
31
|
## Steps
|
|
22
32
|
|
|
23
33
|
### 1. Check Project State
|
|
@@ -150,6 +160,16 @@ Call `contentrain_submit` to push branches to remote:
|
|
|
150
160
|
|
|
151
161
|
Report the Studio URL if provided in the tool response -- the user can review and approve content there.
|
|
152
162
|
|
|
163
|
+
### After Save: SDK Regeneration
|
|
164
|
+
|
|
165
|
+
When new models are created or fields change, regenerate the SDK client:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npx contentrain generate
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
This updates TypeScript types for the new content. See: **contentrain-generate** skill.
|
|
172
|
+
|
|
153
173
|
### 12. Final Summary
|
|
154
174
|
|
|
155
175
|
Report to the user:
|
|
@@ -160,3 +180,10 @@ Report to the user:
|
|
|
160
180
|
- The submission status (auto-merged or pending review).
|
|
161
181
|
- Studio link for visual review (if available).
|
|
162
182
|
- Next steps: run `/contentrain-generate` to update SDK types if models changed.
|
|
183
|
+
|
|
184
|
+
## Related Skills
|
|
185
|
+
|
|
186
|
+
- **contentrain-serve** — Browser-based review for content branches
|
|
187
|
+
- **contentrain-generate** — SDK client regeneration after content changes
|
|
188
|
+
- **contentrain-quality** — Content quality, SEO, and accessibility rules
|
|
189
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -60,3 +60,18 @@ Summarize:
|
|
|
60
60
|
- action taken
|
|
61
61
|
- base branch affected
|
|
62
62
|
- any follow-up branch still pending
|
|
63
|
+
|
|
64
|
+
## Browser Alternative
|
|
65
|
+
|
|
66
|
+
For visual branch review, use CLI serve:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
contentrain serve
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Navigate to http://localhost:3333/branches to see all pending branches with diffs, and merge or delete them visually.
|
|
73
|
+
|
|
74
|
+
## Related Skills
|
|
75
|
+
|
|
76
|
+
- **contentrain-serve** — Browser-based branch review and merge
|
|
77
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -60,3 +60,10 @@ Recommended order:
|
|
|
60
60
|
### 5. Re-run Doctor
|
|
61
61
|
|
|
62
62
|
After changes, run `contentrain doctor` again to confirm the project is healthy.
|
|
63
|
+
|
|
64
|
+
## Related Skills
|
|
65
|
+
|
|
66
|
+
- **contentrain-init** — Re-initialize if project structure is broken
|
|
67
|
+
- **contentrain-validate-fix** — Fix content/model validation errors
|
|
68
|
+
- **contentrain-generate** — Regenerate SDK if client is stale
|
|
69
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -181,3 +181,10 @@ Report to the user:
|
|
|
181
181
|
- TypeScript types: available via `index.d.ts`.
|
|
182
182
|
- Next steps: import `query` from `#contentrain` and start querying content.
|
|
183
183
|
- Reminder: re-run `contentrain generate` after model or content changes.
|
|
184
|
+
|
|
185
|
+
## Related Skills
|
|
186
|
+
|
|
187
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
188
|
+
- **contentrain-normalize** — Normalize workflow requires SDK regen after Phase 2
|
|
189
|
+
- **contentrain-content** — Content changes require SDK regen for type updates
|
|
190
|
+
- **contentrain-sdk** — @contentrain/query usage after generation
|
|
@@ -110,11 +110,13 @@ import { query, singleton, dictionary, document } from '#contentrain'
|
|
|
110
110
|
```ts
|
|
111
111
|
const posts = query('blog-post')
|
|
112
112
|
.locale('en') // set locale
|
|
113
|
-
.where('status', 'published') //
|
|
113
|
+
.where('status', 'published') // equality filter (shorthand)
|
|
114
|
+
.where('views', 'gt', 100) // operator filter: eq|ne|gt|gte|lt|lte|in|contains
|
|
114
115
|
.sort('date', 'desc') // sort by field
|
|
115
116
|
.limit(10) // limit results
|
|
116
117
|
.offset(5) // skip results
|
|
117
118
|
.include('author', 'tags') // resolve relation fields (1 level deep)
|
|
119
|
+
.count() // --> number (count of matches)
|
|
118
120
|
.all() // --> T[] (returns array)
|
|
119
121
|
.first() // --> T | undefined (first match)
|
|
120
122
|
```
|
|
@@ -143,22 +145,22 @@ Parameterized templates use `{placeholder}` syntax in dictionary values. The `ge
|
|
|
143
145
|
```ts
|
|
144
146
|
const article = document('blog-article')
|
|
145
147
|
.locale('en')
|
|
146
|
-
.where('category', 'tech')
|
|
148
|
+
.where('category', 'tech') // equality shorthand
|
|
149
|
+
.where('title', 'contains', 'Guide') // operator syntax
|
|
147
150
|
.include('author') // resolve relations in frontmatter
|
|
148
151
|
.bySlug('getting-started') // --> T | undefined (find by slug)
|
|
149
152
|
|
|
150
|
-
const docs = document('doc-page').locale('en').all()
|
|
151
|
-
const first = document('doc-page').locale('en').first()
|
|
153
|
+
const docs = document('doc-page').locale('en').all() // --> T[]
|
|
154
|
+
const first = document('doc-page').locale('en').first() // --> T | undefined
|
|
155
|
+
const total = document('doc-page').locale('en').count() // --> number
|
|
152
156
|
```
|
|
153
157
|
|
|
154
158
|
### DOES NOT EXIST -- never use these
|
|
155
159
|
|
|
156
|
-
- `.filter()` -- use `.where(field, value)` instead
|
|
160
|
+
- `.filter()` -- use `.where(field, value)` or `.where(field, op, value)` instead
|
|
157
161
|
- `.byId()` -- use `.where('id', value).first()` instead
|
|
158
|
-
- `.count()` -- use `.all().length` instead
|
|
159
162
|
- `dictionary().all()` -- use `.get()` instead
|
|
160
163
|
- Queries are SYNC -- do not use `await` with `query()`, `singleton()`, `dictionary()`, or `document()`
|
|
161
|
-
- `.where('field', 'eq', value)` -- just `.where('field', value)`
|
|
162
164
|
- `.get()` on QueryBuilder -- use `.all()` or `.first()`
|
|
163
165
|
|
|
164
166
|
---
|
|
@@ -96,4 +96,21 @@ Report to the user:
|
|
|
96
96
|
- What was created in `.contentrain/`.
|
|
97
97
|
- Which models were set up.
|
|
98
98
|
- How to import content in their code (show the `#contentrain` import).
|
|
99
|
-
- Next
|
|
99
|
+
- **Next step: Run `npx contentrain generate` to create the typed SDK client.** Without this, `#contentrain` imports won't work. See: **contentrain-generate** skill.
|
|
100
|
+
- Start the dev server and verify imports work.
|
|
101
|
+
|
|
102
|
+
### Post-Init: Start Review UI
|
|
103
|
+
|
|
104
|
+
After initialization, start the local review UI to explore the project:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
contentrain serve
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This opens http://localhost:3333 where you can browse models, content, and validation results.
|
|
111
|
+
|
|
112
|
+
## Related Skills
|
|
113
|
+
|
|
114
|
+
- **contentrain-serve** — Local review UI
|
|
115
|
+
- **contentrain-generate** — SDK client generation
|
|
116
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -139,3 +139,10 @@ Report:
|
|
|
139
139
|
- field count
|
|
140
140
|
- any relation targets
|
|
141
141
|
- whether content migration is needed next
|
|
142
|
+
|
|
143
|
+
## Related Skills
|
|
144
|
+
|
|
145
|
+
- **contentrain-content** — Create content for this model after defining it
|
|
146
|
+
- **contentrain-validate-fix** — Validate model and content after changes
|
|
147
|
+
- **contentrain-generate** — Regenerate SDK after model changes
|
|
148
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -17,6 +17,18 @@ Phase 1 alone is valuable: content becomes manageable in Studio, translatable, a
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
## MUST Rules
|
|
21
|
+
|
|
22
|
+
- MUST scan before extract (`contentrain_scan` → `contentrain_apply`)
|
|
23
|
+
- MUST `dry_run: true` before `dry_run: false` for every `contentrain_apply` call
|
|
24
|
+
- MUST merge Phase 1 branch before starting Phase 2
|
|
25
|
+
- MUST run `npx contentrain generate` after Phase 2 completes
|
|
26
|
+
- MUST NOT reuse without scoped model or domain (whole-project patching is blocked)
|
|
27
|
+
- MUST NOT patch `.contentrain/` files via reuse (content files are read-only for reuse)
|
|
28
|
+
- MUST NOT exceed 100 patches per `contentrain_apply` call
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
20
32
|
## Two-Phase Architecture
|
|
21
33
|
|
|
22
34
|
| Aspect | Phase 1: Extraction | Phase 2: Reuse |
|
|
@@ -105,6 +117,52 @@ Call `contentrain_validate` to check schema compliance, i18n completeness, and d
|
|
|
105
117
|
|
|
106
118
|
Tell the user: "Phase 1 complete. Content is now in Contentrain and can be managed, translated, and published from Studio. When ready, proceed with Phase 2 to update source files."
|
|
107
119
|
|
|
120
|
+
### Step 5: User Review
|
|
121
|
+
|
|
122
|
+
Two paths — agent chooses based on context:
|
|
123
|
+
|
|
124
|
+
**Path A — Browser Review (recommended for visual diff):**
|
|
125
|
+
1. Ensure `contentrain serve` is running (or ask user to start it)
|
|
126
|
+
2. Summarize the dry_run output to the user
|
|
127
|
+
3. Direct user to http://localhost:3333/normalize
|
|
128
|
+
4. Explain: "On this page you can review the extraction plan and Approve or Reject it."
|
|
129
|
+
5. Wait for user decision
|
|
130
|
+
|
|
131
|
+
**Path B — Terminal Review:**
|
|
132
|
+
1. Show dry_run output to user
|
|
133
|
+
2. Ask for explicit approval
|
|
134
|
+
3. If approved: `contentrain_apply(mode: 'extract', dry_run: false)` → execute
|
|
135
|
+
4. `contentrain_validate` → `contentrain_submit`
|
|
136
|
+
5. `contentrain_merge(branch: 'cr/normalize/extract/...', confirm: true)` to merge locally
|
|
137
|
+
|
|
138
|
+
### Step 6: Merge Phase 1 Branch
|
|
139
|
+
|
|
140
|
+
Phase 2 CANNOT start until Phase 1 branch is merged. Three options:
|
|
141
|
+
- **Browser:** localhost:3333/branches → click Merge
|
|
142
|
+
- **MCP Tool:** `contentrain_merge(branch: 'cr/normalize/extract/...', confirm: true)`
|
|
143
|
+
- **Git platform:** Create PR → review → merge
|
|
144
|
+
|
|
145
|
+
Verify with `contentrain_status` — check that extract branch is no longer in unmerged list.
|
|
146
|
+
|
|
147
|
+
### Step 7: Phase 2 Prerequisite Check
|
|
148
|
+
|
|
149
|
+
Before starting reuse:
|
|
150
|
+
1. Call `contentrain_status` and verify extract branch is merged
|
|
151
|
+
2. If not merged → inform user and wait
|
|
152
|
+
3. If merged → proceed to Phase 2 reuse
|
|
153
|
+
|
|
154
|
+
### Step 8: SDK Regeneration (after Phase 2)
|
|
155
|
+
|
|
156
|
+
After all reuse operations are complete, source files now use `#contentrain` imports.
|
|
157
|
+
The SDK client MUST be regenerated:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npx contentrain generate
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Without this, `#contentrain` imports will fail at build time.
|
|
164
|
+
See: **contentrain-generate** skill for details.
|
|
165
|
+
|
|
108
166
|
---
|
|
109
167
|
|
|
110
168
|
## Phase 2: Reuse (Step-by-Step)
|
|
@@ -183,3 +241,10 @@ Ask the user which model or domain to process next. Repeat steps 1-5 for each re
|
|
|
183
241
|
- [Extraction Details](references/extraction.md) -- Phase 1 extraction rules, parameters, and examples
|
|
184
242
|
- [Reuse Details](references/reuse.md) -- Phase 2 replacement expressions by stack and patching rules
|
|
185
243
|
- [What Is Content](references/what-is-content.md) -- Heuristics for identifying content vs code strings
|
|
244
|
+
|
|
245
|
+
## Related Skills
|
|
246
|
+
|
|
247
|
+
- **contentrain-serve** — Browser-based review UI for extraction approval
|
|
248
|
+
- **contentrain-generate** — SDK client regeneration (required after reuse)
|
|
249
|
+
- **contentrain-sdk** — @contentrain/query usage in source code
|
|
250
|
+
- **contentrain** — Core architecture and full MCP tool catalog
|
|
@@ -178,3 +178,10 @@ Noun or noun phrase, sentence case, no trailing colons. Helper text: one sentenc
|
|
|
178
178
|
- [SEO Rules](references/seo.md) -- SEO optimization rules for content fields, meta tags, and structured data
|
|
179
179
|
- [Accessibility](references/accessibility.md) -- Accessibility rules for content: alt text, ARIA, color contrast, reading level
|
|
180
180
|
- [Media Rules](references/media.md) -- Media asset rules: image optimization, video handling, file naming conventions
|
|
181
|
+
|
|
182
|
+
## Related Skills
|
|
183
|
+
|
|
184
|
+
- **contentrain-review** — Apply quality checks during content review
|
|
185
|
+
- **contentrain-content** — Content creation following quality rules
|
|
186
|
+
- **contentrain-translate** — Translation quality and i18n rules
|
|
187
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -168,3 +168,9 @@ Only make changes after user approval.
|
|
|
168
168
|
If fixes were applied, call `contentrain_validate` again to confirm all issues are resolved.
|
|
169
169
|
|
|
170
170
|
Report the final status: "All checks passed" or list remaining issues that require manual attention.
|
|
171
|
+
|
|
172
|
+
## Related Skills
|
|
173
|
+
|
|
174
|
+
- **contentrain-serve** — Visual review at http://localhost:3333/content
|
|
175
|
+
- **contentrain-quality** — Quality checklist reference
|
|
176
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -43,7 +43,9 @@ const doc = document('blog-post').bySlug('getting-started')
|
|
|
43
43
|
|--------|-------------|
|
|
44
44
|
| `.all()` | Get all entries |
|
|
45
45
|
| `.first()` | Get first entry |
|
|
46
|
-
| `.
|
|
46
|
+
| `.count()` | Return count of matching entries |
|
|
47
|
+
| `.where(field, value)` | Equality filter (shorthand for `eq`) |
|
|
48
|
+
| `.where(field, op, value)` | Operator filter: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `contains` |
|
|
47
49
|
| `.sort(field, direction?)` | Sort (`asc`/`desc`, default `asc`) |
|
|
48
50
|
| `.limit(n)` | Limit results |
|
|
49
51
|
| `.offset(n)` | Skip results |
|
|
@@ -71,7 +73,9 @@ const doc = document('blog-post').bySlug('getting-started')
|
|
|
71
73
|
| `.all()` | Get all documents |
|
|
72
74
|
| `.bySlug(slug)` | Get document by slug |
|
|
73
75
|
| `.first()` | Get first document |
|
|
74
|
-
| `.
|
|
76
|
+
| `.count()` | Return count of matching documents |
|
|
77
|
+
| `.where(field, value)` | Equality filter (shorthand) |
|
|
78
|
+
| `.where(field, op, value)` | Operator filter (same ops as QueryBuilder) |
|
|
75
79
|
| `.include(relation)` | Resolve relation fields |
|
|
76
80
|
|
|
77
81
|
## CDN Mode (Remote Data)
|
|
@@ -107,6 +111,28 @@ const doc = await client.document('docs').locale('en').bySlug('intro')
|
|
|
107
111
|
| `in` | `.where('category', 'in', ['a','b'])` | In array |
|
|
108
112
|
| `contains` | `.where('tags', 'contains', 'vue')` | String/array contains |
|
|
109
113
|
|
|
114
|
+
### CDN Entry Metadata, Media & Forms
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// Entry metadata (status, publish_at, expire_at)
|
|
118
|
+
const posts = await client.collection('blog').locale('en').withMeta().all()
|
|
119
|
+
|
|
120
|
+
// Media manifest & variant URLs
|
|
121
|
+
const media = client.media()
|
|
122
|
+
const asset = await media.asset('hero.jpg')
|
|
123
|
+
const url = media.url(asset, 'thumb')
|
|
124
|
+
|
|
125
|
+
// Forms (config fetch + submit)
|
|
126
|
+
const form = client.form()
|
|
127
|
+
const config = await form.config('contact')
|
|
128
|
+
const result = await form.submit('contact', { name: 'Alice' })
|
|
129
|
+
|
|
130
|
+
// Conversation API (external AI content operations)
|
|
131
|
+
const conv = client.conversation()
|
|
132
|
+
const response = await conv.send('Create a blog post about Vue 4')
|
|
133
|
+
const history = await conv.history(response.conversationId)
|
|
134
|
+
```
|
|
135
|
+
|
|
110
136
|
### CDN vs Local
|
|
111
137
|
|
|
112
138
|
| Aspect | Local (`#contentrain`) | CDN (`createContentrain()`) |
|
|
@@ -143,3 +169,9 @@ const doc = await client.document('docs').locale('en').bySlug('intro')
|
|
|
143
169
|
| Reference | Description |
|
|
144
170
|
|-----------|-------------|
|
|
145
171
|
| [Bundler Configuration](references/bundler-config.md) | Vite, Next.js, Nuxt, SvelteKit, Metro alias setup |
|
|
172
|
+
|
|
173
|
+
## Related Skills
|
|
174
|
+
|
|
175
|
+
- **contentrain-generate** — Generate the SDK client before using it
|
|
176
|
+
- **contentrain-quality** — Content quality rules for entries you query
|
|
177
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -94,3 +94,10 @@ The serve UI is a **monitoring + approval surface**, not an action trigger:
|
|
|
94
94
|
- **Prompts**: every page shows copyable agent prompts that developers paste into their AI agent
|
|
95
95
|
|
|
96
96
|
All mutations (create, edit, delete, scan, fix, normalize) are **agent-driven via MCP tools**. The UI never triggers these directly.
|
|
97
|
+
|
|
98
|
+
## Related Skills
|
|
99
|
+
|
|
100
|
+
- **contentrain-normalize** — Normalize workflow uses serve for extraction/reuse review and approval
|
|
101
|
+
- **contentrain-diff** — Terminal-based branch review alternative to serve /branches page
|
|
102
|
+
- **contentrain-review** — Content review workflow uses serve for visual inspection
|
|
103
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -135,6 +135,14 @@ After all translations are saved, re-generate the SDK client so the application
|
|
|
135
135
|
npx contentrain generate
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
+
### After Translation: SDK Regeneration
|
|
139
|
+
|
|
140
|
+
New locale data requires SDK client regeneration:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
npx contentrain generate
|
|
144
|
+
```
|
|
145
|
+
|
|
138
146
|
### 8. Save Translations
|
|
139
147
|
|
|
140
148
|
After approval, call `contentrain_content_save` for each model and target locale:
|
|
@@ -178,3 +186,10 @@ Report to the user:
|
|
|
178
186
|
- Submission status.
|
|
179
187
|
- Reminder to review translations for nuance that automated checks cannot catch.
|
|
180
188
|
- Suggestion: run `/contentrain-review` to verify overall i18n coverage.
|
|
189
|
+
|
|
190
|
+
## Related Skills
|
|
191
|
+
|
|
192
|
+
- **contentrain-serve** — Review translated content in browser
|
|
193
|
+
- **contentrain-generate** — SDK regeneration for new locale data
|
|
194
|
+
- **contentrain-quality** — Translation quality rules
|
|
195
|
+
- **contentrain** — Core architecture and MCP tool catalog
|
|
@@ -90,3 +90,9 @@ If validation still fails:
|
|
|
90
90
|
|
|
91
91
|
- summarize remaining blockers precisely
|
|
92
92
|
- tell the user which model/entry needs manual attention
|
|
93
|
+
|
|
94
|
+
## Related Skills
|
|
95
|
+
|
|
96
|
+
- **contentrain-review** — Full content review workflow
|
|
97
|
+
- **contentrain-content** — Fix content entries after validation errors
|
|
98
|
+
- **contentrain** — Core architecture and MCP tool catalog
|