Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use TOON (Token-Oriented Object Notation) with schema.org vocabulary for prompting and instructing subagents and builtin agents. Use when delegating tasks to agents, structuring agent prompts, or specifying expected response formats. DO NOT use for external API calls or when JSON parsing is required.
.claude/skills/majiayu000-use-toon/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 197% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 358% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 417% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 290% | 0% |
<objective> TOON with schema.org vocabulary provides a standard format for prompting and instructing agents. Use it to structure task delegation, specify expected outputs, and ensure consistent responses from subagents and builtin agents.
Key benefits:
</objective>
<quick_start> <syntax> Object: key: value
Nested: Indentation (2 spaces)
Simple array: items[3]: a,b,c
Tabular array (uniform objects):
toonusers[2,]{id,name}: 1,Alice 2,Bob
</syntax>
<when_to_use> | Use TOON | Use JSON | |----------|----------| | Agent task prompts | External API calls | | Subagent instructions | Parsing with JSON.parse() | | Expected response format | Human debugging | | Agent-to-agent data | Deeply nested structures | </when_to_use> </quick_start>
<agent_prompting> <task_delegation> Structure agent tasks as schema.org Actions:
toon@type: SearchAction @id: task-001 description: Find all error handling patterns in the codebase object: @type: SoftwareSourceCode codeRepository: ./src expectedResult: @type: ItemList description: Files with error handling patterns
The agent knows:
</task_delegation>
<instruction_format> When instructing agents, include:
[Task description in natural language]
Input:
[TOON block with @type, @id, and structured data]
Return your result in TOON format using:
- @type: [expected type, e.g., ItemList, Report, SearchAction]
- @id: [task-id]-result
- Use tabular notation for lists</instruction_format>
<common_task_types> | Task | schema.org Type | Use | |------|-----------------|-----| | Find/search | SearchAction | Code search, file discovery | | Create/generate | CreateAction | Generate code, create files | | Modify/update | UpdateAction | Edit files, refactor code | | Validate/review | AssessAction | Code review, validation | | Delete/remove | DeleteAction | Remove files, clean up | | Analyze | AnalyzeAction | Code analysis, metrics | </common_task_types> </agent_prompting>
<core_syntax> <scalars>
toonname: Alice age: 30 active: true score: null
Types auto-detected: strings, numbers, booleans, null. </scalars>
<nesting>
toonuser: name: Alice address: city: Boston zip: 02101
Use 2-space indentation for nesting. </nesting>
<simple_arrays>
toontags[3]: red,green,blue ids[4]: 1,2,3,4
Format: key[count]: item1,item2,... </simple_arrays>
<tabular_arrays> For arrays of uniform objects (most efficient):
toonusers[3,]{id,name,role}: 1,Alice,admin 2,Bob,user 3,Carol,user
Format: key[rowCount,]{col1,col2,...}:
Each row provides values in column order, comma-separated. </tabular_arrays>
</core_syntax>
<schema_vocabulary> Use schema.org types and properties as shared vocabulary between agents.
<required_metadata> Every TOON object MUST include:
@type: schema.org type (e.g., Person, SearchAction, ItemList)@id: Unique identifier for the objecttoon@type: Person @id: user-123 name: Alice email: alice@example.com
</required_metadata>
<common_types> | Type | Use Case | Key Properties | |------|----------|----------------| | Action | Task execution | agent, object, result, actionStatus | | SearchAction | Search/find operations | query, result | | CreateAction | Creation operations | result, targetCollection | | UpdateAction | Modifications | targetCollection, result | | AssessAction | Validation/review | result, actionStatus | | ItemList | Collections | itemListElement, numberOfItems | | Thing | Generic entity | name, description, identifier | | CreativeWork | Documents/code | author, dateCreated, text | | SoftwareSourceCode | Code snippets | programmingLanguage, codeRepository | </common_types>
<action_status> For Action types, use actionStatus property:
| Status | Meaning | |--------|---------| | PotentialActionStatus | Not yet started | | ActiveActionStatus | In progress | | CompletedActionStatus | Successfully finished | | FailedActionStatus | Failed with error |
toon@type: SearchAction @id: search-001 actionStatus: CompletedActionStatus query: auth handlers resultCount: 3
</action_status>
<nested_types> Use @type for nested objects too:
toon@type: CreateAction @id: create-file-001 actionStatus: CompletedActionStatus result: @type: SoftwareSourceCode name: auth.ts programmingLanguage: TypeScript agent: @type: SoftwareApplication name: CodeAgent
</nested_types>
<property_conventions> Prefer schema.org property names:
| Instead of | Use | schema.org property | |------------|-----|---------------------| | file | name | Thing.name | | path | url | Thing.url | | content | text | CreativeWork.text | | created | dateCreated | CreativeWork.dateCreated | | author | author | CreativeWork.author | | count | numberOfItems | ItemList.numberOfItems | | items | itemListElement | ItemList.itemListElement | | error | error | Action.error | </property_conventions> </schema_vocabulary>
<prompting_patterns> <structured_input> When asking an agent to process structured data, use schema.org types:
Process this item list:
@type: ItemList
@id: pending-review
numberOfItems: 3
itemListElement[3,]{@type,identifier,name,status}:
Product,A1,Widget,pending
Product,A2,Gadget,shipped
Product,A3,Gizmo,pending
Return pending items as an ItemList in TOON format.</structured_input>
<requesting_toon_output> Include format instruction with schema.org guidance:
Return your answer in TOON format:
- Use appropriate schema.org @type (Action, ItemList, etc.)
- Include @id for the result object
- Use schema.org property names (name, description, result)
- Use tabular notation for uniform lists
- Wrap in ```toon code block</requesting_toon_output>
<agent_task_pattern> For agent task delegation, structure as Action:
toon@type: SearchAction @id: task-001 description: Find all authentication handlers object: @type: SoftwareSourceCode codeRepository: ./src expectedResult: @type: ItemList description: Files with auth handlers
</agent_task_pattern>
<agent_response_pattern> Agents return completed Actions:
toon@type: SearchAction @id: task-001 actionStatus: CompletedActionStatus result: @type: ItemList @id: task-001-result numberOfItems: 3 itemListElement[3,]{@type,name,url,description}: SoftwareSourceCode,handleLogin,src/auth.ts:42,Login handler SoftwareSourceCode,handleLogout,src/auth.ts:78,Logout handler SoftwareSourceCode,authGuard,src/middleware.ts:15,Auth middleware
</agent_response_pattern>
<extraction_pattern> Parse TOON from LLM response:
pythondef extract_toon(response: str) -> str: if "```toon" in response: return response.split("```toon")[1].split("```")[0].strip() elif "```" in response: return response.split("```")[1].split("```")[0].strip() return response.strip()
</extraction_pattern> </prompting_patterns>
<api_reference> Using the toon-format Python library (pip install toon-format):
pythonfrom toon_format import encode, decode, estimate_savings # Python dict to TOON toon_str = encode(data, options={}) # TOON to Python dict data = decode(toon_str, options={}) # Check efficiency stats = estimate_savings(data) # Returns: {"json_tokens": N, "toon_tokens": M, "savings_percent": X}
<options> | Option | Default | Use | |--------|---------|-----| | delimiter | "," | Row separator: ",", "\t", "|" | | lengthMarker | "" | Prefix for lengths: "", "#" | | strict | False | Validation strictness | </options> </api_reference>
<quoting_rules> Quote strings when they would be ambiguous:
| Value | Requires Quotes | Reason | |----------|-----------------|-----------------------------| | "" | Yes | Empty string | | "true" | Yes | Boolean keyword as string | | "123" | Yes | Numeric string (not number) | | "a,b" | Yes | Contains delimiter |
Unquoted values are parsed as their natural type. </quoting_rules>
<success_criteria> TOON with schema.org is correctly applied when:
@type (schema.org type) and @idactionStatus valuesitemListElement arraystoon languagedecode(encode(data)) == data</success_criteria>
<examples> <example name="search_action">
toon@type: SearchAction @id: search-auth-001 actionStatus: CompletedActionStatus query: authentication handlers result: @type: ItemList @id: search-auth-001-result numberOfItems: 3 itemListElement[3,]{@type,name,url,description}: SoftwareSourceCode,handleLogin,src/auth.ts:42,Login handler SoftwareSourceCode,handleLogout,src/auth.ts:78,Logout handler SoftwareSourceCode,authGuard,src/middleware.ts:15,Auth middleware
</example>
<example name="create_action">
toon@type: CreateAction @id: create-component-001 actionStatus: CompletedActionStatus description: Create React component result: @type: SoftwareSourceCode @id: button-component name: Button.tsx url: src/components/Button.tsx programmingLanguage: TypeScript dateCreated: 2025-01-15
</example>
<example name="assess_action">
toon@type: AssessAction @id: validate-005 actionStatus: CompletedActionStatus description: Validate outcome specification result: @type: Report @id: validate-005-report name: Validation Report reportStatus: NeedsAttention itemListElement[2,]{@type,name,description}: Warning,missing-desc,Description field is empty Info,add-examples,Consider adding examples
</example>
<example name="item_list">
toon@type: ItemList @id: pending-tasks description: Tasks awaiting review numberOfItems: 3 itemListElement[3,]{@type,identifier,name,status}: Action,task-001,Implement auth,PotentialActionStatus Action,task-002,Add tests,ActiveActionStatus Action,task-003,Update docs,PotentialActionStatus
</example> </examples>
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 17,886 | 11,416 | -36% | 1 | 1 | 0% | 1,427 | 4,237 | +197% | 0 | 0 | — |
case-02 | fail→pass | 9,570 | 10,092 | +5% | 1 | 1 | 0% | 887 | 4,061 | +358% | 0 | 0 | — |
case-03 | fail→pass | 13,135 | 21,512 | +64% | 1 | 1 | 0% | 1,078 | 5,572 | +417% | 0 | 0 | — |
case-04 | fail→pass | 13,092 | 8,785 | -33% | 1 | 1 | 0% | 1,454 | 3,818 | +163% | 0 | 0 | — |
case-05 | fail→pass | 11,621 | 11,529 | -1% | 1 | 1 | 0% | 1,077 | 4,196 | +290% | 0 | 0 | — |
case-06 | fail→pass | 14,852 | 8,462 | -43% | 1 | 1 | 0% | 1,730 | 3,648 | +111% | 0 | 0 | — |
case-07 | fail→pass | 12,205 | 9,917 | -19% | 1 | 1 | 0% | 1,184 | 3,880 | +228% | 0 | 0 | — |
case-08 | pass→fail | 6,216 | 10,675 | +72% | 1 | 1 | 0% | 1,075 | 4,044 | +276% | 0 | 0 | — |
case-09 | fail→pass | 12,693 | 11,324 | -11% | 1 | 1 | 0% | 1,314 | 3,853 | +193% | 0 | 0 | — |
case-10 | fail→pass | 9,926 | 7,761 | -22% | 1 | 1 | 0% | 861 | 3,546 | +312% | 0 | 0 | — |
case-11 | fail→fail | 9,880 | 8,871 | -10% | 1 | 1 | 0% | 831 | 3,743 | +350% | 0 | 0 | — |
case-12 | pass→pass | 4,517 | 10,387 | +130% | 1 | 1 | 0% | 778 | 4,023 | +417% | 0 | 0 | — |
case-13 | fail→pass | 8,871 | 7,854 | -11% | 1 | 1 | 0% | 625 | 3,546 | +467% | 0 | 0 | — |
case-14 | pass→pass | 4,157 | 7,777 | +87% | 1 | 1 | 0% | 688 | 3,537 | +414% | 0 | 0 | — |
case-15 | fail→pass | 3,951 | 23,911 | +505% | 1 | 1 | 0% | 644 | 3,503 | +444% | 0 | 0 | — |
case-16 | fail→pass | 11,438 | 9,738 | -15% | 1 | 1 | 0% | 1,282 | 4,033 | +215% | 0 | 0 | — |
case-17 | fail→pass | 12,188 | 10,435 | -14% | 1 | 1 | 0% | 1,153 | 3,987 | +246% | 0 | 0 | — |
case-18 | pass→pass | 18,549 | 10,501 | -43% | 1 | 1 | 0% | 2,570 | 5,029 | +96% | 0 | 0 | — |
case-19 | pass→pass | 25,435 | 4,257 | -83% | 1 | 1 | 0% | 1,911 | 3,916 | +105% | 0 | 0 | — |
case-20 | fail→pass | 17,029 | 3,486 | -80% | 1 | 1 | 0% | 1,271 | 3,711 | +192% | 0 | 0 | — |
case-21 | fail→pass | 8,687 | 8,006 | -8% | 1 | 1 | 0% | 801 | 3,558 | +344% | 0 | 0 | — |
case-22 | fail→pass | 11,195 | 11,926 | +7% | 1 | 1 | 0% | 1,255 | 4,371 | +248% | 0 | 0 | — |
case-23 | fail→pass | 17,262 | 14,136 | -18% | 1 | 1 | 0% | 3,252 | 4,424 | +36% | 0 | 0 | — |
case-24 | fail→pass | 3,836 | 3,707 | -3% | 1 | 1 | 0% | 668 | 3,726 | +458% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +71 percentage points is the difference between those two pass rates over the 24 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.