Declare types
SkillFiles & storageLets your agent add new types of records like products or tickets to a workspace using one config file.
Use Declare types in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Declare types and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Declare types skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Give this workspace a resource type, products, lessons, tickets, whatever the business actually tracks, by writing one TOML file, so navigation, a searchable index, a detail page and a create/edit form all appear without code.
What this skill tells your AI
The instructions your AI receives, as published by one-ie/one in ai/skills/declare-types/SKILL.md and read by Ahel’s review.
A type is a TOML file in data/types/. one push sends every one of them to
world:declare-types, and the console generates the admin from the manifest —
a sidebar entry, an index table with search and inline cell editing, a
two-column detail page, and a create/edit form. There is no migration and no
generated code to review.
The file
id = "ticket"
label = "Ticket"
description = "A support request, from open to closed"
[[fields]]
name = "subject"
type = "string"
label = "Subject"
[[fields]]
name = "status"
type = "select"
label = "Status"
id is the key the console and every signal use; label is what a human reads.
A file whose basename starts with _ is skipped, which is how data/types/
ships sets nobody has turned on yet.
Field types, and what each becomes
type | index column | form input |
|---|---|---|
string · url | text | text input |
number | number | number input |
currency | number | number input |
date | formatted date | date picker |
tags | tag chips | tag picker |
select · bool | badge | dropdown |
image | thumbnail | URL input |
markdown | text | textarea |
relation | the linked record's name | entity picker |
An unrecognised type falls back to text rather than failing the push, so a
typo degrades quietly — check the column you got, not just the exit code.
Three things that decide the shape
Name the status field status. A type carrying a field called exactly that
gets the Table/Kanban toggle. state, stage and phase do not.
Set dimension = "actors" for anyone who acts. The default is things.
A customer, a student, a staff member signs in, holds a role and can carry a
key — that is an actor. A product, an order, a lesson is a thing. Getting this
wrong is not cosmetic: authority walks the actor tree.
relation needs no target. It resolves to the linked record's name and
draws a line between the two types in the schema designer, across both things
and actors.
Pushing a SET
Every type file goes in one world:declare-types call, because that
receiver REPLACES the workspace manifest rather than adding to it. This matters:
@oneie/cli4.2.0 and older sent one call per file, so each type deleted the one before it — five files pushed, one type kept, and the CLI still saidPushed 5/5 item(s).Checkone --version. On an older build, enable one type at a time and confirm each in the console before the next.
Because it is a replace, a push is the whole manifest. A type you delete
from data/types/ disappears from the workspace on the next push. That is the
intended behaviour, not a bug — but say it out loud before you delete a file
for someone.
Growing a type
Add a [[fields]] block and push again. The column appears in the index and the
form immediately. The visual schema designer edits the same manifest, so a field
added in the browser and a field added here are the same object — and the last
writer wins. Read the current manifest before a large edit rather than assuming
the file on disk is what the workspace holds.
What this does not do yet
Image upload — images are URLs; there is no upload endpoint. Custom queries and computed fields. Full custom-field admin for groups, paths, learning and events — those render a default label only. Promise none of them.
Signals
- GitHub stars
- 131
- Forks
- 26
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
declare-types- Source
- github.com/one-ie/one