Skip to content

Commit c5e68b2

Browse files
os-zhuangclaude
andauthored
docs: reposition ObjectStack vs ObjectOS + retire 'ObjectOS' as the control-layer name (#2955)
* docs: reposition ObjectStack (open-source framework + runtime) vs ObjectOS (commercial runtime environment) - README: ObjectStack ships its own production runtime (os start / the official Docker image ghcr.io/objectstack-ai/objectstack) — building, running, and self-hosting your own apps is fully open source. ObjectOS is the separate commercial runtime environment for end-user organizations (Cloud & Enterprise). Drop links to the community objectos repo; disambiguate the ObjectOS protocol layer from the ObjectOS product. - LICENSING: spell out that the production runtime and Docker image definition are Apache-2.0 with no dev/prod feature gate; ObjectOS editions are commercial and live outside this repo. - docs: unify the hosted-product brand 'ObjectStack Cloud' → 'ObjectOS Cloud' on current pages (historical release notes left untouched). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG * docs: strip feature-level commercial mentions from open docs Product-level boundary statements (README/LICENSING) stay; feature-level docs now state open-source behavior only, without advertising what the commercial distribution contains: - drivers/environment-variables: 'libsql:// (Turso) is not supported' — drop the commercial-distribution packaging details. - environment-variables OS_CLUSTER_DRIVER: the claim that non-memory cluster drivers 'ship in the EE distribution' was also outdated — @objectstack/service-cluster-redis is an open, npm-published sibling package in this repo (kernel/cluster Phase 3 ✅). Point to it instead. - implementation-status: drop the internal cloud ADR citation; keep the open-boundary explanation (schemas open, BYO-AI via @objectstack/mcp). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG * docs(ai): replace 'cloud / Enterprise' packaging talk with ObjectOS product boundary Same rule as the previous commit, applied to the AI docs area where the pattern was systemic (agents, index, actions-as-tools, knowledge-rag, natural-language-queries, protocol/knowledge, environment-variables): - Brand: 'cloud / Enterprise tier/distribution/runtime' → ObjectOS. - Drop links/citations to the private cloud repo's ADR-0025 (404 for the public) and @objectstack/service-ai packaging internals, including the AIServicePlugin constructor walkthrough — commercial runtime config now points to the ObjectOS docs instead. - Boundary statements themselves stay: schemas/authoring open, in-product chat runtime ships in ObjectOS, open path is @objectstack/mcp (BYO-AI). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG * docs: finish sweeping commercial packaging mentions from open docs Remaining 'Cloud / Enterprise' callouts and @objectstack/service-ai internals (approval-queue plugin config, chat-route internals, the implementation-status AI matrix listing closed-source file names, the knowledge-protocol diagram box) now state the ObjectOS product boundary only, pointing to the ObjectOS docs for its configuration. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG * docs: retire 'ObjectOS' as the control-layer name — the layer is now 'Kernel' ObjectOS now exclusively names the commercial runtime environment, so using it as the open spec's control-layer brand was a permanent naming collision (papered over by a disambiguation note until now). - Layer naming: ObjectQL (data) / Kernel (control) / ObjectUI (view). ObjectQL and ObjectUI stay — they name real open technologies; only the layer-brand use of ObjectOS is retired. - README: layer list + layers alt-text; drop the now-unneeded naming note. ARCHITECTURE.md: layer diagram/table. - concepts/architecture.mdx, protocol/index card, protocol/diagram, glossary (with an explicit migration note), implementation-status, permissions/automation/plugins/getting-started prose: layer actor renamed to Kernel / ObjectStack runtime as fits. - protocol/objectos/ pages: landing page retitled 'Kernel: The System Protocol'; behavior narratives now use ObjectStack as the actor. Directory/URL rename to protocol/kernel deferred (needs redirects). - skills/objectstack-platform + spec prompts aligned. Follow-ups (not in this PR): regenerate docs/screenshots/layers.png; sweep the ~43 ObjectOS mentions in packages/spec source TSDoc/strings (feeds the auto-generated references/ docs); move content/docs/protocol/objectos/ → protocol/kernel/ with redirects. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG * chore: add patch changeset for spec prompts layer-naming change packages/spec publishes prompts/ in the npm package, so the layer-naming alignment there is a published-content change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162o68e5w3bpUBEVRQboUGG --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent e0b049a commit c5e68b2

37 files changed

Lines changed: 253 additions & 250 deletions
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@objectstack/spec": patch
3+
---
4+
5+
Retire "ObjectOS" as the control-layer name in the published agent prompts (`prompts/`): the open control layer is now called the **Kernel**; **ObjectOS** exclusively names the commercial runtime environment. Layer vocabulary is now ObjectQL (data) / Kernel (control) / ObjectUI (view). Prompt text only — no schema changes.

ARCHITECTURE.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ ObjectStack is organized as a **monorepo** with distinct package layers:
121121
**Location**: `packages/spec/`
122122
**Role**: Protocol Definitions (The "Constitution")
123123

124-
- Zod schemas for all protocols (ObjectQL, ObjectOS, ObjectUI)
124+
- Zod schemas for all protocols (ObjectQL, Kernel/System, ObjectUI)
125125
- TypeScript type definitions
126126
- JSON Schema generation
127127
- Constants and enums
@@ -131,7 +131,7 @@ ObjectStack is organized as a **monorepo** with distinct package layers:
131131
// packages/spec/src/
132132
├── data/ # ObjectQL schemas (Object, Field, Query, etc.)
133133
├── ui/ # ObjectUI schemas (App, View, Dashboard, etc.)
134-
├── system/ # ObjectOS schemas (Manifest, Driver, Plugin, etc.)
134+
├── system/ # System schemas (Manifest, Driver, Plugin, etc.)
135135
├── automation/ # Workflow, Flow, Trigger schemas
136136
├── ai/ # Agent, RAG, Model schemas
137137
├── api/ # API contract schemas
@@ -306,7 +306,7 @@ ObjectStack follows a **Three-Layer Protocol Stack**:
306306
└────────────────┬─────────────────────────────────┘
307307
│ REST API / GraphQL
308308
┌────────────────▼─────────────────────────────────┐
309-
│ Layer 2: ObjectOS (Control) │
309+
│ Layer 2: Kernel (Control)
310310
│ ┌────────────────────────────────────────────┐ │
311311
│ │ Auth, Permissions, Workflows, Events │ │
312312
│ │ "Who can do what, when?" │ │
@@ -338,7 +338,7 @@ Foundation:
338338
| Layer | Knows About | Doesn't Know About |
339339
|-------|-------------|-------------------|
340340
| **ObjectQL** | Schema, fields, queries, drivers | Users, permissions, UI |
341-
| **ObjectOS** | Auth, workflows, events | Data structure, UI layout |
341+
| **Kernel** | Auth, workflows, events | Data structure, UI layout |
342342
| **ObjectUI** | Layout, navigation, actions | Business logic, storage |
343343

344344
---

LICENSING.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,18 @@
22

33
ObjectStack Framework is licensed under the Apache License, Version 2.0.
44

5-
This repository contains the open-source framework foundation. Enterprise
6-
editions, official cloud services, and marketplace commercial terms live
7-
outside this repository and are governed by their own agreements.
5+
This repository contains everything you need to **build, run, and self-host
6+
your own applications** under that license: the protocol (`@objectstack/spec`),
7+
kernel, SDK, CLI, production runtime (`os start`), and the official Docker
8+
image definition ([`docker/`](./docker), published as
9+
`ghcr.io/objectstack-ai/objectstack`). There is no feature gate between
10+
development and production in this repository.
11+
12+
**ObjectOS** — the official runtime environment for end-user organizations,
13+
delivered as **ObjectOS Cloud** (managed) and **ObjectOS Enterprise**
14+
(self-managed) — is a separate commercial product and is not part of this
15+
repository. Its editions, official cloud services, and marketplace commercial
16+
terms are governed by their own agreements. See
17+
[docs.objectos.ai](https://docs.objectos.ai).
818

919
The full Apache 2.0 license text is available in [LICENSE](./LICENSE).

README.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
> **A metadata protocol and TypeScript toolkit for AI-native business apps.** Describe your objects, permissions, workflows, APIs, UI, and AI tools once as typed, version-controlled Zod metadata — and ObjectStack derives the TypeScript types, REST API, client SDK, UI, and MCP tools from that single definition.
99
1010
```
11-
ObjectStack (this repo) → how a business app is described — the protocol + toolkit
12-
ObjectOS → where it runs, and where AI plugs in — the runtime
11+
ObjectStack (this repo) → for builders — the open-source protocol, toolkit, and production runtime
12+
ObjectOS → for end users — the commercial runtime environment (Cloud & Enterprise)
1313
```
1414

15-
This repo is the **framework**: the protocol, kernel, SDK, and CLI you build with. To *run* apps and let AI operate them under your permissions, deploy on **[ObjectOS](https://github.com/objectstack-ai/objectos)**. · Try a live app in ~30s on [StackBlitz](https://stackblitz.com/github/objectstack-ai/hotcrm) (no install).
15+
This repo is the **framework**: the protocol, kernel, SDK, CLI, and production runtime you build — and ship — with. `os start` or the official Docker image [`ghcr.io/objectstack-ai/objectstack`](./docker) runs your compiled app in production, Console and governance included, entirely on open source. For a managed, organization-scale runtime environment (multi-environment control plane, provisioning, marketplace), deploy to **[ObjectOS](https://docs.objectos.ai)** — the commercial Cloud & Enterprise product. · Try a live app in ~30s on [StackBlitz](https://stackblitz.com/github/objectstack-ai/hotcrm) (no install).
1616

1717
<p align="center">
1818
<img src="docs/screenshots/architecture.png" width="940" alt="ObjectStack architecture: author typed Zod metadata (objects, flows, views, policies); the microkernel compiles it into a versioned JSON artifact and loads plugins, drivers, and services; it generates a REST API, client SDK, Console and Studio UI, and MCP tools used by developers and AI agents, governed by Auth, RBAC, RLS, FLS, and audit, over PostgreSQL, MySQL, SQLite, or MongoDB">
@@ -21,7 +21,7 @@ This repo is the **framework**: the protocol, kernel, SDK, and CLI you build wit
2121

2222
## What is ObjectStack?
2323

24-
ObjectStack is an **open-source** metadata protocol and toolkit for *describing* business applications — so one typed definition powers your data model, API, UI, and AI tools. Apps run, and AI operates them under your permissions, on the [ObjectOS](https://github.com/objectstack-ai/objectos) runtime.
24+
ObjectStack is an **open-source** (Apache-2.0) metadata protocol and toolkit for *describing* business applications — so one typed definition powers your data model, API, UI, and AI tools — plus the production runtime that serves them. AI operates your app under your permissions through the built-in MCP server. **[ObjectOS](https://docs.objectos.ai)** is the separate, commercial runtime environment that operates ObjectStack apps for end-user organizations (Cloud & Enterprise editions).
2525

2626
Instead of hiding business logic inside ad-hoc SQL queries, UI state, or JavaScript strings, ObjectStack makes the business system explicit:
2727

@@ -30,12 +30,12 @@ Instead of hiding business logic inside ad-hoc SQL queries, UI state, or JavaScr
3030
- **Business logic** is represented as analyzable metadata: flows, conditions, policies, and artifacts.
3131
- **Business runtime** is a microkernel that loads plugins, drivers, services, and compiled environment artifacts.
3232

33-
The goal is not to be another low-code UI builder. ObjectStack is the structured *definition* layer for AI-native business software — agent-ready, versioned, and analyzable; permissions and audit are enforced at runtime by ObjectOS.
33+
The goal is not to be another low-code UI builder. ObjectStack is the structured *definition* layer for AI-native business software — agent-ready, versioned, and analyzable; permissions and audit are enforced by the runtime.
3434

35-
ObjectStack is built around three protocol layers:
35+
ObjectStack is built around three layers:
3636

3737
- **ObjectQL** (Data Layer) — Objects, fields, queries, relations, validation, and data access.
38-
- **ObjectOS** (Control Layer) — Runtime, permissions, automation, plugins, environments, and artifact loading.
38+
- **Kernel** (Control Layer) — Runtime, permissions, automation, plugins, environments, and artifact loading.
3939
- **ObjectUI** (View Layer) — Apps, views, dashboards, actions, and presentation metadata.
4040

4141
All core definitions start with **Zod schemas** (1,600+ exported schemas across 200 schema files). TypeScript types, JSON Schemas, REST routes, UI metadata, and agent tools are derived from the same source of truth.
@@ -77,7 +77,7 @@ Prefer clicking? Author the same metadata visually in **Studio** — objects, re
7777
</p>
7878
<p align="center"><sub><b>Model</b> objects as typed metadata &nbsp;·&nbsp; <b>Automate</b> with visual flows — both produce the same analyzable metadata.</sub></p>
7979

80-
> **Want to see it running?** Deploy on **[ObjectOS](https://github.com/objectstack-ai/objectos)** for the live Console — dashboards, boards, calendars, records, and AI working your data under your permissions.
80+
> **Want to see it running?** `os dev` serves the live Console locally, and `os start` (or the official Docker image) ships the same Console to production — dashboards, boards, calendars, records, and AI working your data under your permissions.
8181
8282
## Key Features
8383

@@ -105,7 +105,7 @@ The point isn't lines of code. The point is **fit in an agent's context window.*
105105
| AI maintainability | Agents must crawl sprawling app code | Whole app fits in an agent's context window |
106106
| Governance | App-level conventions | Auth, RBAC, RLS, FLS, audit, and versioned artifacts |
107107

108-
Described in ObjectStack and deployed on [ObjectOS](https://github.com/objectstack-ai/objectos), this is the substrate for AI-native business apps — CRM, support, operations, and workflow agents acting on real business data without bypassing permissions or audit.
108+
Described in ObjectStack and served by its runtime, this is the substrate for AI-native business apps — CRM, support, operations, and workflow agents acting on real business data without bypassing permissions or audit.
109109

110110
## Quick Start
111111

@@ -288,10 +288,10 @@ For the browser, the typed client SDK and React hooks (`useQuery` / `useMutation
288288

289289
## Architecture
290290

291-
ObjectStack uses a **microkernel architecture** where the kernel provides only the essential infrastructure (DI, EventBus, lifecycle), and all capabilities are delivered as plugins. The three protocol layers sit above the kernel:
291+
ObjectStack uses a **microkernel architecture** where the kernel provides only the essential infrastructure (DI, EventBus, lifecycle), and all capabilities are delivered as plugins. The three layers sit above the microkernel:
292292

293293
<p align="center">
294-
<img src="docs/screenshots/layers.png" width="900" alt="ObjectStack layered architecture: the ObjectQL data layer, ObjectOS control layer, and ObjectUI view layer sit on a microkernel (plugin lifecycle, service registry / DI, event bus); every capability — drivers, server, auth, security, automation, AI — is a plugin">
294+
<img src="docs/screenshots/layers.png" width="900" alt="ObjectStack layered architecture: the ObjectQL data layer, the kernel control layer, and the ObjectUI view layer sit on a microkernel (plugin lifecycle, service registry / DI, event bus); every capability — drivers, server, auth, security, automation, AI — is a plugin">
295295
</p>
296296

297297
See [ARCHITECTURE.md](./ARCHITECTURE.md) for the complete design documentation including the plugin lifecycle state machine, dependency graph, and design decisions.

content/docs/ai/actions-as-tools.mdx

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@ client, or a local model) connects over the Model Context Protocol, and the
1616
server exposes two business-action tools — `list_actions` and `run_action`
1717
bound to the caller's principal. The agent operates the app the same way the
1818
Console toolbar does, under the same row-level security and permissions. No
19-
cloud service and no `@objectstack/service-ai` are required.
19+
cloud service and no ObjectOS runtime are required.
2020

2121
<Callout type="info">
22-
**Cloud / Enterprise** layers an in-product chat *runtime*
23-
(`@objectstack/service-ai`, cloud [ADR-0025](https://github.com/objectstack-ai/cloud/blob/main/docs/adr/0025-service-ai-to-cloud-open-mcp-only.md))
22+
**ObjectOS** layers an in-product chat *runtime*
2423
on top of these same actions: it generates one `action_<name>` tool per action,
2524
gates them behind an `ai.exposed` opt-in, and adds a server-side approval queue.
2625
Those pieces are called out below. The open path — the same Action reachable as
@@ -70,8 +69,8 @@ export const triageCaseAction = {
7069
```
7170

7271
<Callout type="info">
73-
**Cloud / Enterprise** — the `ai.exposed` flag is a governance gate for the
74-
in-product chat *runtime*: the cloud `@objectstack/service-ai` bridge registers
72+
**ObjectOS** — the `ai.exposed` flag is a governance gate for the
73+
in-product chat *runtime*: the ObjectOS bridge registers
7574
an `action_<name>` tool **only** when `ai.exposed === true` (and then
7675
`ai.description` is required, ≥ 40 chars). The open MCP path does **not** use
7776
`ai.exposed` — it filters by permission, returning every action the caller is
@@ -86,9 +85,9 @@ System objects (`sys_*`) are held back fail-closed.
8685

8786
| `action.type` | Dispatch path | Available where |
8887
|:---|:---|:---|
89-
| `script` | `IDataEngine.executeAction(object, target, ctx)` — the same call Studio makes | open (MCP) + cloud |
90-
| `flow` | automation flow runner — `execute(target, { triggerData })` | open (MCP) + cloud; needs the `automation` service registered |
91-
| `api` | HTTP call to `action.target` via a configured `apiClient` | **cloud / Enterprise** runtime only |
88+
| `script` | `IDataEngine.executeAction(object, target, ctx)` — the same call Studio makes | open (MCP) + ObjectOS |
89+
| `flow` | automation flow runner — `execute(target, { triggerData })` | open (MCP) + ObjectOS; needs the `automation` service registered |
90+
| `api` | HTTP call to `action.target` via a configured `apiClient` | **ObjectOS** runtime only |
9291

9392
Console-only types (`url`, `modal`, `form`) are always skipped.
9493

@@ -120,14 +119,11 @@ is registered. Point your MCP client at the server; the caller's API key acts as
120119
the user, so every `run_action` runs under that principal's RLS.
121120

122121
<Callout type="info">
123-
**Cloud / Enterprise** — the in-product runtime wires actions through
124-
`@objectstack/service-ai` instead, e.g.
125-
`new AIServicePlugin({ apiActionBaseUrl, apiActionHeaders })`. `apiActionBaseUrl`
126-
enables `type:'api'` dispatch (relative `/api/v1/...` targets resolve against it)
127-
and `apiActionHeaders` are forwarded on every api-action call. The plugin's
128-
`registerActionsAsTools()` returns `{ registered, skipped, warnings }` with
129-
reasons like `"not AI-exposed"` or `"requires confirmation … wire HITL approval"`
130-
so authors can see whether an action is LLM-callable.
122+
**ObjectOS** — the in-product runtime wires actions through its own bridge
123+
(including `type:'api'` dispatch), and reports per-action registration results
124+
with reasons like `"not AI-exposed"` or `"requires confirmation … wire HITL
125+
approval"` so authors can see whether an action is LLM-callable. See the
126+
[ObjectOS docs](https://docs.objectos.app/docs/ai) for its configuration.
131127
</Callout>
132128

133129
### Example
@@ -155,19 +151,17 @@ operator to approve the call before it runs. The human stays in the loop at the
155151
point of invocation, and the action still executes under the caller's RLS.
156152

157153
<Callout type="info">
158-
**Cloud / Enterprise** — the in-product chat runtime adds a *server-side*
159-
approval queue for its own `action_<name>` tools. Enable it with
160-
`new AIServicePlugin({ enableActionApproval: true })`: a gated tool call persists
161-
an `ai_pending_actions` row (`status: 'pending'`) and returns
162-
`{ status: 'pending_approval', pendingActionId }` to the model instead of
163-
executing. An operator resolves it from the **AI Pending Actions** Studio inbox —
164-
`POST /api/v1/ai/pending-actions/:id/approve` (`ai:approve` permission) re-runs
165-
the same dispatcher, or `.../reject` with a reason. The queue is also available
166-
programmatically via
167-
`IAIService.{proposePendingAction, approvePendingAction, rejectPendingAction, listPendingActions}`.
154+
**ObjectOS** — the in-product chat runtime adds a *server-side*
155+
approval queue for its own `action_<name>` tools: a gated tool call is
156+
persisted as pending and returned to the model as
157+
`{ status: 'pending_approval', … }` instead of executing, and an operator
158+
resolves it from the **AI Pending Actions** Studio inbox (approve re-runs the
159+
same dispatcher; reject records a reason).
168160
A dedicated queue (rather than the multi-step `IApprovalService`) fits AI
169161
tool-call HITL: the subject is the proposed *call*, there is no predefined
170-
process, and operators expect single-click yes/no.
162+
process, and operators expect single-click yes/no. See the
163+
[ObjectOS docs](https://docs.objectos.app/docs/ai) for configuration and the
164+
queue API.
171165
</Callout>
172166

173167
## Permission-aware execution (RLS for agents)
@@ -193,7 +187,7 @@ On the open MCP path this is automatic:
193187
"AI Assistant" principal.
194188

195189
<Callout type="info">
196-
**Cloud / Enterprise** — the in-product chat routes
190+
**ObjectOS** — the in-product chat routes
197191
(`/api/v1/ai/assistant/chat`, `/api/v1/ai/agents/:agentName/chat`) resolve the
198192
authenticated principal from `req.user` — both cookie session
199193
(`better-auth.session_token`) and Bearer token are handled — and forward it to

0 commit comments

Comments
 (0)