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
Every load-bearing claim on build-with-claude-code and your-first-project
was re-verified in a freshly scaffolded 16.0.0-rc.1 project: the three
tutorial example files pass os validate verbatim, the bare-reference
error text matches the real gate output word-for-word, the curl flow
(sign-in → create → select/sort/top query) runs as written, and the MCP
endpoint/tool table matches the registered tool surface.
build-with-claude-code:
- prerequisites no longer claim pnpm is required (npm suffices; matches
your-first-project); stale 'Create ObjectStack v6.x' banner replaced
with the current scaffolder output incl. Next steps
- document that the agent wires new files into objectstack.config.ts
(actions:/views: arrays + objects barrel) — previously unmentioned,
and the first thing to check when authored metadata doesn't show up
- new section 'Beyond the first app — one skill per metadata domain':
maps all nine skills to the metadata domain they drive with a
copy-paste example prompt each, plus the two habits that keep the
loop reliable (validate gates every domain; re-run skills add after
spec upgrades)
- surface the os lint --score quality rubric in the iterate step
your-first-project:
- surface os lint --score after the validate gate
- new section '7. Hand the project to your agent' bridging the manual
path to the skills-driven loop with a cross-domain example prompt and
a link to the per-domain catalog
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Kj2MJEPXoUXC4LiC3XYJc
Copy file name to clipboardExpand all lines: content/docs/getting-started/build-with-claude-code.mdx
+55-5Lines changed: 55 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,7 +41,7 @@ hand-edits generated glue, and no metadata mistake reaches the browser unchecked
41
41
42
42
| You need | Why |
43
43
|:---|:---|
44
-
|**Node.js 18+** and **pnpm**| Runs the scaffolder and the dev server (see [prerequisites](/docs/getting-started#prerequisites)). |
44
+
|**Node.js 18+** and npm (pnpm / yarn / bun also work)| Runs the scaffolder and the dev server (see [prerequisites](/docs/getting-started#prerequisites)). |
45
45
|**[Claude Code](https://claude.com/claude-code)** (or Cursor / Copilot) | Your agent reads `AGENTS.md` + the ObjectStack skills and authors the metadata. |
46
46
47
47
## 1. Scaffold the project
@@ -63,10 +63,6 @@ The scaffolder does more than copy files. It:
63
63
`npm run validate` after every metadata change*.
64
64
65
65
```
66
-
╔═══════════════════════════════════╗
67
-
║ ◆ Create ObjectStack v6.x ║
68
-
╚═══════════════════════════════════╝
69
-
70
66
◆ New Environment
71
67
────────────────────────────────────────
72
68
Environment: support-desk
@@ -75,6 +71,12 @@ The scaffolder does more than copy files. It:
The agent also **wires the new files into `objectstack.config.ts`** — the object
198
+
through the `src/objects/index.ts` barrel, and the action and view via the
199
+
`actions:` / `views:` arrays in `defineStack()`. There is no filename-suffix
200
+
magic: metadata exists in the app only if the config imports it, so if a
201
+
freshly-authored action doesn't show up, the wiring is the first thing to check.
202
+
195
203
This is the same metadata that powers the REST API, the Console UI, **and the MCP
196
204
tools exposed to AI** — define it once, and ObjectStack derives the rest.
197
205
206
+
<Callouttype="info">
207
+
Every example on this page was authored against `@objectstack/spec` 16.x and
208
+
passes `os validate` verbatim in a freshly scaffolded project.
209
+
</Callout>
210
+
198
211
## 4. The gate: `os validate` catches AI mistakes
199
212
200
213
The most common way AI-authored metadata goes wrong is a mistake that **type-checks
@@ -289,6 +302,43 @@ tightening on each pass until the app is right. See
289
302
[How AI development works](/docs/getting-started/how-ai-development-works) for why
290
303
this stays fast and safe as the app grows.
291
304
305
+
<Callouttype="tip">
306
+
Beyond the pass/fail gate there's a **quality rubric**: `npx os lint --score`
307
+
prints a 0–100 metadata-quality score (relationship patterns, missing options,
308
+
roll-ups, name fields). Ask the agent to keep the project lint-clean — "run
309
+
`os lint` and fix the warnings" is a perfectly good prompt.
310
+
</Callout>
311
+
312
+
## Beyond the first app — one skill per metadata domain
313
+
314
+
The loop above never changes; what changes is **which skill the agent loads**.
315
+
The bundle ships nine, one per metadata domain, and the agent picks by task
316
+
context (the trigger table lives in your project's `AGENTS.md`). To grow the
317
+
support desk into a full application, keep describing — each row is a real
318
+
prompt you can give verbatim:
319
+
320
+
| You want | Skill the agent loads | Say something like |
321
+
|:---|:---|:---|
322
+
| Data model — objects, fields, relationships, validations, seeds |`objectstack-data`| "Add an `account` object and link tickets to it with a required lookup. Seed three demo accounts." |
323
+
| Queries & reports over records |`objectstack-query`| "Show me the count of open tickets per priority, using an aggregation." |
324
+
| Views, dashboards, apps, record pages |`objectstack-ui`| "Add a dashboard with a metric for open tickets and a bar chart of tickets by priority." |
325
+
| Business automation — flows, approvals, schedules |`objectstack-automation`| "Every day at 9:00, escalate tickets that have been open more than 48 hours." |
326
+
| Permissions & row-level security |`objectstack-data` (security sections) | "Members should only see their own tickets; support managers see everything." |
327
+
| Formula / conditional-field logic (CEL) |`objectstack-formula`| "Make `resolved_at` required and visible only when status is resolved." |
328
+
| AI agents & tools inside your app |`objectstack-ai`| "Add an AI skill that triages new tickets into a priority." |
329
+
| REST/auth surface tuning |`objectstack-api`| "Restrict the ticket API to read-only for non-members." |
330
+
| Translations |`objectstack-i18n`| "Add a zh-CN translation bundle for the ticket object and app navigation." |
331
+
332
+
Two habits keep this reliable as the app grows:
333
+
334
+
-**The gate applies to every domain.** Flows, dashboards, permissions, and
335
+
translations all go through the same `npm run validate` — the agent should run
336
+
it after each change, exactly as `AGENTS.md` instructs.
337
+
-**Keep the skills current.** After upgrading `@objectstack/spec`, re-run
338
+
`npx skills add objectstack-ai/framework/skills --all` so the agent authors
339
+
against the schemas you actually run. The full catalog is documented in the
340
+
[AI Skills Reference](/docs/ai/skills-reference).
341
+
292
342
## 7. Your app is natively AI-operable (MCP)
293
343
294
344
Here's the payoff that a hand-built CRUD app doesn't give you for free: because
0 commit comments