@mindstudio-ai/remy 0.1.35 → 0.1.37
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/dist/headless.js +723 -336
- package/dist/index.js +743 -348
- package/dist/prompt/compiled/media-cdn.md +1 -1
- package/dist/prompt/sources/frontend-design-notes.md +15 -27
- package/dist/prompt/static/team.md +25 -0
- package/dist/subagents/.notes-background-agents.md +36 -64
- package/dist/subagents/designExpert/prompts/images.md +8 -2
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ MindStudio has three CDN hosts:
|
|
|
7
7
|
- **Files:** `f.mscdn.ai`
|
|
8
8
|
|
|
9
9
|
Always use CDN transform parameters to request appropriately sized images
|
|
10
|
-
rather than CSS-scaling full-resolution originals.
|
|
10
|
+
rather than CSS-scaling full-resolution originals. Always set dpr=3 when sizing images to make sure they look good on Retina displays.
|
|
11
11
|
|
|
12
12
|
## CDN Image Transforms
|
|
13
13
|
|
|
@@ -93,14 +93,6 @@ Interfaces run fullscreen in the user's browser or a wrapped webview mobile app.
|
|
|
93
93
|
- **Spacing:** Consistent and generous. Padding and margins should be uniform across all components — nothing should feel cramped or uneven. White space is a feature, not wasted space.
|
|
94
94
|
- **Components:** Every component (buttons, inputs, cards, modals, lists) should look like it belongs to the same design system. Consistent border radii, consistent shadows, consistent padding. If two buttons on the same screen look different for no reason, that's a bug.
|
|
95
95
|
|
|
96
|
-
## Animation
|
|
97
|
-
|
|
98
|
-
Use motion to make interactions feel polished, not to show off. Focus on high-impact moments: a well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions everywhere.
|
|
99
|
-
|
|
100
|
-
- Transitions between states should be smooth but fast.
|
|
101
|
-
- Streaming content should flow into containers that grow naturally without pushing sibling elements around.
|
|
102
|
-
- No parallax, no cheesy scroll effects, no bounce/elastic easing, no gratuitous loading animations.
|
|
103
|
-
|
|
104
96
|
## Layout Stability
|
|
105
97
|
|
|
106
98
|
Layout shift is never acceptable. Elements jumping around as content loads or streams in makes an interface feel broken.
|
|
@@ -140,26 +132,22 @@ The UI should feel instant. Never make the user wait for a server round-trip to
|
|
|
140
132
|
- **Mutate after actions.** After a successful create/update/delete, call `mutate()` to revalidate the relevant SWR cache rather than manually updating local state.
|
|
141
133
|
- **Skeleton loading.** Show skeletons that mirror the layout on initial load. Never show a blank page or centered spinner while data is loading.
|
|
142
134
|
|
|
143
|
-
##
|
|
135
|
+
## FTUE
|
|
144
136
|
|
|
145
|
-
-
|
|
146
|
-
- A form that feels like Stripe Checkout — focused, calm, confident.
|
|
147
|
-
- A settings page that feels like iOS Settings — organized, scannable, no clutter.
|
|
148
|
-
- A list view that feels like Notion — flexible, spacious, information-dense without feeling crowded.
|
|
137
|
+
All interactive apps must be intuitive and easy to use. Form elements must be well-labelled. Complex interfaces should have descriptions or tooltips when helpful. Complex apps benefit from a beautiful simple onboarding modal on first use or a simple click tour. Even if the app is intuitive and easy to use, users showing up for the first time might still be overwhelmed or confused, and we have an opportunity to set expectations, provide context, and make the user confident as they use our product. Don't neglect this.
|
|
149
138
|
|
|
150
139
|
## What to Actively Avoid
|
|
151
140
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- **
|
|
155
|
-
- **
|
|
156
|
-
- **
|
|
157
|
-
- **
|
|
158
|
-
- **
|
|
159
|
-
- **
|
|
160
|
-
- **
|
|
161
|
-
- **
|
|
162
|
-
- **
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
- **Any interface where the first reaction is "this looks like a demo" or "this looks like it was made with a website builder."**
|
|
141
|
+
- **Avoid generic fonts.** Overused defaults that strip away all personality. Instead: pick a distinctive Google Font that fits the app's character.
|
|
142
|
+
- **Avoid purple or indigo anything.** Purple gradients, purple buttons, purple accents are overused. The user will be dismissive of our designs if they come out looking purple or indigo.
|
|
143
|
+
- **Avoid colored left-border callout boxes.** Rounded divs with a thick colored `border-left` — the generic "info card" pattern. Instead: use typography, spacing, and background tints to create hierarchy. If you need to call something out, use a full subtle background or a top border.
|
|
144
|
+
- **Avoid three equal boxes with icons.** The default AI landing page layout. Instead: use asymmetric layouts, varied column widths, or a single focused content area.
|
|
145
|
+
- **Avoid timid color palettes.** Evenly distributed, non-committal colors. Instead: one or two dominant colors with sharp accents. Commit to a direction.
|
|
146
|
+
- **Avoid card-heavy nested layouts.** Cards inside cards, everything boxed. Instead: use space, typography, and dividers to create hierarchy without extra containers.
|
|
147
|
+
- **Avoid inconsistent spacing.** 12px here, 20px there, 8px somewhere else. Instead: define a spacing scale (4/8/12/16/24/32/48/64) and use it everywhere.
|
|
148
|
+
- **Avoid components from different visual languages.** Rounded buttons next to square inputs, shadows mixed with flat design. Instead: pick one system and apply it consistently.
|
|
149
|
+
- **Avoid long scrolling forms with no visual grouping.** Instead: group fields into sections with clear headings, cards, or stepped flows.
|
|
150
|
+
- **Avoid cramped layouts.** Text pressed against edges, no room to breathe. Instead: generous padding, comfortable margins, let the content float.
|
|
151
|
+
- **Avoid loading states that are just a centered spinner on a blank page.** Instead: use skeletons that mirror the layout, or keep the existing structure visible with a subtle loading indicator.
|
|
152
|
+
|
|
153
|
+
Most importantly: **Avoid any interface where the first reaction is "this looks like a demo" or "this looks like it was made with a website builder."**
|
|
@@ -14,6 +14,8 @@ The design expert cannot see your conversation with the user, so include all rel
|
|
|
14
14
|
|
|
15
15
|
Returns concrete resources: hex values, font names with CSS URLs, image URLs, layout descriptions. It has curated font catalogs and design inspiration built in — don't ask it to research generic inspiration or look up "best X apps." Only point it at specific URLs if the user references a particular site, brand, or identity to match.
|
|
16
16
|
|
|
17
|
+
When delegating, describe the design problem — where the asset will be used, what it needs to communicate, what the brand feels like. Do not specify technical details like image formats, pixel dimensions, generation techniques, or workarounds. The design expert makes those decisions.
|
|
18
|
+
|
|
17
19
|
Always consult the design expert during intake and before building any new product features from the roadmap.
|
|
18
20
|
|
|
19
21
|
### Product Vision (`productVision`)
|
|
@@ -37,3 +39,26 @@ Always consult the code sanity check before writing code in initialCodegen with
|
|
|
37
39
|
### QA (`runAutomatedBrowserTest`)
|
|
38
40
|
|
|
39
41
|
For verifying interactive flows that can't be confirmed from a static screenshot, or reproducing user-reported issues you can't identify from code alone. Run a scenario first to seed test data and set user roles.
|
|
42
|
+
|
|
43
|
+
### Background Execution
|
|
44
|
+
|
|
45
|
+
Some tools support `background: true`, which sends the task to the agent and returns immediately without blocking. The agent works independently and reports back when finished. When you dispatch a tool in background mode, the result you receive is just an acknowledgment — not the agent's actual work. The real results arrive later as an automated message:
|
|
46
|
+
|
|
47
|
+
```xml
|
|
48
|
+
<background_results>
|
|
49
|
+
<tool_result id="toolu_abc" name="visualDesignExpert">
|
|
50
|
+
Result text here...
|
|
51
|
+
</tool_result>
|
|
52
|
+
</background_results>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
When you receive background results:
|
|
56
|
+
- Acknowledge them briefly to the user if relevant to what they're doing (e.g., "By the way, the designer finished those icons..." or "Looks like the roadmap is ready...")
|
|
57
|
+
- Incorporate them into your current work if applicable
|
|
58
|
+
- Don't interrupt the user's flow with a lengthy summary — they can see the background work in the UI
|
|
59
|
+
|
|
60
|
+
#### When to Background
|
|
61
|
+
|
|
62
|
+
Only background the following tasks, unless the user specifically asks you to do work in the background:
|
|
63
|
+
- `productVision` seeding the intiial roadmap after writing the spec for the first time. This task takes a while and we can allow the user to continue building while it happens in the background
|
|
64
|
+
- After writing the spec, once you have finalized the shape of the app, ask `visualDesignExpert` to create an "iphone app store" style icon for the app, then set it with `setProjectMetadata({ iconUrl: ... })`
|
|
@@ -1,90 +1,62 @@
|
|
|
1
|
-
# Background Agent Execution
|
|
2
|
-
|
|
3
|
-
Draft design for allowing sub-agents to run in the background without blocking Remy's turn.
|
|
4
|
-
|
|
5
|
-
## The problem
|
|
6
|
-
|
|
7
|
-
Some sub-agent tasks don't need to block Remy's turn. Product vision seeding roadmap items, for example — Remy needs the high-level plan to continue, but doesn't need to wait for all 15 files to be written. Currently, Remy blocks until the sub-agent finishes completely.
|
|
8
|
-
|
|
9
|
-
## Design principles
|
|
10
|
-
|
|
11
|
-
- **The parent decides.** Remy chooses at dispatch time whether a sub-agent runs in foreground or background. The sub-agent doesn't know or care — it just runs normally to completion. This avoids sub-agents misjudging urgency and keeps the complexity out of sub-agent prompts/tools.
|
|
12
|
-
- **Simple result delivery.** When a background agent finishes, it delivers results via a synthetic user message. No silent/non-silent distinction — all completions use the same mechanism, just with smart timing.
|
|
13
|
-
- **v1 keeps it minimal.** No checkpointing, no speculative execution, no resource budgets. Those can come later if needed.
|
|
1
|
+
# Background Agent Execution
|
|
14
2
|
|
|
15
3
|
## How it works
|
|
16
4
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
The parent agent's tool call includes a signal that this should run in background. Two options (TBD which is cleaner):
|
|
5
|
+
The parent agent decides at dispatch time whether a sub-agent runs in background by passing `background: true` in the tool input. The sub-agent doesn't know or care — it runs identically to foreground.
|
|
20
6
|
|
|
21
|
-
|
|
22
|
-
2. **Runner-level config** — the tool's `execute()` decides based on context and passes `background: true` to `runSubAgent()`
|
|
7
|
+
### Dispatch
|
|
23
8
|
|
|
24
|
-
|
|
9
|
+
```
|
|
10
|
+
visualDesignExpert({ task: "...", background: true })
|
|
11
|
+
productVision({ task: "...", background: true })
|
|
12
|
+
```
|
|
25
13
|
|
|
26
|
-
###
|
|
14
|
+
### Split lifecycle (runner.ts)
|
|
27
15
|
|
|
28
|
-
When `background: true
|
|
16
|
+
When `background: true`:
|
|
29
17
|
|
|
30
|
-
1.
|
|
31
|
-
2. The sub-agent
|
|
32
|
-
3.
|
|
33
|
-
4.
|
|
18
|
+
1. The runner creates its own AbortController (detached from the parent turn signal)
|
|
19
|
+
2. The sub-agent's LLM runs normally — streaming, thinking, tool calls
|
|
20
|
+
3. After the first LLM turn that produces text content, the runner **resolves the parent's promise early** with that text + `backgrounded: true`
|
|
21
|
+
4. The sub-agent loop continues in the background — more tool calls, more LLM turns
|
|
22
|
+
5. On completion, `onBackgroundComplete` fires, pushing the result to the notification queue
|
|
34
23
|
|
|
35
|
-
|
|
24
|
+
The parent agent gets the initial response immediately and continues its turn. The background agent keeps working.
|
|
36
25
|
|
|
37
|
-
|
|
26
|
+
### Result delivery (headless.ts)
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
- **If Remy is mid-turn** — queue the result, deliver immediately after the current turn completes
|
|
41
|
-
- **Multiple completions** — batch into a single message (e.g., "Background work completed:\n\n**Design expert:** ...\n\n**Product vision:** ...")
|
|
28
|
+
A notification queue collects background completions. Delivery:
|
|
42
29
|
|
|
43
|
-
|
|
30
|
+
- **If Remy is idle** — deliver immediately as a hidden automated message
|
|
31
|
+
- **If Remy is mid-turn** — queue and flush after `turn_done`
|
|
32
|
+
- **Multiple completions** — batched into one message
|
|
44
33
|
|
|
45
|
-
|
|
34
|
+
Format (hidden, XML-tagged):
|
|
35
|
+
```
|
|
36
|
+
@@automated::background_results@@
|
|
37
|
+
<background_results>
|
|
38
|
+
<tool_result id="toolu_abc" name="visualDesignExpert">
|
|
39
|
+
Result text here...
|
|
40
|
+
</tool_result>
|
|
41
|
+
</background_results>
|
|
42
|
+
```
|
|
46
43
|
|
|
47
|
-
|
|
44
|
+
### Events
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
The `tool_start` event includes `background: true` when a tool is backgrounded. The frontend knows every subsequent event with that `parentToolId` is background work — no need to flag every individual event.
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
1. At dispatch time — empty or partial messages attached (the early return acknowledgment)
|
|
53
|
-
2. At background completion — the full message array replaces the partial one, session is saved
|
|
48
|
+
### Process management
|
|
54
49
|
|
|
55
|
-
|
|
50
|
+
Background agents stay in the tool registry after the parent's promise settles. The existing `stop_tool` and `restart_tool` stdin commands work on them. Stopping a background agent via `stop_tool` is how users cancel dangling work.
|
|
56
51
|
|
|
57
|
-
###
|
|
52
|
+
### Which sub-agents support this?
|
|
58
53
|
|
|
59
|
-
The headless layer maintains a simple queue:
|
|
60
|
-
- Background agents push `{ agentId, name, result, completedAt }` when they finish
|
|
61
|
-
- After each `turn_done`, headless checks the queue and flushes as a single synthetic user message
|
|
62
|
-
- If Remy is idle when a result arrives, headless sends the message immediately
|
|
63
|
-
|
|
64
|
-
### Process management (headless layer)
|
|
65
|
-
|
|
66
|
-
The headless layer tracks active background agents:
|
|
67
|
-
- `get_background_agents` action → returns list with id, name, startedAt, status
|
|
68
|
-
- `cancel_background_agent` action → aborts a specific background agent via its AbortController
|
|
69
|
-
- The frontend can show active background work and let users cancel dangling agents
|
|
70
|
-
|
|
71
|
-
## Which sub-agents would use this?
|
|
72
|
-
|
|
73
|
-
- **productVision** — return lane summary immediately, write roadmap files in background
|
|
74
54
|
- **designExpert** — return font/color/layout recommendations immediately, generate images in background
|
|
55
|
+
- **productVision** — return initial plan immediately, write roadmap files in background
|
|
75
56
|
- **codeSanityCheck** — NOT a candidate, Remy needs the advice before proceeding
|
|
76
57
|
- **browserAutomation** — NOT a candidate, results inform Remy's next action
|
|
77
58
|
|
|
78
|
-
##
|
|
79
|
-
|
|
80
|
-
1. Runner split-lifecycle support (`background` flag on SubAgentConfig, detached async continuation)
|
|
81
|
-
2. `background: true` flag on AgentEvent types
|
|
82
|
-
3. Notification queue in headless layer (with idle-vs-busy delivery logic)
|
|
83
|
-
4. Background agent process tracking in headless layer
|
|
84
|
-
5. Wire up parent agent tools (add `background` input field to candidate sub-agent tools)
|
|
85
|
-
6. Update parent agent prompt to teach Remy when to use background dispatch
|
|
86
|
-
|
|
87
|
-
## Future considerations (not v1)
|
|
59
|
+
## Future considerations
|
|
88
60
|
|
|
89
61
|
- **Resource budgets** — token/cost ceilings for background agents running unattended
|
|
90
62
|
- **Checkpoint/resume** — serialized state for surviving process restarts
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
## Photo and Image Guidelines
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Important: All images used in the app might be high resolution and high quality. If serving them via the mindstudio cdn, make sure to specify the ?dpr=3 param for retina displays.
|
|
4
|
+
|
|
5
|
+
You have a powerful tool for generating high-quality images from any prompt: realistic photos, visalizations, textures, logos, icons and other elements, and more. Use it to create truly custom and beautiful designs. Be liberal with image generation - create multiple variants and choose the best one - AI image generation prompts are finnicky and unpredictable, you don't need to get it right the first generation. You can always edit or regenerate if the analysis seems off.
|
|
6
|
+
|
|
7
|
+
When the design calls for imagery, generate actual images and provide their CDN URLs so the developer can use them immediately. Prefer images with strong subjects: people, scenes - dramatic, eye catching, and beautiful.
|
|
4
8
|
|
|
5
9
|
Not every interface needs images. A productivity dashboard, a finance tool, or a data-heavy app is better served by strong typography, color, and layout than by shoehorned photography. Use images when they genuinely add to the experience — landing pages, marketing sites, content-driven apps — not as decoration on every project.
|
|
6
10
|
|
|
@@ -16,7 +20,7 @@ Generated images are production assets, not mockups or concepts — they are hos
|
|
|
16
20
|
|
|
17
21
|
### Image editing
|
|
18
22
|
|
|
19
|
-
Use `editImages` to transform or build on existing images. Provide one or more source image URLs and a prompt describing the desired result. The source images act as reference material — the model uses them as anchors for style, subject, or composition.
|
|
23
|
+
Use `editImages` to transform or build on existing images. Provide one or more source image URLs and a prompt describing the desired result. The source images act as reference material — the model uses them as anchors for style, subject, or composition. Think about image editing as part of a pipeline for generating a final asset from constituent pieces.
|
|
20
24
|
|
|
21
25
|
Good use cases for editing:
|
|
22
26
|
- Incorporating a logo or brand mark into a product mockup or scene
|
|
@@ -52,6 +56,8 @@ You can produce two kinds of image assets:
|
|
|
52
56
|
|
|
53
57
|
**Isolated assets** (with `transparentBackground`) — cutout objects, product shots, icons, illustrated elements on transparent backgrounds. These are composited directly onto layouts, layered over other content, or placed inside cards and feature sections as standalone elements.
|
|
54
58
|
|
|
59
|
+
Note: when analyzing images generated with `transparentBackground`, the transparent background will appear white to the vision analysis models. Don't mistake this for a white background — the image has an alpha channel and the background is transparent. Trust the generation parameters over what the analysis describes.
|
|
60
|
+
|
|
55
61
|
Think of yourself as providing visual ingredients — both backgrounds and foreground elements — not finished UI.
|
|
56
62
|
|
|
57
63
|
### What makes good photos and images
|