minutework 0.1.56 → 0.1.58
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/assets/claude-local/CLAUDE.md.template +20 -0
- package/assets/claude-local/skills/README.md +2 -0
- package/assets/claude-local/skills/landing-page-assets/SKILL.md +153 -0
- package/assets/claude-local/skills/runtime-capability-inventory/SKILL.md +3 -0
- package/assets/claude-local/skills/runtime-capability-inventory/primitive-catalog.json +19 -0
- package/assets/claude-local/skills/visualize-context/SKILL.md +97 -0
- package/assets/claude-local/skills/vuilder-mode-b-hosted-and-spawn/SKILL.md +181 -121
- package/assets/claude-local/skills/vuilder-workspace-architecture/SKILL.md +15 -11
- package/assets/claude-local/skills/workspace-guidance-refresh/SKILL.md +6 -0
- package/assets/templates/vuilder-public-site/src/app/globals.css +95 -0
- package/assets/templates/vuilder-public-site/src/app/page.tsx +214 -13
- package/assets/templates/vuilder-public-site/src/lib/public-dj.server.ts +48 -2
- package/dist/init.js +57 -0
- package/dist/init.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vuilder-mode-b-hosted-and-spawn
|
|
3
|
-
description: "Mode B Vuilder: run
|
|
3
|
+
description: "Mode B Vuilder: run your own real product on your host runtime where your team and outside members work with full platform capability; a member can opt to 'create my own server' (mint), or a /_mw customer upgrades to their own runtime (promote)."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Vuilder Mode B:
|
|
6
|
+
# Vuilder Mode B: The Vuilder's Own Runtime + Opt-In "Create My Own Server"
|
|
7
7
|
|
|
8
|
-
Use this skill when a generated Vuilder workspace runs a **
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Use this skill when a generated Vuilder workspace runs a **real product on the
|
|
9
|
+
Vuilder's own runtime** — the Vuilder is a full MinuteWork tenant using the whole
|
|
10
|
+
platform: their **own host runtime**, their **team collaborating there with the
|
|
11
|
+
runtime's AI, agents, and threads over real records**, and outside users joining
|
|
12
|
+
as **members** of that runtime with full platform capability. Later, a member (or
|
|
13
|
+
a product-consumer customer) can opt to **create their own server** — a separate
|
|
14
|
+
runtime of their own. Read `vuilder-workspace-architecture/SKILL.md` first; this
|
|
15
|
+
skill specializes it.
|
|
16
|
+
|
|
17
|
+
Mode B is **not whitelabeling and not a throwaway demo.** The Vuilder runs their
|
|
18
|
+
own real tenant business; "hosted broker", "shared demo", and "shared workspace"
|
|
19
|
+
are only *shapes* that business can take, never the definition. The point is that
|
|
20
|
+
the Vuilder and their members work together on the platform with full capability
|
|
21
|
+
(AI, agents, threads, records), and a member can graduate to their own server.
|
|
12
22
|
|
|
13
23
|
This skill is vertical-neutral. FleetRun and Ostronaut appear only as clearly
|
|
14
24
|
marked illustrative examples — never as platform behavior to hardcode.
|
|
@@ -16,150 +26,199 @@ marked illustrative examples — never as platform behavior to hardcode.
|
|
|
16
26
|
## Mode A vs Mode B — decide which you are
|
|
17
27
|
|
|
18
28
|
- **Mode A (signup = auto-spawn).** A customer signs up on the Vuilder public
|
|
19
|
-
site and the platform immediately provisions a fresh
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
site and the platform immediately provisions them a fresh runtime and installs
|
|
30
|
+
the app pack (`customer_vertical_signup`). Pick Mode A when every customer needs
|
|
31
|
+
their own isolated runtime from day one.
|
|
32
|
+
- **Mode B (the Vuilder's own runtime first, then opt-in "create my own
|
|
33
|
+
server").** The Vuilder runs their **own real product** on their **host
|
|
34
|
+
runtime**. Their team and outside **members** work there with full platform
|
|
35
|
+
capability; some users may instead join only as **product-consumer customers**.
|
|
36
|
+
Later, a member or customer opts to **create their own server** — the platform
|
|
37
|
+
provisions a separate runtime for them and installs the Vuilder's published
|
|
38
|
+
pack, while they keep their place on the host runtime. Pick Mode B when people
|
|
39
|
+
should work on (or consume) the Vuilder's runtime before — or instead of —
|
|
40
|
+
standing up their own.
|
|
30
41
|
|
|
31
42
|
> Illustrative only:
|
|
32
|
-
> - *FleetRun* (insurance brokering): carriers
|
|
33
|
-
>
|
|
34
|
-
> - *Ostronaut* (retail conversation intelligence): stores
|
|
35
|
-
> and
|
|
43
|
+
> - *FleetRun* (insurance brokering): carriers join the Vuilder's runtime and
|
|
44
|
+
> later create their own server when they are ready.
|
|
45
|
+
> - *Ostronaut* (retail conversation intelligence): stores use the hosted product
|
|
46
|
+
> and create their own server when real store data starts flowing.
|
|
36
47
|
>
|
|
37
48
|
> Both are instances of the same vertical-neutral shape; do not copy their
|
|
38
49
|
> vocabulary into schemas, manifests, or services.
|
|
39
50
|
|
|
40
|
-
If
|
|
41
|
-
`vuilder-workspace-architecture`.
|
|
51
|
+
If people must always get their own runtime at signup, you want Mode A — stop
|
|
52
|
+
here and use `vuilder-workspace-architecture`.
|
|
53
|
+
|
|
54
|
+
## Two join planes — member vs customer (decide which, or both)
|
|
55
|
+
|
|
56
|
+
Mode B has **two distinct ways** an outside user joins the host runtime. They are
|
|
57
|
+
different auth planes with different capability, and a Mode B product may use one
|
|
58
|
+
or both. The member plane is the richer, collaboration-first shape.
|
|
59
|
+
|
|
60
|
+
- **Member-plane join (full capability — the collaboration shape).** Outside
|
|
61
|
+
users are **invited as members** of the Vuilder's tenant: a platform
|
|
62
|
+
`Membership` reached through **SSO + the branded shell** (`vuilder-shell`,
|
|
63
|
+
`/w/[workspace_slug]`). Members get full platform capability — threads, agents,
|
|
64
|
+
AI, records — and work alongside the Vuilder's own team on the host runtime.
|
|
65
|
+
This is the "the Vuilder and outside members build/operate together with the
|
|
66
|
+
platform's AI" shape. See `shell-architecture/SKILL.md` and the identity
|
|
67
|
+
substrate below.
|
|
68
|
+
- **Customer-plane join (product-consumer).** Users authenticate as
|
|
69
|
+
`tenant_customer` through same-origin **`/_mw`** on a `tenant-app` and consume a
|
|
70
|
+
bounded **hosted product surface** under `/app` (read/act through
|
|
71
|
+
`webCustomerExposed` query/action manifests). This is the "consume a hosted
|
|
72
|
+
product" shape, not full shell/member capability.
|
|
73
|
+
|
|
74
|
+
Do not collapse Mode B into "`/_mw` only." Name which plane(s) your product uses;
|
|
75
|
+
the member plane is the default for collaboration-first verticals.
|
|
42
76
|
|
|
43
77
|
## Surface shape (follow the Starter Choice Matrix; shell-first)
|
|
44
78
|
|
|
45
|
-
- **`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
- **`vuilder-shell`** is the primary **member-plane** surface — the branded
|
|
80
|
+
member/operator shell (`/w/[workspace_slug]`) for the Vuilder's own team, for
|
|
81
|
+
invited members, and later for anyone who has their own server. Its `/login` is
|
|
82
|
+
an SSO handoff (see the `vuilder-workspace-architecture` hard boundary); the
|
|
83
|
+
shell never owns identity, provisioning, or app-pack install authority. See
|
|
84
|
+
`shell-architecture/SKILL.md`.
|
|
85
|
+
- **`tenant-app`** is the **customer-plane** surface: marketing, native `/_mw`
|
|
86
|
+
customer signup/login, and the hosted product under `/app`. Browser customer
|
|
87
|
+
auth uses `@minutework/web-auth` against same-origin `/_mw/auth/*`; the
|
|
88
|
+
principal is `tenant_customer`. `/_mw` only resolves on a **live, canonical**
|
|
89
|
+
customer-web host — go live with `minutework deploy --live`. See
|
|
90
|
+
`tenant-app-customer-auth-deploy/SKILL.md`.
|
|
91
|
+
- **The hosted product runs on the Vuilder's host runtime**, not in the browser.
|
|
92
|
+
`/app` consumes it through `mw.query` / `mw.action` against `webCustomerExposed`
|
|
93
|
+
manifests (see `app-pack-authoring/SKILL.md`,
|
|
94
|
+
`generated-workspace-architecture/SKILL.md`). Browser intake is untrusted: it
|
|
95
|
+
never chooses package refs, runtime providers, tenant ids, or install
|
|
55
96
|
coordinates.
|
|
56
|
-
- **`vuilder-shell`** remains the branded member/operator surface
|
|
57
|
-
(`/w/[workspace_slug]`) for the Vuilder's own operators and for customers once
|
|
58
|
-
they have their own runtime. See `shell-architecture/SKILL.md`. The hard
|
|
59
|
-
boundary still holds: the shell never owns identity, provisioning, or app-pack
|
|
60
|
-
install authority.
|
|
61
97
|
|
|
62
|
-
##
|
|
98
|
+
## Identity before a member/customer has their own server
|
|
63
99
|
|
|
64
|
-
|
|
100
|
+
Members and customers exist as identity on the host runtime **before** they have
|
|
101
|
+
their own server, and that identity carries over when they create one:
|
|
65
102
|
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
is a stable participation anchor, owned by the shadow tenant. See
|
|
103
|
+
- Core resolves a **shadow tenant** and **shadow person** for an external identity
|
|
104
|
+
(e.g. email) — a stable participation anchor. See
|
|
69
105
|
`shadow-participation-and-guest-threads/SKILL.md`.
|
|
70
|
-
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
106
|
+
- **Member-plane**: an invite creates a `Membership` on the host runtime, anchored
|
|
107
|
+
to the member's person; the member works through the shell with full capability.
|
|
108
|
+
- **Customer-plane**: `/_mw` creates a `tenant_customer` membership on the host
|
|
109
|
+
runtime, anchored to the customer's shadow tenant.
|
|
110
|
+
- In both planes, **claim refs tie the host membership back to the person's shadow
|
|
111
|
+
identity**, so identity and history are preserved when they later create their
|
|
112
|
+
own server. Creating a server is an **explicit claim/upgrade**, modeled as a
|
|
113
|
+
real provisioning step — never a silent mutation.
|
|
114
|
+
|
|
115
|
+
Do not invent a parallel guest-account or per-user identity model; reuse the
|
|
79
116
|
external-identity → shadow tenant → shadow person → claim substrate.
|
|
80
117
|
|
|
81
|
-
##
|
|
118
|
+
## Opt-in "create my own server" (spawn)
|
|
82
119
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
120
|
+
"Create my own server" is **product-driven, not hardcoded.** ("Spawn" is the
|
|
121
|
+
internal/platform term; the user-facing CTA is "create my own server / runtime.")
|
|
122
|
+
There are two ways to *fire* it; both go through the platform's member/customer
|
|
123
|
+
spawn substrate, which provisions a runtime and installs the Vuilder's published,
|
|
124
|
+
attested pack.
|
|
87
125
|
|
|
88
|
-
### 1. Explicit
|
|
126
|
+
### 1. Explicit "create my own server" action (available now)
|
|
89
127
|
|
|
90
|
-
Wire a "create my own
|
|
91
|
-
spawn endpoint:
|
|
128
|
+
Wire a "create my own server" affordance to the platform spawn endpoint:
|
|
92
129
|
|
|
93
|
-
-
|
|
130
|
+
- A member fires it from the shell, or a `/_mw` customer POSTs to
|
|
94
131
|
`/_mw/runtime/spawn` on the live host.
|
|
95
|
-
- The platform gates on an **active, email-verified**
|
|
96
|
-
|
|
97
|
-
|
|
132
|
+
- The platform gates on an **active, email-verified** membership, resolves
|
|
133
|
+
identity continuity, provisions the runtime, and installs the Vuilder's
|
|
134
|
+
**published, attested** app pack. It is idempotent.
|
|
98
135
|
- The browser only signals intent. It never picks the package, runtime provider,
|
|
99
|
-
or tenant — the platform derives those from the host Vuilder + the
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
This is the FleetRun-style "customer opts in" trigger *(illustrative)*.
|
|
136
|
+
or tenant — the platform derives those from the host Vuilder + the verified
|
|
137
|
+
identity.
|
|
103
138
|
|
|
104
139
|
### 2. App-pack-declared condition (configurable trigger)
|
|
105
140
|
|
|
106
|
-
To
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
— no vertical role/identifier words).
|
|
113
|
-
|
|
114
|
-
This is the Ostronaut-style "real data starts flowing" trigger *(illustrative)*:
|
|
115
|
-
emit a generic "data received" event, filter for the threshold that means the
|
|
116
|
-
customer is now operating for real, and let the subscription drive the spawn.
|
|
141
|
+
To fire on a **product condition** instead of a button press, declare the
|
|
142
|
+
condition in the app pack (do not hardcode it). Use the local event bus
|
|
143
|
+
(`event-bus/SKILL.md`): emit a product-defined event, then declare an
|
|
144
|
+
`eventSubscription` (with `filters`) whose target flow requests the server. Keep
|
|
145
|
+
event types and field names vertical-neutral (`mw.E002`/`mw.E010` — no vertical
|
|
146
|
+
role/identifier words).
|
|
117
147
|
|
|
118
148
|
> Honesty note: the **declaration surface** (events, subscriptions, filters)
|
|
119
|
-
> ships today, and the **explicit
|
|
120
|
-
> automatic condition→spawn leg is
|
|
121
|
-
>
|
|
122
|
-
>
|
|
123
|
-
>
|
|
124
|
-
>
|
|
125
|
-
|
|
149
|
+
> ships today, and the **explicit action** above is fully executable. The
|
|
150
|
+
> automatic condition→spawn leg is platform substrate still being rolled out (a
|
|
151
|
+
> generic emit site, the flow→spawn dispatch, and the local-event dispatch flag).
|
|
152
|
+
> Until it lands, use the explicit action and keep the declared condition as the
|
|
153
|
+
> product's source of truth. Confirm in `runtime-capability-inventory` before
|
|
154
|
+
> assuming auto-fire works.
|
|
155
|
+
|
|
156
|
+
## Mint-new vs promote-in-place — the two spawn semantics
|
|
157
|
+
|
|
158
|
+
"Create my own server" has **two distinct tenant semantics, coupled to the join
|
|
159
|
+
plane.** They are not interchangeable.
|
|
160
|
+
|
|
161
|
+
- **Mint-new (member-plane — the primary path for this model; NOT built yet).** A
|
|
162
|
+
**member** of the Vuilder's host runtime clicks "create my own server" → the
|
|
163
|
+
platform **mints a fresh, separate tenant + runtime** for them and installs the
|
|
164
|
+
Vuilder's published pack. The member becomes the **owner** of their own server.
|
|
165
|
+
Their identity (shadow person / claim) carries over — they do not become a
|
|
166
|
+
different person — and they keep their **membership on the host runtime**
|
|
167
|
+
(multi-membership; see the server-switcher below). This is the "org admin stands
|
|
168
|
+
up their organization's own server" path.
|
|
169
|
+
- **Promote-in-place (customer-plane — built today).** A `/_mw` customer who
|
|
170
|
+
already has a shadow (customer) tenant continues *as themselves* → the platform
|
|
171
|
+
**promotes their existing tenant in place** into a runtime-bearing tenant. This
|
|
172
|
+
is the "product-consumer upgrades to their own runtime" path. It **requires an
|
|
173
|
+
existing customer tenant and does not mint.**
|
|
174
|
+
|
|
175
|
+
**Today only promote-in-place is executable:** `customer_runtime_spawn` requires
|
|
176
|
+
an existing customer tenant and promotes it (it refuses to mint), and
|
|
177
|
+
`customer_vertical_signup` (which does mint a fresh tenant) fires only from the
|
|
178
|
+
**public signup site**, not the member plane. So the **member-plane → mint-new
|
|
179
|
+
shape — the primary "member creates their own server" flow — is the open
|
|
180
|
+
substrate gap to land**, not a secondary "maybe later." A proposed substrate
|
|
181
|
+
change (a `spawn_mode: mint | promote` selector reachable from the member plane)
|
|
182
|
+
is drafted for platform-team review.
|
|
183
|
+
|
|
184
|
+
Until it lands, do not assume a member "create my own server" CTA mints a fresh
|
|
185
|
+
separate tenant. Wire it to the promote-in-place path where that fits, or report
|
|
186
|
+
the member-plane → mint-new need as a capability gap
|
|
187
|
+
(`capability-gap-reporting/SKILL.md`). Confirm what shipped in
|
|
188
|
+
`runtime-capability-inventory` before building against mint-new.
|
|
126
189
|
|
|
127
190
|
## Cross-runtime data continuity (scope honestly)
|
|
128
191
|
|
|
129
|
-
After a customer
|
|
192
|
+
After a member/customer creates their own server, what carries over?
|
|
130
193
|
|
|
131
194
|
- **Identity and shared references re-anchor via ontology Core URNs.** Promote
|
|
132
|
-
local facts to shared `core_urn`s and re-anchor them on the spawned runtime
|
|
133
|
-
|
|
134
|
-
`runtime_ontology_contract.md
|
|
135
|
-
- **
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
`
|
|
142
|
-
- **Therefore scope the product to:
|
|
195
|
+
local facts to shared `core_urn`s and re-anchor them on the spawned runtime via
|
|
196
|
+
the reviewable promotion loop (`ontology-authoring/SKILL.md`,
|
|
197
|
+
`runtime_ontology_contract.md`). This is the supported continuity primitive.
|
|
198
|
+
- **Creating a server does not zero-copy host-runtime records into the new
|
|
199
|
+
runtime.** Ad-hoc record-level cross-runtime references (pointer + grant, read
|
|
200
|
+
at resolve time) are **not executable today**: `runtime_federation` implements
|
|
201
|
+
dataset publication + change-signal pub/sub only, and the `bridge_protocol.md`
|
|
202
|
+
hydrate path is design/spec, not built. So **a spawned runtime cannot reference
|
|
203
|
+
a specific record on the host runtime yet** (`federation_model.md`,
|
|
204
|
+
`bridge_protocol.md`).
|
|
205
|
+
- **Therefore scope the product to: the new server starts fresh; shared identity
|
|
143
206
|
re-anchors via ontology URNs; deep history reference is a follow-on once the
|
|
144
207
|
federation record-reference primitive exists.** Do not promise zero-copy
|
|
145
|
-
history
|
|
146
|
-
|
|
147
|
-
(`capability-gap-reporting/SKILL.md`) instead of inventing a copy-based
|
|
148
|
-
workaround.
|
|
208
|
+
history. If a Mode B product genuinely needs record-level cross-runtime reads,
|
|
209
|
+
report it as a capability gap rather than inventing a copy-based workaround.
|
|
149
210
|
|
|
150
211
|
## Server-switcher across host + spawned runtime
|
|
151
212
|
|
|
152
|
-
After
|
|
153
|
-
the Vuilder's host runtime and the owner membership on their
|
|
154
|
-
runtime
|
|
155
|
-
runtime:
|
|
213
|
+
After creating their own server, the person holds **two memberships**: their place
|
|
214
|
+
on the Vuilder's **host runtime** and the owner membership on their **spawned
|
|
215
|
+
runtime**. Give them a way to switch:
|
|
156
216
|
|
|
157
217
|
- Model this as multi-membership switching in the branded shell
|
|
158
218
|
(`shell-architecture/SKILL.md`) — each membership opens its own
|
|
159
219
|
`/w/[workspace_slug]` context; the shell never mixes their sessions.
|
|
160
|
-
- The host membership stays valid
|
|
161
|
-
|
|
162
|
-
side by side.
|
|
220
|
+
- The host membership stays valid (it is the continuity ledger), so they can keep
|
|
221
|
+
using the Vuilder's host runtime and their own server side by side.
|
|
163
222
|
- Identity stays single across both via the shared shadow/claim anchor; do not
|
|
164
223
|
create a second identity for the spawned runtime.
|
|
165
224
|
|
|
@@ -167,18 +226,19 @@ runtime:
|
|
|
167
226
|
|
|
168
227
|
- `vuilder-workspace-architecture` — the base Vuilder shape and the Mode A
|
|
169
228
|
signup=auto-spawn flow this skill contrasts with.
|
|
170
|
-
- `
|
|
171
|
-
|
|
229
|
+
- `shell-architecture` — the member-plane branded shell, member work surfaces, and
|
|
230
|
+
multi-membership server switching.
|
|
231
|
+
- `tenant-app-customer-auth-deploy` — make `/_mw` customer auth resolve on a live
|
|
232
|
+
canonical host (customer plane).
|
|
172
233
|
- `shadow-participation-and-guest-threads` — shadow tenant/person + claim
|
|
173
|
-
continuity for pre-
|
|
234
|
+
continuity for pre-server members and customers.
|
|
174
235
|
- `app-pack-authoring` and `generated-workspace-architecture` — `webCustomerExposed`
|
|
175
|
-
query/action manifests consumed by `/app
|
|
236
|
+
query/action manifests consumed by `/app`.
|
|
176
237
|
- `event-bus` (and `dataset-subscriber-flow`) — declarative event/subscription
|
|
177
|
-
surface for the configurable
|
|
178
|
-
- `ontology-authoring` and `runtime_ontology_contract.md` — Core URN promotion
|
|
179
|
-
|
|
180
|
-
- `
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
rather than working around them.
|
|
238
|
+
surface for the configurable "create server" trigger.
|
|
239
|
+
- `ontology-authoring` and `runtime_ontology_contract.md` — Core URN promotion for
|
|
240
|
+
cross-runtime identity continuity.
|
|
241
|
+
- `federation_model.md` and `bridge_protocol.md` — what cross-runtime federation
|
|
242
|
+
does and does not support today (record-reference is a gap).
|
|
243
|
+
- `capability-gap-reporting` — report the member-plane → mint-new gap and
|
|
244
|
+
record-level cross-runtime read needs rather than working around them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vuilder-workspace-architecture
|
|
3
|
-
description: "First skill for generated Vuilder workspaces: vuilder-app public site, vuilder-shell branded
|
|
3
|
+
description: "First skill for generated Vuilder workspaces: vuilder-app public site, vuilder-shell branded shell, app-pack source, and the Mode A signup=auto-spawn flow. For the Vuilder's-own-runtime-first opt-in-spawn flow, see vuilder-mode-b-hosted-and-spawn."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Vuilder Workspace Architecture
|
|
@@ -17,13 +17,16 @@ acquisition flow:
|
|
|
17
17
|
- **Mode A (signup = auto-spawn).** Signing up on the public site immediately
|
|
18
18
|
provisions the customer their own tenant runtime and installs the app pack.
|
|
19
19
|
This is the default this skill describes (see the Flow section below).
|
|
20
|
-
- **Mode B (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
- **Mode B (the Vuilder's own runtime first, then opt-in "create my own
|
|
21
|
+
server").** The Vuilder runs their own real product on their **host runtime** —
|
|
22
|
+
their own tenant business. Outside users join either as **members** (full
|
|
23
|
+
capability — threads, agents, AI, records — via SSO + `vuilder-shell`) or as
|
|
24
|
+
**`/_mw` product-consumer customers**, work there, and later opt to **create
|
|
25
|
+
their own server** (the platform provisions them a separate runtime and installs
|
|
26
|
+
the Vuilder's pack). The hosted product can be a broker, shared workspace, or
|
|
27
|
+
demo — the shape does not change the lane; the member plane is the
|
|
28
|
+
collaboration-first default. **Read `vuilder-mode-b-hosted-and-spawn/SKILL.md`**
|
|
29
|
+
and follow it instead of the Mode A flow below.
|
|
27
30
|
|
|
28
31
|
## Default Workspace Shape
|
|
29
32
|
|
|
@@ -93,6 +96,7 @@ billing policy, or install coordinates.
|
|
|
93
96
|
marketplace publish output.
|
|
94
97
|
- Use `generated-workspace-architecture` for general local workspace trust
|
|
95
98
|
boundaries.
|
|
96
|
-
- Use `vuilder-mode-b-hosted-and-spawn` when the Vuilder runs
|
|
97
|
-
|
|
98
|
-
(Mode B), instead of
|
|
99
|
+
- Use `vuilder-mode-b-hosted-and-spawn` when the Vuilder runs their own real
|
|
100
|
+
product on their host runtime that outside users join as members (or `/_mw`
|
|
101
|
+
customers), and later lets them create their own server (Mode B), instead of
|
|
102
|
+
the Mode A signup=auto-spawn flow above.
|
|
@@ -23,6 +23,12 @@ does not match the current MinuteWork CLI export.
|
|
|
23
23
|
- `mcp/claude-desktop.sample.json`
|
|
24
24
|
- It does not regenerate tenant code, sidecar code, schema files, or arbitrary
|
|
25
25
|
user-owned files outside the managed export set.
|
|
26
|
+
- It never touches the authored overlays `CLAUDE.workspace.md`,
|
|
27
|
+
`AGENTS.workspace.md`, or `skills.workspace/**`. Those files sit alongside the
|
|
28
|
+
managed guidance but are intentionally outside the managed manifest, so
|
|
29
|
+
workspace-specific customizations survive every sync (including `--force`) with
|
|
30
|
+
no conflicts. Put workspace-specific guidance and authored skills there rather
|
|
31
|
+
than editing the managed `CLAUDE.md` / `AGENTS.md` / `skills/`.
|
|
26
32
|
- If the workspace uses an older exported skill set, prefer refreshing assets
|
|
27
33
|
before concluding that a Builder capability or instruction is missing.
|
|
28
34
|
- If the workspace lacks sandbox/tier guidance for `minutework sandbox create`,
|
|
@@ -53,6 +53,38 @@ a {
|
|
|
53
53
|
max-width: 760px;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
.hero-with-media {
|
|
57
|
+
grid-template-columns: minmax(0, 0.95fr) minmax(280px, 0.85fr);
|
|
58
|
+
max-width: none;
|
|
59
|
+
align-items: center;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.hero-copy {
|
|
63
|
+
display: grid;
|
|
64
|
+
gap: 24px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.hero-media,
|
|
68
|
+
.section-image,
|
|
69
|
+
.feature-image {
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
border: 1px solid var(--line);
|
|
72
|
+
background: var(--surface);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.hero-media {
|
|
76
|
+
aspect-ratio: 4 / 3;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.hero-media img,
|
|
80
|
+
.section-image img,
|
|
81
|
+
.feature-image img {
|
|
82
|
+
display: block;
|
|
83
|
+
width: 100%;
|
|
84
|
+
height: 100%;
|
|
85
|
+
object-fit: cover;
|
|
86
|
+
}
|
|
87
|
+
|
|
56
88
|
.eyebrow {
|
|
57
89
|
margin: 0;
|
|
58
90
|
color: var(--accent);
|
|
@@ -96,8 +128,71 @@ p {
|
|
|
96
128
|
padding: 24px;
|
|
97
129
|
}
|
|
98
130
|
|
|
131
|
+
.content-section,
|
|
132
|
+
.cta-banner {
|
|
133
|
+
display: grid;
|
|
134
|
+
grid-template-columns: minmax(0, 0.9fr) minmax(240px, 0.7fr);
|
|
135
|
+
gap: 32px;
|
|
136
|
+
align-items: center;
|
|
137
|
+
margin-top: 56px;
|
|
138
|
+
padding-top: 56px;
|
|
139
|
+
border-top: 1px solid var(--line);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.content-section h2,
|
|
143
|
+
.cta-banner h2 {
|
|
144
|
+
margin: 0;
|
|
145
|
+
font-size: clamp(2rem, 5vw, 4rem);
|
|
146
|
+
line-height: 1;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.section-image {
|
|
150
|
+
aspect-ratio: 4 / 3;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.feature-grid {
|
|
154
|
+
display: grid;
|
|
155
|
+
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
|
|
156
|
+
gap: 16px;
|
|
157
|
+
margin-top: 28px;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.feature-item {
|
|
161
|
+
border: 1px solid var(--line);
|
|
162
|
+
background: var(--surface);
|
|
163
|
+
padding: 18px;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.feature-item h3 {
|
|
167
|
+
margin: 14px 0 0;
|
|
168
|
+
font-size: 1rem;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.feature-item p {
|
|
172
|
+
margin-bottom: 0;
|
|
173
|
+
font-size: 0.95rem;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.feature-image {
|
|
177
|
+
aspect-ratio: 16 / 10;
|
|
178
|
+
}
|
|
179
|
+
|
|
99
180
|
.site-footer {
|
|
100
181
|
padding: 32px 0;
|
|
101
182
|
border-top: 1px solid var(--line);
|
|
102
183
|
color: var(--muted);
|
|
103
184
|
}
|
|
185
|
+
|
|
186
|
+
@media (max-width: 760px) {
|
|
187
|
+
.site-header {
|
|
188
|
+
align-items: flex-start;
|
|
189
|
+
gap: 16px;
|
|
190
|
+
flex-direction: column;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.hero-with-media,
|
|
194
|
+
.content-section,
|
|
195
|
+
.cta-banner {
|
|
196
|
+
grid-template-columns: 1fr;
|
|
197
|
+
}
|
|
198
|
+
}
|