publish is called.
Connect
- Create a key on the Agents page (it’s shown once).
- Connect your agent:
https://YOUR-POSY/api/mcp with the header
Authorization: Bearer posy_.... The Agents page has copy-paste snippets for each.
YOUR-POSY is your own server or posy.page. The API, MCP server and CLI behave the same on both, so a script written for one works on the other by changing POSY_URL. export and import move a whole page between them.
MCP tools
Prompts that work
Add my GitHub repo owner/name as a wide tile under “Projects”, then publish.
Switch to the Cobalt look in the moonlit palette, with photos printed in mono.
Make a “Writing” section with links to my three latest posts: …
Rules for agents
- Start with
get_page. Tiles have stable ids. - Sizes:
s(1×1),w(2×1),t(1×2),l(2×2).headingtiles start a new section. On the default desk layout every tile is an object: images are polaroids, notes are sticky notes, Spotify is a record, YouTube is a ticket, GitHub repos are index cards, newsletter links (Substack, Buttondown, beehiiv…) are envelopes and links with a preview image are postcards. Social tiles become stickers under the name. Other looks (theme.style) draw the same tiles as their own objects:washi(a Japanese print: paper, ink, a red seal),lofi(a desktop left open; tiles are windows you can drag),painted(watercolour paper, letters, wax seals),cobalt(a vintage print in two inks, under a crescent moon) andnight(a netrunner’s HUD: scanned photos, cut-corner panels, one signal colour).cozyis the Desk look. Those are the looks to offer;list_optionsreturns each with a short note and its palettes (theme.preset). Pages made with the retiredpressandgallerylooks open ascobaltandpainted. On posy.page, Painted, Desk and Cobalt are free; Washi, Lofi and Night are Pro. Atexttile withlook: "stamp"is each look’s badge (stamp, red dot, wax seal, blinking sign). - Colours:
auto,surface,accentor a pastel tint (peach,butter,mint,sky,lilac,rose). - Keep pages calm: a few well-chosen tiles beat many. Ask before deleting things the user added.
- Edits are version-checked, so an agent and the person in the studio can work at the same time.
- Layouts:
bentois the grid,listis one column of links, andcanvasplaces every tile freely, like a design canvas. Oncanvasa tile can carrypos: { x, y, w, h, r, z }in a design space 1200 units wide (the page scales it to fit;ygrows downwards without limit).ris rotation in degrees (-15 to 15, default 0) andzis the layer (higher on top, default 0). Tiles withoutposare placed automatically, flowing like the grid below any placed tiles, so switching a page to canvas needs no positions at all. The auto grid is 4 columns of 288 with 16 gaps: a small tile is 288×288, wide 592×288, tall 288×592, large 592×592, and columnnstarts atx = n × 304. Keep values on multiples of 8, overlap tiles only on purpose, and keep text tiles at least 160 wide. Example:update_tilewith{"pos":{"x":608,"y":0,"w":592,"h":288,"r":-3,"z":1}}. On phones (under 600px) a canvas page becomes one column, ordered top to bottom, then left to right.
Tile types
The JSON Schema for a whole page is in
schema/page.schema.json (npm run schema regenerates it).
REST and public JSON
PATCH (or POST) /api/v1/page/theme is set_theme over REST: send only the fields that should change (style, preset, accent, font, radius, layout, align, photos, tileStyle, effect, avatar, motion, ambient, background) and get the whole theme back.
Each published page also has a plain-text version at /<username>/llms.txt.