summer-board-types is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Define and reuse types on a Summer Board (Character, Level, Item) so ideas become typed cards: read the board’s types first, reuse before you define.
When your agent uses it
- Putting characters, levels, items, abilities, quests or any set of similar things on a Summer Board
- About to call board.types define, or a person asks for a type, a list of all X, or a cleanup of types
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
A type says what a kind of thing on the board is: a Character has a name, a role and hp; a Level has a theme and a boss. A card is one thing of a type, drawn in its type’s colour. People list cards by type, turn them into tasks, and the game loads them as data. One board has at most 30 types, shared by every person and agent on it. How many types and which fields: readsummer-board-modeling first. This skill is how to define them without making a mess.
1. Read before you define
- A type already holds it. Use it as it is.
- A type almost holds it. Extend it: add the field you need (section 3).
- It is a kind of an existing type. An enemy is a Character with
role: "enemy". Add a value to the choice, not a new type. - Nothing holds it, and
summer-board-modelingsays it earns a type. Define it.
2. Define a type
The type is a JSON Schema, a small flat subset:- Name: singular, one or two words, capitalised:
Character,Level,Weapon,QuestStep. NotCharacters,character_list,GameCharacter. - Property keys: lower snake case, plain words:
hp,move_speed,unlock_level. - Property kinds:
string,number,integer,boolean,enum(a choice), and arrays of those. Nothing nested: a nested thing is a type of its own, linked withx-ref.oneOf,$ref,patternanddefaultare refused with what to write instead;$schemaandadditionalPropertiesare fine and ignored. x-ref: "Faction": the value is the id of a Faction card. Use it for every link between things, so the board draws the link and the game gets a real reference. The linked type must exist first: define Faction before a Character that points at it, or add the field to Character once Faction exists.description: one line, on the type and on any property whose meaning or unit is not obvious (“metres per second”).- How it shows (
x-show, optional): a card lays its fields out by kind: the first plain text field becomes the line under the name, choices and true-or-false are pills, a number withminimumandmaximumis a bar, other numbers are stat chips, links are chips of the linked card, other text is short lines. Setx-showonly to change that:title,tag,health(needs amaximum),stat,link,picture(a board file’s url, fromboard.upload; a list is a gallery),text, orhidden(table only). Give the field you want under the namex-show: "title", and a health-like number amaximum. required: only what a card is useless without. Usuallynameand one or two more.nameis always there; the board adds it if you leave it out.x-color,x-icon: optional. Leave them out and the board picks. Never change another type’s colour.
fields). If the board refuses the name as too close to an existing type (Enemies next to Enemy, a typo), it names that type: use it (section 1), do not invent a third spelling.
3. Change a type
define with an existing name replaces it. Before you change a type someone else made, check the cards it affects:
- Adding a property or a choice value is always fine. Do it.
- Removing a property or a choice value, or tightening
minimum/maximum: the answer says how many cards it affects. If any, ask in oneboard.postfirst (kind: "proposal") unless the person asked for it. - Renaming:
board.types {action: "rename", name: "Map", to: "Level"}or{action: "rename", name: "Character", property: "health", to: "hp"}. Renames rewrite every card and link; never rename by defining a second type.
4. Merging and deleting
Merging moves every card of one type into another; it changes people’s work, so ask first. When you see two types that mean one thing:unmapped); they stay on the cards as issues. Links to Monster now point at Enemy. Never copy cards from one type to another by hand.
board.types {action: "delete", name} removes a type with no cards that no other type links to. A type with cards is merged, not deleted.
5. Cards
- Make many cards with one
itemscall (up to 100). Give each your ownitemId: links can then name cards in the same call, even ones further down the list. - Place with
atinstead of x and y:{in: frame or card}takes the next free slot of a grid (the frame grows to fit),{right | below | left | above: item}goes beside an item and skips past whatever is there. - One card is one thing. Its name, fields and main picture are on the card. More pictures and free notes about it go on top of the card: whatever lies on a card belongs to it (moves, copies and deletes with it), and
board.readlists them as the card’sattacheditems. Make the card big enough to hold them. - Picture: upload with
board.upload, then pass theurl. - Links: set the
x-reffield to the other card’s id. Do not also draw an arrow; the board draws links from the values. - Lay cards of a type out together, in a frame named after the topic (summer-board 7b).
6. Cards are tasks
A card becomes a task like any item, titled “Character: Ember Knight”:doing line. Mark it done with a note saying where the result is. To find open work of a type: board.query {type: "Level", status: "open"}.
7. Before you say it is done
board.types {action: "list"}: no two types mean one thing, no type with fewer than 3 cards unless the person wants it.board.queryeach type you touched: no issues left on your cards.
From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
summer-board: Summer Board co-op: tasks, claims, files, card frames.summer-board-modeling: How granular to model a game on its Summer Board: what earns a type, what stays a note or a field, and starter type sets per genre.summer-board-to-game: Bring a Summer Board’s typed cards into the game as Godot Resources, load them through BoardData, and keep board and game in step.
Source:
library/skills/summer-board-types/SKILL.md, rendered from summer-engine@4.9.1 on npm.
