Agent skill

toon-format

TOON (Token-Oriented Object Notation) encoding for LLM-efficient data representation. 30-60% token savings vs JSON for structured data.

Stars 232
Forks 15

Install this agent skill to your Project

npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/consiliency/toon-format

SKILL.md

TOON Format Skill

TOON is a compact, human-readable encoding of JSON designed for LLM prompts.

Variables

Variable Default Description
VALIDATION_MODE strict strict (CLI validation required) or lenient (parser permissive)
AUTO_FIX true Run fix scripts automatically on validation failure

Instructions

MANDATORY - Follow the format rules in this skill and reference/format-rules.md.

  • Always include explicit [count] for arrays
  • Use 2-space indentation for tabular rows
  • Add blank line after tabular arrays to terminate them
  • Use semicolons for nested arrays in cells (NOT commas)

Red Flags - STOP and Reconsider

If you're about to:

  • Put commas inside quoted strings in tabular cells
  • Omit the [count] from array declarations
  • Forget the blank line after a tabular array
  • Use YAML-style - item list syntax
  • Add comments with #

STOP -> Check reference/format-rules.md -> Then proceed

Workflow

  1. Determine if TOON is appropriate (see "When to Use TOON" below)
  2. Design data structure for tabular representation
  3. CHECKPOINT: Verify format matches rules
  4. Write TOON with proper indentation
  5. Validate with npx @toon-format/cli --decode
  6. If errors, run auto-fix scripts from reference/validation-tools.md

Cookbook

Format Rules

  • IF: Writing or editing TOON files
  • THEN: Read reference/format-rules.md
  • COVERS: Syntax rules, constraints, correct patterns

Validation & Fixing

  • IF: TOON file fails validation
  • THEN: Read reference/validation-tools.md
  • COVERS: CLI validation, auto-fix scripts

When to Use TOON

Good candidates:

  • Uniform tabular data (lists of similar objects)
  • Documentation indexes and manifests
  • Repeated key-value structures
  • Any structured data being fed to LLMs

Use JSON instead for:

  • Deeply nested structures
  • Non-uniform data (mixed schemas)
  • Data requiring frequent programmatic manipulation
  • Configuration files read by tools

TOON Syntax

Key-Value (YAML-like)

toon
name: John
age: 30
active: true

Arrays with Explicit Length

toon
tags[3]: red, green, blue

Tabular Data (Primary Use Case)

toon
# Syntax: name[count]{col1,col2,col3}:
# Followed by 2-space indented CSV-like rows

users[3]{id,name,email}:
  1,John,john@example.com
  2,Jane,jane@example.com
  3,Bob,bob@example.com

IMPORTANT: Rows MUST be indented with 2 spaces. Always add a blank line after the last row.

Nested Arrays in Cells

Use semicolons or quote values containing multiple items:

toon
pages[2]{path,keywords,priority}:
/intro,"overview;basics;start",core
/api,"reference;methods;types",core

Multi-line Strings

Use quoted strings with \n for line breaks:

toon
description: "This is a multi-line\nstring value that preserves\nline breaks."

Nested Objects

toon
config:
  database:
    host: localhost
    port: 5432
  cache:
    enabled: true

Encoding Patterns for Documentation

Index Files

toon
meta:
  category: libraries
  generated: 2025-01-15T10:30:00Z
  count: 5

items[5]{id,name,description,path,keywords}:
baml,BAML,Structured LLM outputs,ai-docs/libraries/baml/_index.toon,"llm;types;structured"
mcp,MCP,Tool integration protocol,ai-docs/libraries/mcp/_index.toon,"tools;context;servers"
prisma,Prisma,Type-safe database ORM,ai-docs/libraries/prisma/_index.toon,"database;orm;sql"

Page Summaries

toon
meta:
  library: baml
  page: error-handling
  source_url: https://docs.boundaryml.com/guide/error-handling
  content_hash: a3f2c1d4e5

summary:
  purpose: "Configure retry policies and fallback strategies for resilient LLM calls."

  key_concepts[4]: RetryPolicy,FallbackClient,timeout,exponential backoff

  gotchas[2]: Default timeout 60s may be too short,Retries count against rate limits

code_patterns[1]:
  - lang: baml
    desc: Retry policy configuration
    code: "retry_policy Resilient {\n  max_retries 3\n  strategy exponential\n}"

Token Comparison

JSON (~280 tokens):

json
{"pages":[{"path":"/intro","section":"guide","title":"Introduction","priority":"core"},{"path":"/setup","section":"guide","title":"Setup","priority":"core"}]}

TOON (~100 tokens):

toon
pages[2]{path,section,title,priority}:
/intro,guide,Introduction,core
/setup,guide,Setup,core

Savings: ~64%

Tools & Libraries

Best Practices

  1. Design data structures for tabular representation when possible
  2. Use explicit [count] for arrays - helps LLM parsing
  3. Keep JSON as canonical source, TOON for LLM transport
  4. Use semicolons for nested arrays (e.g., "val1;val2;val3")
  5. Truncate long strings (code snippets < 200 chars)
  6. Always add a blank line after tabular arrays to terminate them

Format Constraints

Enforced by official @toon-format/cli (use --decode to validate):

Rule ❌ Incorrect ✅ Correct
No comments # comment (remove comments entirely)
No YAML-style lists - item key[N]{col}: + indented rows
Rows must be indented row,data row,data (2 spaces)
Arrays need count+cols items{a,b}: items[3]{a,b}:
No multiline strings key: | key: "line1\nline2"
No pipe delimiters val|val val,val or "val;val"
No commas in tabular cells "a,b" "a;b"
Blank line AFTER arrays missing terminator blank line after last row

Validation tools:

bash
# Validate with official CLI (use --decode, not validate!)
npx @toon-format/cli --decode file.toon > /dev/null

# Auto-fix common issues (run in this order)
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_comments.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_yaml_lists.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_nested_lists.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_commas.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_pipes.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_multiline.py path/
python3 .claude/ai-dev-kit/dev-tools/scripts/fix_toon_blank_lines.py path/

Expand your agent's capabilities with these related and highly-rated skills.

aiskillstore/marketplace

perigon-backend

Perigon ASP.NET Core + EF Core + Aspire conventions

232 15
Explore
aiskillstore/marketplace

perigon-agent

Pointers for Copilot/agents to apply Perigon conventions

232 15
Explore
aiskillstore/marketplace

perigon-angular

Angular 21+ standalone/Material/signal conventions for Perigon WebApp

232 15
Explore
aiskillstore/marketplace

fastapi-mastery

Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.

232 15
Explore
aiskillstore/marketplace

context7-efficient

Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.

232 15
Explore
aiskillstore/marketplace

browser-use

Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.

232 15
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results