beehaven 0.8.27 → 0.8.33
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/agents-md-text.js +64 -0
- package/dist/browser-login.js +14 -4
- package/dist/build-channel.js +2 -2
- package/dist/claude-bridge.js +12 -9
- package/dist/clearly.js +6 -4
- package/dist/cli.js +27 -8
- package/dist/commands/agents-md.js +118 -0
- package/dist/commands/daemon-cmd.js +2 -0
- package/dist/commands/help.js +21 -0
- package/dist/commands/self-update.js +32 -5
- package/dist/commands/workspace.js +22 -5
- package/dist/daemon-client.js +10 -6
- package/dist/daemon-entry.js +1 -0
- package/dist/daemon-process.js +125 -0
- package/dist/daemon.js +131 -62
- package/dist/dashboard.js +118 -6
- package/dist/ipc-auth.js +3 -1
- package/dist/ipc-client.js +7 -6
- package/dist/ipc-path.js +92 -0
- package/dist/ipc-server.js +33 -33
- package/dist/npm-update.js +138 -0
- package/dist/relay-presets.js +3 -4
- package/dist/setup-service.js +9 -4
- package/dist/verb-surface.js +1 -0
- package/dist/watcher.js +9 -23
- package/dist/windows-hide.js +77 -0
- package/package.json +1 -1
- package/scripts/sync-skills.mjs +6 -0
- package/skills/agent-doodle-space/SKILL.md +1 -1
- package/skills/agent-home/SKILL.md +1 -1
- package/skills/beehaven-cli/SKILL.md +12 -0
- package/skills/brand-identity/SKILL.md +37 -14
- package/skills/clearly-agent/SKILL.md +24 -4
- package/skills/clearly-canvas/SKILL.md +88 -11
- package/skills/clearly-canvas/authoring.md +61 -10
- package/skills/clearly-canvas/example.mjs +72 -69
- package/skills/clearly-canvas/review.mjs +106 -12
- package/skills/clearly-docs/SKILL.md +151 -0
- package/skills/clearly-init/SKILL.md +135 -0
- package/skills/clearly-workflows/SKILL.md +90 -0
- package/skills/clearly-workspace/SKILL.md +1 -1
- package/skills/codebase-map/SKILL.md +1 -1
- package/skills/design-craft/SKILL.md +14 -6
- package/skills/design-craft/references.md +95 -0
- package/skills/index.json +48 -12
- package/skills/layout-systems/SKILL.md +14 -11
- package/skills/pair-on-canvas/SKILL.md +1 -1
- package/skills/sticker-pack/SKILL.md +132 -0
- package/skills/visualize/SKILL.md +188 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clearly-workflows
|
|
3
|
+
description: >-
|
|
4
|
+
Best with the beehaven CLI (semantic search and write-back); with only the Clearly connector, search with clearly_grep and record decisions with clearly_create.
|
|
5
|
+
Use the Clearly workspace as a COMPANY BRAIN — search the org's accumulated
|
|
6
|
+
context (decisions, facts, prompts, docs), write conclusions back so the next
|
|
7
|
+
agent inherits them instead of re-deriving them, and inherit the team's
|
|
8
|
+
skills. Use when a question is about what this company already decided or
|
|
9
|
+
knows, and after you work something out that the next person would otherwise
|
|
10
|
+
rediscover. Triggers: "what did we decide", "why did we do it this way", "has
|
|
11
|
+
anyone looked at this", "remember this", "write that down", "what do we know
|
|
12
|
+
about X", "company context", "our decisions", "prior art", "institutional
|
|
13
|
+
knowledge", "so nobody has to work this out again".
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
> **Tool names below are written UNPREFIXED** (`clearly_read`). Your runtime may
|
|
17
|
+
> expose them with a server prefix — e.g.
|
|
18
|
+
> `mcp__plugin_clearly_clearly-staging__clearly_read`. **Match by suffix, not by
|
|
19
|
+
> exact name**: a skill written against the bare name resolves to nothing otherwise, and
|
|
20
|
+
> the failure looks like "the tool doesn't exist" rather than "the name is decorated".
|
|
21
|
+
>
|
|
22
|
+
> **If no such tool is callable at all**, the Clearly MCP server isn't authorised in this
|
|
23
|
+
> session — note that these skills still LIST when it isn't, so you find out by firing a
|
|
24
|
+
> dead call. Authorise it (`/mcp`, or `claude mcp`), or if you have a shell, use the
|
|
25
|
+
> `beehaven` CLI and its own `clearly-canvas` skill instead.
|
|
26
|
+
|
|
27
|
+
# Working a Clearly workspace (Company Brain)
|
|
28
|
+
|
|
29
|
+
Clearly is a **company brain over MCP**: every prompt + agent response is auto-cataloged into a searchable, ranked archive, with documents, decisions, and durable facts alongside. Treat it the way you'd treat a repo — read before you write, and write so the next agent inherits your work.
|
|
30
|
+
|
|
31
|
+
If the `clearly` server isn't connected yet, run the `clearly-init` skill first.
|
|
32
|
+
|
|
33
|
+
## 1. Orient before you act
|
|
34
|
+
|
|
35
|
+
Run `beehaven call context-map` once at the start. It returns the brain's size (prompts / responses / facts), the recurring topics, and the org/teams it can federate across. Use it to decide whether the answer already exists.
|
|
36
|
+
|
|
37
|
+
## 2. Retrieve context (don't re-derive it)
|
|
38
|
+
|
|
39
|
+
`beehaven call context-search '{ "query": …, "scope"?, "kinds"?, "limit"? }'` is ONE ranked search across prompts, agent responses, documents/PRDs, and facts — use it instead of guessing or asking the user what they already decided.
|
|
40
|
+
|
|
41
|
+
- `scope: "workspace"` (default) searches this workspace.
|
|
42
|
+
- `scope: "org"` **federates across every workspace in the org**, merges + re-ranks by relevance, and excludes private artifacts + personal facts. Use it for "what has anyone on the team decided/built about X".
|
|
43
|
+
- `kinds`: narrow to `["document"]`, `["prompt"]`, etc.
|
|
44
|
+
|
|
45
|
+
Each hit carries `kind`, `ref` (the id to fetch in full), `title`, `snippet`, `score`, and `meta` (intent, tags, `sourceWorkspace`).
|
|
46
|
+
|
|
47
|
+
**Always search before writing** — it prevents duplicate PRDs/decisions and surfaces prior context you'd otherwise miss.
|
|
48
|
+
|
|
49
|
+
## 3. Write context BACK so it compounds
|
|
50
|
+
|
|
51
|
+
When you produce something durable — a PRD, a decision, a spec, a research summary — file it with `context-write`:
|
|
52
|
+
|
|
53
|
+
```jsonc
|
|
54
|
+
beehaven call context-write '{
|
|
55
|
+
"title": "Per-seat billing decision",
|
|
56
|
+
"body": "We charge per seat; usage is per-seat with shared top-up overflow. Rationale: …",
|
|
57
|
+
"kind": "decision", // doc | note | decision | prd
|
|
58
|
+
"tags": ["billing","pricing"],
|
|
59
|
+
"fact": "Billing is per-seat with shared top-up", // optional one-line takeaway
|
|
60
|
+
"private": false // true → workspace-local, never federated across the org
|
|
61
|
+
}'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
It creates the document AND files a searchable catalog entry, so the very next `context-search` finds it. Mark anything sensitive `private: true`.
|
|
65
|
+
|
|
66
|
+
⚠ **Why these are CLI calls and not MCP tools.** The MCP surface is seven tools split by what they do to an artifact (`clearly_catalog · _read · _write · _edit · _delete · _grep · _glob`); the Company Brain's verbs are workspace ACTIONS, reached by name through the shell. Once a document exists, `clearly_grep` and `clearly_read` open it like any other.
|
|
67
|
+
|
|
68
|
+
## 4. Inherit the team's skills
|
|
69
|
+
|
|
70
|
+
The workspace has its own skills (procedures the team grew). Before improvising a multi-step task, check whether one exists:
|
|
71
|
+
|
|
72
|
+
- `beehaven call skill-list '{"includeWorkspace":true}'` → the skill cards (name + when-to-use).
|
|
73
|
+
- `beehaven call skill-get '{"id":"…"}'` → the full step-by-step instructions for the one whose trigger matches.
|
|
74
|
+
|
|
75
|
+
Follow the loaded procedure rather than inventing your own — that's how you work *the way this workspace works*.
|
|
76
|
+
|
|
77
|
+
## Anything else
|
|
78
|
+
|
|
79
|
+
`beehaven actions` lists every workspace action with its description; `beehaven call <action> '<json>'` runs one. Reach for these when the seven MCP tools don't cover what you need — which is most things beyond reading, writing and searching artifacts.
|
|
80
|
+
|
|
81
|
+
## Rules of thumb
|
|
82
|
+
|
|
83
|
+
- **Read → act → write back.** Search first; file durable outcomes so they persist.
|
|
84
|
+
- **`scope:"org"`** for cross-team questions; **`private:true`** for sensitive writes.
|
|
85
|
+
|
|
86
|
+
<!-- A "Schedule your future self" section documenting `clearly_schedule_wake` was removed on
|
|
87
|
+
2026-08-02: the tool is in ZERO entries of mcp-server.ts's tool list and `schedule-wake` is
|
|
88
|
+
not a registered RPC, so every example here failed. Restore only when it is in tools/list. -->
|
|
89
|
+
|
|
90
|
+
- **Check `beehaven call skill-list`** before hand-rolling a known procedure.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: clearly-workspace
|
|
3
|
-
description: Understand and audit a Clearly workspace from the terminal — what it holds (documents, projects, boards, tickets, thoughts, files, agents), who authored what, and which known data defects are present. Run `survey.mjs` for the whole picture in one command. TRIGGER when the user asks "what is in this workspace", "how big is this workspace", "audit / survey / check the workspace", "what have my agents made", "is anything broken in here", "who created these", or before any cleanup, migration or backfill — the survey is what tells you whether a repair is needed and whether it worked. NOT for editing documents (use `document-*`) or drawing on a canvas (use clearly-canvas).
|
|
3
|
+
description: Needs a terminal with the beehaven CLI (Claude Code, Codex, Gemini CLI); in a chat with only the Clearly connector, say so and use the clearly_* tools instead. Understand and audit a Clearly workspace from the terminal — what it holds (documents, projects, boards, tickets, thoughts, files, agents), who authored what, and which known data defects are present. Run `survey.mjs` for the whole picture in one command. TRIGGER when the user asks "what is in this workspace", "how big is this workspace", "audit / survey / check the workspace", "what have my agents made", "is anything broken in here", "who created these", or before any cleanup, migration or backfill — the survey is what tells you whether a repair is needed and whether it worked. NOT for editing documents (use `document-*`) or drawing on a canvas (use clearly-canvas).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# clearly-workspace — know what you are standing in
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codebase-map
|
|
3
|
-
description: Walk a code repository and draw a living ARCHITECTURE MAP of it on a Clearly spatial canvas — modules as frames (sized by LOC, colored by layer), key files as nodes, imports/dependencies as arrows — so the big pieces, how they depend on each other, and where the complexity sits all read at a glance. Load this when the user says "map / diagram / visualize this codebase / repo / architecture", "how is this project structured", "draw the dependency graph", "give me an architecture overview", or when you're onboarding to an unfamiliar repo and need to see its shape fast.
|
|
3
|
+
description: Needs a terminal with the beehaven CLI (Claude Code, Codex, Gemini CLI); in a chat with only the Clearly connector, say so and use the clearly_* tools instead. Walk a code repository and draw a living ARCHITECTURE MAP of it on a Clearly spatial canvas — modules as frames (sized by LOC, colored by layer), key files as nodes, imports/dependencies as arrows — so the big pieces, how they depend on each other, and where the complexity sits all read at a glance. Load this when the user says "map / diagram / visualize this codebase / repo / architecture", "how is this project structured", "draw the dependency graph", "give me an architecture overview", or when you're onboarding to an unfamiliar repo and need to see its shape fast.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠ CANVAS WORK GOES THROUGH THE CLI, NOT AN MCP TOOL.** Anything written
|
|
@@ -114,8 +114,9 @@ divided by the ratio. Sizes that share a ratio look related; sizes picked by han
|
|
|
114
114
|
make them obviously different in class (a grotesque with a serif), never two neighbours.
|
|
115
115
|
- **Measure: 45–75 characters.** At 16px in a normal grotesque that is roughly **360–600px**.
|
|
116
116
|
Set the text node's `w` to hold that, not to fill the column.
|
|
117
|
-
- **Line height
|
|
118
|
-
**
|
|
117
|
+
- **Line height defaults to Auto**, using the font's metrics. When tuning it deliberately,
|
|
118
|
+
use **140–160%** for body, **125–135%** for subheads, and **95–105%** for display type.
|
|
119
|
+
Author explicit units (`lineHeight:"140%"` or `"24px"`); percentage leading follows font size.
|
|
119
120
|
- ⚠⚠ **TRACK DISPLAY TYPE NEGATIVE.** Type designed at 16px is far too loose at 120px.
|
|
120
121
|
Above ~40px use `letterSpacing: -1` to `-4`; above ~120px, −3 to −6. **Uppercase and small
|
|
121
122
|
labels go the other way: +1 to +3.** This one adjustment does more for perceived quality
|
|
@@ -250,8 +251,8 @@ only to show that a review happened.
|
|
|
250
251
|
|
|
251
252
|
**A 1080×1350 social post**
|
|
252
253
|
```
|
|
253
|
-
margin 72 · display 96–140 (weight 800, tracking −3, lineHeight
|
|
254
|
-
body 20–24 (weight 500, lineHeight
|
|
254
|
+
margin 72 · display 96–140 (weight 800, tracking −3, lineHeight "100%")
|
|
255
|
+
body 20–24 (weight 500, lineHeight "150%", w ≤ 560)
|
|
255
256
|
caption 16 (weight 600, tracking +1.5, uppercase)
|
|
256
257
|
rule 2–3px accent · footer block bottom-aligned at 1350 − 72 − blockHeight
|
|
257
258
|
```
|
|
@@ -265,7 +266,7 @@ Content column ≤ 1200 wide even though the slide is 1920 — full width is unr
|
|
|
265
266
|
|
|
266
267
|
**A 1440 web hero**
|
|
267
268
|
```
|
|
268
|
-
margin 96 · content max 1200 · headline 64–88 (tracking −2, lineHeight
|
|
269
|
+
margin 96 · content max 1200 · headline 64–88 (tracking −2, lineHeight "105%")
|
|
269
270
|
sub 20–24 (muted ink, w ≤ 640) · CTA 48–56 tall, 24–32 horizontal padding, radius 8 or full
|
|
270
271
|
```
|
|
271
272
|
|
|
@@ -273,7 +274,9 @@ sub 20–24 (muted ink, w ≤ 640) · CTA 48–56 tall, 24–32 horizontal paddi
|
|
|
273
274
|
```
|
|
274
275
|
padding 24–32 · radius 10–16 · gap between cards ≥ 2× padding
|
|
275
276
|
title 20–24/600 · body 15–16/400 muted · one accent element maximum
|
|
276
|
-
|
|
277
|
+
Use a filled frame that owns the card's contents. Apply auto layout with this padding
|
|
278
|
+
and a deliberate content gap; let text hug its height. Rectangles serve artwork,
|
|
279
|
+
swatches and rules. A background rectangle with sibling text does not form a card.
|
|
277
280
|
```
|
|
278
281
|
|
|
279
282
|
---
|
|
@@ -298,6 +301,11 @@ fewer elements, tighter type, one accent*. Every ornament added is a step away f
|
|
|
298
301
|
|
|
299
302
|
## Sources
|
|
300
303
|
|
|
304
|
+
The full shelf — about fifty books across grid, type, print production, colour, graphic form,
|
|
305
|
+
brand identity, information and interface design, each reduced to one rule — is in
|
|
306
|
+
[references.md](references.md). In Research pick two or three whose lens fits the brief, and name
|
|
307
|
+
the one behind each direction in its rationale.
|
|
308
|
+
|
|
301
309
|
Josef Müller-Brockmann, *Grid Systems in Graphic Design* (1981) · Massimo Vignelli, *The
|
|
302
310
|
Vignelli Canon* (semantics / syntactics / pragmatics; "Design is one") · Michael Bierut,
|
|
303
311
|
*How to* (Pentagram; brief → rationale → trade-offs) · Paula Scher / Pentagram, The Public
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# The design shelf
|
|
2
|
+
|
|
3
|
+
<!-- Generated from apps/cloudflare/src/agent/design-references.ts (the design-references and brand-references house skills).
|
|
4
|
+
Edit the list there, then run: WRITE_DESIGN_REFERENCES=1 npx vitest run src/__tests__/verify-design-references.test.ts -->
|
|
5
|
+
|
|
6
|
+
Books a studio designer works from, each reduced to one rule you can act on. The in-app
|
|
7
|
+
assistant gets the same list as the `design-references` and `brand-references` workspace skills.
|
|
8
|
+
|
|
9
|
+
## How to use it
|
|
10
|
+
|
|
11
|
+
- In Research, pick two or three references whose lens fits the brief: a print piece or poster → grid, type, print; an identity → brand; a chart or report → information; a screen or flow → interface. Write what each one changes in this design.
|
|
12
|
+
- In Direction, name the reference behind each direction's idea in one line ("a Müller-Brockmann modular grid, type as the image after Scher").
|
|
13
|
+
- In Review, critique against the same rules you chose.
|
|
14
|
+
- These are paraphrased principles, not quotations. Never invent a quote or page number; cite author and title only.
|
|
15
|
+
|
|
16
|
+
## Method — deciding before drawing
|
|
17
|
+
|
|
18
|
+
- Massimo Vignelli, *The Vignelli Canon* (2010): Answer semantics (what it means, to whom), syntactics (its visual grammar) and pragmatics (will they get it) before placing a node; few typefaces, a grid, discipline.
|
|
19
|
+
- Michael Bierut, *How to* (2015): Present brief → idea → trade-offs; the idea comes out of the problem, and the rationale is part of the deliverable.
|
|
20
|
+
- Paul Rand, *Thoughts on Design* (1947): Form and content are one: simplify until the idea is legible, and allow wit — play is a way of making it memorable.
|
|
21
|
+
- Bruno Munari, *Design as Art* (1966): Solve the problem with the simplest means; decoration that solves nothing is noise.
|
|
22
|
+
- Karl Gerstner, *Designing Programmes* (1964): Design the rules, not one layout: define the variables (size, position, colour) and generate the set from them.
|
|
23
|
+
- Dieter Rams, *Less but Better* (1995): As little design as possible: every element must earn its place by use; remove what does not.
|
|
24
|
+
- Alan Fletcher, *The Art of Looking Sideways* (2001): Look for the idea sideways — a visual pun or found connection beats a literal illustration of the brief.
|
|
25
|
+
|
|
26
|
+
## Grid and layout
|
|
27
|
+
|
|
28
|
+
- Josef Müller-Brockmann, *Grid Systems in Graphic Design* (1981): Construct margins, columns, gutter and baseline first; every element lands on the grid; break it once, on purpose.
|
|
29
|
+
- Timothy Samara, *Making and Breaking the Grid* (2002): Pick the grid for the content (manuscript, column, modular, hierarchical); a deliberate break needs a grid to break.
|
|
30
|
+
- Kimberly Elam, *Geometry of Design* (2001): Place the focal point on a proportional line (golden section, root rectangles, thirds), not at dead centre.
|
|
31
|
+
- Beth Tondreau, *Layout Essentials* (2009): Grids by job: a single column for reading, multi-column for mixed content, modular for catalogues and dashboards.
|
|
32
|
+
|
|
33
|
+
## Typography
|
|
34
|
+
|
|
35
|
+
- Robert Bringhurst, *The Elements of Typographic Style* (1992): Measure 45–75 characters, leading to suit the measure, honour the content: type exists to be read.
|
|
36
|
+
- Ellen Lupton, *Thinking with Type* (2004): Build hierarchy by changing one variable at a time — size, weight, colour or space — and track capitals open.
|
|
37
|
+
- Jan Tschichold, *The New Typography* (1928): Asymmetric, functional layout: hierarchy by size, weight and position, never ornament.
|
|
38
|
+
- Emil Ruder, *Typographie* (1967): White space is active form: the counter, the gap and the margin are composed like the type itself.
|
|
39
|
+
- Jost Hochuli, *Detail in Typography* (1987): Letter, word and line spacing decide readability: tighten display type, keep word spaces even, open the leading for long lines.
|
|
40
|
+
- Erik Spiekermann and E. M. Ginger, *Stop Stealing Sheep & Find Out How Type Works* (1993): A typeface is a voice: choose it for the message and audience, then set it with care before anything else.
|
|
41
|
+
- Ellen Lupton, *Type on Screen* (2014): On screen, type is motion and interaction too: sizes, scales and states are a system, not one setting.
|
|
42
|
+
|
|
43
|
+
## Print and editorial production
|
|
44
|
+
|
|
45
|
+
- Jan Tschichold, *The Form of the Book*: Classical page proportions: inner margin smallest, foot margin largest; the text block sits high and toward the spine.
|
|
46
|
+
- Richard Hendel, *On Book Design* (1998): A book design serves the reading; decide trim, margins, type and running heads together, and stay invisible.
|
|
47
|
+
- Andrew Haslam, *Book Design* (2006): Plan the whole object — format, grid, pagination, binding — before designing a spread.
|
|
48
|
+
- Jan V. White, *Editing by Design* (1974): Editorial layout starts from what the story says; headline, picture and caption are one unit.
|
|
49
|
+
- International Paper, *Pocket Pal*: Production rules: CMYK for press, 300 dpi images at final size, 3 mm (0.125 in) bleed, a safe area inside the trim.
|
|
50
|
+
- Alan Pipes, *Production for Graphic Designers*: Specify for the press: paper stock, ink coverage, rich black for large areas only, overprint and trap small type.
|
|
51
|
+
|
|
52
|
+
## Colour
|
|
53
|
+
|
|
54
|
+
- Josef Albers, *Interaction of Color* (1963): Colour is relative: judge it beside its neighbours on the real ground, never as a swatch alone.
|
|
55
|
+
- Johannes Itten, *The Art of Color* (1961): Choose the one contrast that leads (light–dark, warm–cool, complementary, saturation, extent) and let the rest support it.
|
|
56
|
+
|
|
57
|
+
## Graphic form and visual perception
|
|
58
|
+
|
|
59
|
+
- Armin Hofmann, *Graphic Design Manual* (1965): Build with elementary contrasts — point, line, plane, black and white, large and small — before colour.
|
|
60
|
+
- Ellen Lupton and Jennifer Cole Phillips, *Graphic Design: The New Basics* (2008): Point, line, plane, rhythm, scale, texture, figure/ground and framing are variables; change one deliberately.
|
|
61
|
+
- Wucius Wong, *Principles of Two-Dimensional Design* (1972): Repetition, gradation and radiation give a field structure; an anomaly in that structure is the focal point.
|
|
62
|
+
- Rudolf Arnheim, *Art and Visual Perception* (1954): Visual weight balances on the frame's hidden axes; size, value, isolation and position all add weight.
|
|
63
|
+
- Robin Williams, *The Non-Designer's Design Book* (1994): Contrast, repetition, alignment, proximity: if two things differ, make them clearly different.
|
|
64
|
+
- Alex W. White, *The Elements of Graphic Design* (2002): Treat space as an element: emptiness gives the content its shape and its importance.
|
|
65
|
+
- Kenya Hara, *Designing Design* (2007): Emptiness invites the viewer in: leave room for the reader's imagination instead of filling the frame.
|
|
66
|
+
- Paula Scher, *Make It Bigger* (2002): Type can be the image: scale and crop a word until it carries the identity on its own.
|
|
67
|
+
- Philip B. Meggs, *A History of Graphic Design* (1983): Know the lineage of a style so a reference is chosen, not a pastiche of the first thing found.
|
|
68
|
+
- Adrian Frutiger, *Signs and Symbols*: A sign reads by its simplest form; test a mark small, at a distance and in one colour.
|
|
69
|
+
|
|
70
|
+
## Brand and identity
|
|
71
|
+
|
|
72
|
+
- Alina Wheeler, *Designing Brand Identity* (2003): Identity is a process — research, strategy, design, touchpoints, asset management; design the touchpoints, not just the logo.
|
|
73
|
+
- Marty Neumeier, *The Brand Gap* (2003): A brand is the customer's gut feeling; close the gap between strategy and the look by testing what people actually perceive.
|
|
74
|
+
- Marty Neumeier, *Zag* (2006): When everyone zigs, zag: state what makes this the only one, then design to that difference.
|
|
75
|
+
- Wally Olins, *On Brand* (2003): A brand shows in product, environment, communication and behaviour; keep all four saying the same thing.
|
|
76
|
+
- Byron Sharp, *How Brands Grow* (2010): Growth comes from being easy to notice and buy: protect distinctive assets and stay consistent.
|
|
77
|
+
- Jenni Romaniuk, *Building Distinctive Brand Assets* (2018): An asset (colour, shape, character) works once it is famous and unique to the brand; use it everywhere, change it rarely.
|
|
78
|
+
- Tom Geismar, Ivan Chermayeff and Sagi Haviv, *Identify* (2011): A mark must be appropriate, distinctive and simple; it earns meaning through use over time.
|
|
79
|
+
- David Airey, *Logo Design Love* (2009): Test a logo at 16 px, in one colour and in reverse; if it needs detail or colour to survive, simplify it.
|
|
80
|
+
- Danne & Blackburn, *NASA Graphics Standards Manual* (1975): A standards manual fixes the mark, clear space, colours, type, grid and applications so anyone can apply the system.
|
|
81
|
+
- Unimark International (Vignelli, Noorda), *New York City Transit Authority Graphics Standards Manual* (1970): A system scales by rules: one typeface, fixed modules, colour coding and consistent placement.
|
|
82
|
+
|
|
83
|
+
## Information design
|
|
84
|
+
|
|
85
|
+
- Edward R. Tufte, *The Visual Display of Quantitative Information* (1983): Maximise data-ink: remove chart junk, label directly, show the comparison; use small multiples for change.
|
|
86
|
+
- Edward R. Tufte, *Envisioning Information* (1990): Layer and separate: quiet the grid and background so the data reads first.
|
|
87
|
+
- Otto Neurath, *International Picture Language* (1936): Isotype: count with repeated identical pictograms, never by enlarging one.
|
|
88
|
+
|
|
89
|
+
## Interface and product design
|
|
90
|
+
|
|
91
|
+
- Don Norman, *The Design of Everyday Things* (1988): Make the action visible: signifiers, feedback, mapping and constraints; a control must say how it is used.
|
|
92
|
+
- Steve Krug, *Don't Make Me Think* (2000): People scan, they do not read: obvious hierarchy, conventions, one clear next action per page.
|
|
93
|
+
- Adam Wathan and Steve Schoger, *Refactoring UI* (2018): Hierarchy by weight and colour before size, de-emphasise secondary text, use a spacing and shadow scale.
|
|
94
|
+
- Jenifer Tidwell, *Designing Interfaces* (2005): Use the known pattern for the job (navigation, forms, lists, dashboards) before inventing one.
|
|
95
|
+
- William Lidwell, Kritina Holden and Jill Butler, *Universal Principles of Design* (2003): Check the design against named principles (Fitts, Hick, proximity, progressive disclosure) and say which one a choice serves.
|
package/skills/index.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"files": [
|
|
5
5
|
"SKILL.md"
|
|
6
6
|
],
|
|
7
|
-
"sha": "
|
|
7
|
+
"sha": "6233057bd1a44b51"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"name": "clearly-canvas",
|
|
@@ -17,56 +17,57 @@
|
|
|
17
17
|
"project-plans.md",
|
|
18
18
|
"review.mjs"
|
|
19
19
|
],
|
|
20
|
-
"sha": "
|
|
20
|
+
"sha": "5daf296f2bdf65e6"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "agent-home",
|
|
24
24
|
"files": [
|
|
25
25
|
"SKILL.md"
|
|
26
26
|
],
|
|
27
|
-
"sha": "
|
|
27
|
+
"sha": "e1d18e7518ff4b65"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"name": "agent-doodle-space",
|
|
31
31
|
"files": [
|
|
32
32
|
"SKILL.md"
|
|
33
33
|
],
|
|
34
|
-
"sha": "
|
|
34
|
+
"sha": "1e1911e6d8784476"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"name": "design-craft",
|
|
38
38
|
"files": [
|
|
39
|
-
"SKILL.md"
|
|
39
|
+
"SKILL.md",
|
|
40
|
+
"references.md"
|
|
40
41
|
],
|
|
41
|
-
"sha": "
|
|
42
|
+
"sha": "d11f0c45c93c9dea"
|
|
42
43
|
},
|
|
43
44
|
{
|
|
44
45
|
"name": "layout-systems",
|
|
45
46
|
"files": [
|
|
46
47
|
"SKILL.md"
|
|
47
48
|
],
|
|
48
|
-
"sha": "
|
|
49
|
+
"sha": "27151a50e3bdb27a"
|
|
49
50
|
},
|
|
50
51
|
{
|
|
51
52
|
"name": "brand-identity",
|
|
52
53
|
"files": [
|
|
53
54
|
"SKILL.md"
|
|
54
55
|
],
|
|
55
|
-
"sha": "
|
|
56
|
+
"sha": "366139b11ff11b58"
|
|
56
57
|
},
|
|
57
58
|
{
|
|
58
59
|
"name": "pair-on-canvas",
|
|
59
60
|
"files": [
|
|
60
61
|
"SKILL.md"
|
|
61
62
|
],
|
|
62
|
-
"sha": "
|
|
63
|
+
"sha": "1d79147baa8c232d"
|
|
63
64
|
},
|
|
64
65
|
{
|
|
65
66
|
"name": "codebase-map",
|
|
66
67
|
"files": [
|
|
67
68
|
"SKILL.md"
|
|
68
69
|
],
|
|
69
|
-
"sha": "
|
|
70
|
+
"sha": "4a4af2229b68827d"
|
|
70
71
|
},
|
|
71
72
|
{
|
|
72
73
|
"name": "clearly-workspace",
|
|
@@ -74,13 +75,48 @@
|
|
|
74
75
|
"SKILL.md",
|
|
75
76
|
"survey.mjs"
|
|
76
77
|
],
|
|
77
|
-
"sha": "
|
|
78
|
+
"sha": "3a3e6fa6e3cf8717"
|
|
78
79
|
},
|
|
79
80
|
{
|
|
80
81
|
"name": "clearly-agent",
|
|
81
82
|
"files": [
|
|
82
83
|
"SKILL.md"
|
|
83
84
|
],
|
|
84
|
-
"sha": "
|
|
85
|
+
"sha": "c20b255224221342"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "visualize",
|
|
89
|
+
"files": [
|
|
90
|
+
"SKILL.md"
|
|
91
|
+
],
|
|
92
|
+
"sha": "88bb6e94fb37c337"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "sticker-pack",
|
|
96
|
+
"files": [
|
|
97
|
+
"SKILL.md"
|
|
98
|
+
],
|
|
99
|
+
"sha": "74af254817a134d6"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "clearly-docs",
|
|
103
|
+
"files": [
|
|
104
|
+
"SKILL.md"
|
|
105
|
+
],
|
|
106
|
+
"sha": "388be4de86f59eb4"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "clearly-init",
|
|
110
|
+
"files": [
|
|
111
|
+
"SKILL.md"
|
|
112
|
+
],
|
|
113
|
+
"sha": "d4dfdd76c7c0a108"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "clearly-workflows",
|
|
117
|
+
"files": [
|
|
118
|
+
"SKILL.md"
|
|
119
|
+
],
|
|
120
|
+
"sha": "b9622f21173bab0d"
|
|
85
121
|
}
|
|
86
122
|
]
|
|
@@ -47,7 +47,7 @@ that lost one. If you have four items, ask whether one is really a different thi
|
|
|
47
47
|
```
|
|
48
48
|
margin 8–10% of the short edge (1080 → 88–108; A3 → 280–350)
|
|
49
49
|
display 12–20% of the HEIGHT (1350 → 160–270px), weight 700–900, tracking −3 to −6,
|
|
50
|
-
lineHeight
|
|
50
|
+
lineHeight "92%"–"100%"
|
|
51
51
|
supporting 2–3% of height credits, date, venue — deliberately small
|
|
52
52
|
```
|
|
53
53
|
|
|
@@ -105,7 +105,7 @@ content column ≤ 1200 even though the slide is 1920
|
|
|
105
105
|
## Landing page / hero — 1440 wide (design), content max 1200
|
|
106
106
|
|
|
107
107
|
```
|
|
108
|
-
margin 96 · headline 64–88 (tracking −2, lineHeight
|
|
108
|
+
margin 96 · headline 64–88 (tracking −2, lineHeight "105%") · sub 20–24 muted, w ≤ 640
|
|
109
109
|
CTA 48–56 tall, 24–32 horizontal padding · section spacing 96–160 vertical
|
|
110
110
|
```
|
|
111
111
|
|
|
@@ -124,7 +124,7 @@ CTA 48–56 tall, 24–32 horizontal padding · section spacing 96–160 vertica
|
|
|
124
124
|
|
|
125
125
|
```
|
|
126
126
|
margin: outer 10%, inner (gutter side) 12–14% — asymmetric, because the binding eats it
|
|
127
|
-
columns 2–3 for A4 body · measure 45–75ch · body 10–11pt (≈42–46px at 300dpi), lineHeight
|
|
127
|
+
columns 2–3 for A4 body · measure 45–75ch · body 10–11pt (≈42–46px at 300dpi), lineHeight "145%"
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
- **Asymmetric margins are the mark of real editorial.** Equal margins all round read as a
|
|
@@ -141,9 +141,9 @@ columns 2–3 for A4 body · measure 45–75ch · body 10–11pt (≈42–46px a
|
|
|
141
141
|
## Cards, tables and dense UI
|
|
142
142
|
|
|
143
143
|
- **Card padding 24–32, radius 10–16, gap between cards ≥ 2× padding.**
|
|
144
|
-
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
- **Cards are filled frames.** Parent labels, icons and controls to the card; use auto
|
|
145
|
+
layout for its content. Build rows and grids from these cards, with deliberate
|
|
146
|
+
Hug/Fill/Fixed sizing. Reserve rectangles for decorative shapes, swatches and rules.
|
|
147
147
|
- **In tables, align numbers RIGHT and use tabular figures.** Left-aligned numbers of
|
|
148
148
|
different lengths cannot be compared, which is the only reason the table exists.
|
|
149
149
|
- **Zebra striping OR rules, never both.** Ideally neither — space is enough at ≥12px row padding.
|
|
@@ -153,10 +153,13 @@ columns 2–3 for A4 body · measure 45–75ch · body 10–11pt (≈42–46px a
|
|
|
153
153
|
## Building it on the canvas
|
|
154
154
|
|
|
155
155
|
```jsonc
|
|
156
|
-
// ONE batch.
|
|
157
|
-
{"action":"frame.create","args":{"
|
|
158
|
-
{"action":"canvas.create-node","args":{"name":"
|
|
159
|
-
"
|
|
156
|
+
// ONE batch. A content stack owns its fill and children; the layout computes positions.
|
|
157
|
+
{"action":"frame.create","args":{"id":"card","name":"Feature card","w":360,"h":200,"fill":"#FFFFFF"}}
|
|
158
|
+
{"action":"canvas.create-node","args":{"name":"Feature title","type":"text","parentId":"card",
|
|
159
|
+
"w":312,"text":"Make room for the idea","size":28,"fontWeight":600,"lineHeight":"auto"}}
|
|
160
|
+
{"action":"canvas.create-node","args":{"name":"Feature detail","type":"text","parentId":"card",
|
|
161
|
+
"w":312,"text":"Keep every layer ready for the next edit.","size":16,"lineHeight":"145%"}}
|
|
162
|
+
{"action":"canvas.auto-layout","args":{"id":"card","direction":"v","gap":16,"padding":24,"sizingH":"fixed","sizingV":"hug"}}
|
|
160
163
|
```
|
|
161
164
|
|
|
162
165
|
- ⚠ **Omit `h` on text** — it hugs its wrapped content. Pin `h` only when a later element's
|
|
@@ -180,5 +183,5 @@ columns 2–3 for A4 body · measure 45–75ch · body 10–11pt (≈42–46px a
|
|
|
180
183
|
| Deck | too many words; title states the topic instead of the argument; full-width text |
|
|
181
184
|
| Landing | subhead runs full width; two competing CTAs; sections evenly spaced |
|
|
182
185
|
| Editorial | symmetric margins; no baseline grid; unbroken columns |
|
|
183
|
-
| Cards |
|
|
186
|
+
| Cards | background and contents lack a shared frame; layout breaks when copy grows |
|
|
184
187
|
| **All** | **an exact 50/50 split, and four type sizes where three would do** |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pair-on-canvas
|
|
3
|
-
description: Use a Clearly canvas as mission control for a coding task — read the spec the human placed on the board, do the work in the repo, and report progress, diffs, and next steps back as cards they steer by inking. Load this when the user says "work the task on my canvas", "take this from the board", "what's on my Clearly canvas", "pick up the spec", "let's pair on the canvas", or whenever a human is directing your coding work spatially instead of in a chat thread.
|
|
3
|
+
description: Needs a terminal with the beehaven CLI (Claude Code, Codex, Gemini CLI); in a chat with only the Clearly connector, say so and use the clearly_* tools instead. Use a Clearly canvas as mission control for a coding task — read the spec the human placed on the board, do the work in the repo, and report progress, diffs, and next steps back as cards they steer by inking. Load this when the user says "work the task on my canvas", "take this from the board", "what's on my Clearly canvas", "pick up the spec", "let's pair on the canvas", or whenever a human is directing your coding work spatially instead of in a chat thread.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **⚠ CANVAS WORK GOES THROUGH THE CLI, NOT AN MCP TOOL.** Anything written
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sticker-pack
|
|
3
|
+
description: Needs a terminal with the beehaven CLI (Claude Code, Codex, Gemini CLI); in a chat with only the Clearly connector, say so and use the clearly_* tools instead. Turn an idea into a printable, die-cut STICKER SHEET on a Clearly canvas — Clearly's own sticker-vending-machine pipeline surfaced as an agent skill. Generates a cohesive SET of transparent stickers, lays them out as a sheet (frame + gridded stickers + a vector kiss-cut cutline layer), and hands back a print-ready bundle. Load this when the user says "make me stickers / a sticker pack / a sticker sheet about X", "turn this into stickers", "design stickers for my brand / startup / cat", or "I want die-cut stickers". The fun, inherently-shareable corner of the canvas skill set.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **⚠ CANVAS AND STICKER WORK GO THROUGH THE CLI, NOT AN MCP TOOL.** Anything written
|
|
7
|
+
> `beehaven call <action>` below is a literal command. The MCP surface is seven tools split
|
|
8
|
+
> by operation; the ~1,000 workspace actions are reached by name through the shell.
|
|
9
|
+
|
|
10
|
+
# Sticker pack — idea → printable die-cut sheet
|
|
11
|
+
|
|
12
|
+
Stickers are the most organically viral thing Clearly makes: a generated die-cut pack someone actually prints and slaps on a laptop *is* the share. This skill drives Clearly's real sticker-vending pipeline — the same one behind the studio — straight onto a canvas.
|
|
13
|
+
|
|
14
|
+
Install the `beehaven` CLI, sign in as an agent, and connect the intended workspace first
|
|
15
|
+
(`clearly-init` handles setup). Then read `clearly-canvas` for the primitives and the
|
|
16
|
+
perceive→act→revise loop. This skill adds the **generation** step on top of it.
|
|
17
|
+
|
|
18
|
+
## The one core tool (and a heads-up)
|
|
19
|
+
|
|
20
|
+
The sticker pipeline runs through **`sticker-sheet-gen`**, a real workspace action. It is NOT (yet) a dedicated MCP tool, so you call it through the generic dispatcher:
|
|
21
|
+
|
|
22
|
+
```jsonc
|
|
23
|
+
beehaven call sticker-sheet-gen '{ … }'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> ⚠ **This is a CLI action, not an MCP tool, and that is settled rather than pending.**
|
|
27
|
+
> `clearly_sticker_generate` **does not exist** and is not planned — an earlier version of this
|
|
28
|
+
> note called it a missing piece. The MCP surface is seven tools split by operation, and a
|
|
29
|
+
> per-feature tool for every workspace action is the 139-tool surface that was withdrawn. The
|
|
30
|
+
> action is production code — the same pipeline the paid studio uses — and the CLI reaches it with
|
|
31
|
+
> full attribution.
|
|
32
|
+
|
|
33
|
+
**It is slow (30–90s), async, and costs the user a sheet credit.** Pass a `compositionId` and the pipeline does the canvas work for you: when the art lands, it places a **transparent parent frame ("Sticker sheet")**, every cut-out sticker nested as its own `image` node (drag one out!), and the **die-cut contour as a nested vector `svg` layer ("Cutline (kiss-cut)")**. The cutline is true vector — exported as the spot cut layer, never rasterized.
|
|
34
|
+
|
|
35
|
+
The call awaits the pipeline (racing a 90s timeout) so you usually get the **full result back** — `{ ok, sheetId, stickerCount, sheetUrl, placed }`. If it ran long you get `{ sessionId, timedOut: true }`; then perceive until the frame appears (see step 2).
|
|
36
|
+
|
|
37
|
+
## 1. Brief — turn the idea into a cohesive set
|
|
38
|
+
|
|
39
|
+
Don't just forward the user's sentence. Shape it into a **set with a through-line**: one subject family, one style, one palette, consistent line weight. Then list the concepts back before spending the credit.
|
|
40
|
+
|
|
41
|
+
> *"Stickers for your plant shop — I'm thinking a cohesive 9-sticker set, flat-color cottagecore, sage + terracotta palette, chunky outlines: 1) monstera leaf, 2) watering can, 3) 'plant mom' badge, 4) terracotta pot, 5) snail, 6) sun, 7) 'grow' lettering, 8) seed packet, 9) trowel. Generate this sheet?"*
|
|
42
|
+
|
|
43
|
+
A sticker sheet is ONE generation, not N — the model draws the whole cohesive grid. So the brief = the `prompt` (subject + vibe + palette), plus `style` and `stickerCount`.
|
|
44
|
+
|
|
45
|
+
## 2. Generate — one call, drop on the canvas
|
|
46
|
+
|
|
47
|
+
Make a canvas first (or reuse one), then fire the gen with `compositionId` so it lands:
|
|
48
|
+
|
|
49
|
+
```jsonc
|
|
50
|
+
beehaven call composition-create '{ "title": "Plant shop stickers" }'
|
|
51
|
+
// → { "id": "c_…" }
|
|
52
|
+
|
|
53
|
+
beehaven call sticker-sheet-gen '{
|
|
54
|
+
"compositionId": "c_…",
|
|
55
|
+
"prompt": "cottagecore plant-shop stickers: monstera leaf, watering can, terracotta pot, snail, sun, seed packet — flat color, chunky outlines, sage green + terracotta palette",
|
|
56
|
+
"style": "cottagecore",
|
|
57
|
+
"stickerCount": 9,
|
|
58
|
+
"bleedStyle": "halo",
|
|
59
|
+
"aspectRatio": "2:3"
|
|
60
|
+
}'
|
|
61
|
+
// → { ok:true, sheetId:"sht_…", stickerCount:9, sheetUrl:"https://…", placed:{ stickers:9, cutline:true } }
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Input shape (all optional except `prompt`):
|
|
65
|
+
|
|
66
|
+
| Field | Meaning |
|
|
67
|
+
|---|---|
|
|
68
|
+
| `prompt`* | what the stickers depict — subject, vibe, palette |
|
|
69
|
+
| `compositionId` | **pass it** — the canvas to drop the sheet onto (placeholder + frame + cutline) |
|
|
70
|
+
| `style` | preset: `kawaii`, `planner`, `cottagecore`, `doodle`, … (omit → inferred) |
|
|
71
|
+
| `stickerCount` | stickers on the sheet (e.g. 9, 16, 30). Default 30 |
|
|
72
|
+
| `bleedStyle` | `halo` (default — white sticker outline) or `full-bleed` |
|
|
73
|
+
| `aspectRatio` | sheet ratio: `1:1` `2:3` `3:2` `3:4` `4:3` `9:16` `16:9` |
|
|
74
|
+
| `quality` | `standard` (default, 4K) or `premium` |
|
|
75
|
+
| `seed` | reproducibility |
|
|
76
|
+
|
|
77
|
+
**Handle the async/loading case.** If the response is `{ sessionId, timedOut: true }` (no `placed`), the gen is still running — the ⏳ placeholder is already on the canvas. Poll until the real frame lands:
|
|
78
|
+
|
|
79
|
+
```jsonc
|
|
80
|
+
canvas-perceive { "compositionId": "c_…", "format": "text" }
|
|
81
|
+
// look in `contents` for a frame named "Sticker sheet" with image children
|
|
82
|
+
// + an svg layer "Cutline (kiss-cut)". When it's there, the sheet is done.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
On a hard failure the response carries an `error` (`no_exports_remaining` → user needs to buy a sheet; `rate_limit_exceeded` → back off `retryAfter`s) and the credit is auto-refunded — relay that plainly, don't retry blindly.
|
|
86
|
+
|
|
87
|
+
## 3. The sheet is already laid out — make it presentable
|
|
88
|
+
|
|
89
|
+
The pipeline placed the frame, the cut-out stickers (gridded, native pixel size), and the cutline layer in ONE write. Your job is polish, via `canvas-act` (see `clearly-canvas`):
|
|
90
|
+
|
|
91
|
+
- **Perceive first**, read the `backgroundColor`, then drop a `text` title over the frame: "Plant shop · 9 stickers · kiss-cut".
|
|
92
|
+
- A tiny caption noting the **"Cutline (kiss-cut)"** layer is the spot cut path (vector) — toggle it to preview the die-cut.
|
|
93
|
+
- If the grid is cramped, `canvas.update-nodes` to nudge the frame into the user's `gaze`.
|
|
94
|
+
|
|
95
|
+
Don't rebuild the grid by hand — the pipeline already nested everything correctly. Only add labels + framing context.
|
|
96
|
+
|
|
97
|
+
## 4. Export — the printable bundle
|
|
98
|
+
|
|
99
|
+
When they're happy, pull the print kit:
|
|
100
|
+
|
|
101
|
+
```jsonc
|
|
102
|
+
beehaven call sticker-sheet-export '{ "sheetId": "sht_…" }'
|
|
103
|
+
// → { zipUrl, pdfUrl, sheetUrl, stickerUrls:[…], stickerCount, hasCutFile:true }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- `zipUrl` — the FULL kit: print-ready **PDF** + **cut-file SVG** (the spot cut layer) + every individual sticker PNG + the composited sheet.
|
|
107
|
+
- `pdfUrl` — drop straight into a Cricut / Roland / Stickermule flow.
|
|
108
|
+
- Omit `sheetId` to export their most recent sheet.
|
|
109
|
+
|
|
110
|
+
Hand the user the `pdfUrl` / `zipUrl` and tell them the SVG cut file is what a plotter reads for the die-cut contour.
|
|
111
|
+
|
|
112
|
+
## 5. Keep the human in the loop
|
|
113
|
+
|
|
114
|
+
The whole point of the canvas is steering by gesture. After the sheet lands: *"It's on your canvas — tell me 'more like #2', 'swap to a blue palette', or 'add a cat'."* Then re-run `sticker-sheet-gen` with the revised `prompt`/`style`/`seed` (reuse `seed` to keep a look, change it to re-roll), and re-perceive. Iterate until they love it, *then* export.
|
|
115
|
+
|
|
116
|
+
## The viral bit
|
|
117
|
+
|
|
118
|
+
A real die-cut pack — transparent stickers, a visible kiss-cut contour, a print-ready PDF the user actually sends to a sticker printer — is the single most shareable output Clearly has. People post the laptop, not the prompt. So make every sheet land clean: cohesive set, honest cutline, one screenshot that reads as "I generated these and printed them." The sticker IS the share.
|
|
119
|
+
|
|
120
|
+
## Single-sticker fallback
|
|
121
|
+
|
|
122
|
+
For ONE vector sticker (not a sheet), draw it natively with `canvas-act` like a designer: shapes and `vector.create` pen paths in a frame, named and grouped, with the white border as its own closed path behind the art. Use `studio-image-generate` for a painterly raster sticker, and `format:'svg'` only when a generated SVG file is asked for. If `sticker-sheet-gen` is ever unavailable, the manual sheet = `studio-image-generate` per concept (transparent), then `canvas-act` → `frame.create` + one `canvas.create-node {type:'image'}` per sticker on a grid + a closed `vector.create` cutline outline. But that's the cold path — the pipeline above is the real, supported one.
|
|
123
|
+
|
|
124
|
+
## Rules of thumb
|
|
125
|
+
|
|
126
|
+
- **One gen = one whole sheet.** Don't loop the call per sticker; the model draws the cohesive grid in a single pass.
|
|
127
|
+
- **Always pass `compositionId`** — that's what lands the placeholder, frame, stickers, and cutline. No `compositionId` = no canvas output.
|
|
128
|
+
- **It's slow + costs a credit.** Confirm the brief BEFORE generating; relay `no_exports_remaining` / `rate_limit_exceeded` plainly (credit auto-refunds on failure).
|
|
129
|
+
- **`timedOut:true` ≠ failed** — the gen is still running; `canvas-perceive` until the "Sticker sheet" frame appears.
|
|
130
|
+
- **The cutline is vector** ("Cutline (kiss-cut)" svg layer) — it's the spot cut path; the export SVG/PDF is what a plotter cuts.
|
|
131
|
+
- **Iterate by re-genning**, reuse `seed` to hold a look, then **export last**.
|
|
132
|
+
- **Reach `sticker-sheet-gen` / `sticker-sheet-export` with `beehaven call`** — they are workspace actions, not MCP tools, and will not become tools.
|