name
Type str Required required Default — What it is —
Naming a file format in a skill’s frontmatter doesn’t make the app accept that format — the upload pipeline decides what it will actually ingest, and the two can disagree.
File formats still depend on the app, not the skill. The upload parser
accepts a PDF with extractable text, or plain text and Markdown saved as
valid UTF-8; an encrypted or image-only PDF, or a text file that isn’t valid
UTF-8, fails ingestion (api/app/pipeline/ingest.py,
api/app/pipeline/parsers.py). DOCX is not ingested today — a skill’s
instructions or a declared input can mention a .docx file, but that
mention does not add Word-document upload support. DOCX ingest via Pandoc
is an accepted design
(ADR 0017), not a shipped one;
its implementation is tracked separately from the decision to build it.
Generated from api/app/skills/schema.py — the loader’s own schema, which is what accepts or rejects a skill at load time. The conventions an author should follow are in the skill-authoring guide; this page is the floor the product enforces underneath them.
The two required keys, plus the lq_ai: block everything else nests under.
Top-level frontmatter shape. Two required fields — name and description. name is the skill’s stable identifier (matches the folder name); description is the one-sentence trigger statement. Everything else nests under lq_ai: per the authoring guide.
name
description
lq_ai
lq_ai: blockEvery field is optional. A skill that declares none still loads.
The lq_ai: namespace inside a SKILL.md’s frontmatter. All fields are optional. The skill-authoring guide documents recommended values, but the M1 starter skill corpus uses a broader range — strict validation would reject most of it. The summary endpoint surfaces what is present; missing fields are simply not in the response.
capabilities
title
name rendered title-cased when missing.version
author
tags
jurisdiction
us, regime-aware, agnostic, regime-dependent, US-default, etc.).output_format
report, markdown, structured_checklist, redline, table, etc.). The table value (M3-C1) signals to the Tabular Review surface that this skill produces a grid; the column spec lives in columns.columns
output_format: table skill (M3-C1). None for non-table skills. The loader (app/skills/loader.py) emits a WARNING and skips the skill when output_format == 'table' but columns is missing or empty — mirroring the existing pattern for required-but-missing fields. A non-table skill may carry a columns value (e.g., a skill author iterating on output mode); downstream surfaces ignore it unless output_format == 'table'.minimum_inference_tier
ensemble_verification
use_organization_profile
is_organization_profile
self_improvement
trigger_examples
tool_usage
output_format: table skillRequired only when output_format: table; the loader skips a table-mode skill whose columns list is missing or empty.
One column in an output_format: table Skill (M3-C1). A table-mode skill produces a row-per-document by column-per-spec grid; each column carries its own per-row extraction query plus optional overrides for the skill-level ensemble_verification and minimum_inference_tier. The Tabular Review LangGraph workflow (M3-C2) dispatches one Citation-Engine-grounded extraction per (document, column) cell. Per Decision C-1 (Phase C prep, 2026-05-21): every cell value is a string in v0.3.0; typed columns are a follow-on DE if user-attorney walkthrough surfaces the need.
name
query
ensemble_verification
True, this column’s cells route through Stage 4 of the Citation Engine cascade (ensemble verification). Overrides the skill-level field when both are set. None means ‘inherit from skill / project / deployment default’. Stage 4 only runs when the gateway’s judge_models list (in the citation_engine.ensemble_verification block) is configured; it defaults to empty, which disables Stage 4 regardless of this flag.minimum_inference_tier
What the skill-input form renders against. Read from inputs: at the top level or under lq_ai: — the corpus uses both.
One declared input — the shape the skill-input form renders against. Fields per docs/skill-authoring-guide.md + observed corpus variance. name is the only strictly required field; the form can render a text input as the default when type is absent.
name
type
text | enum | boolean | integer | structured | file — free-form per corpus reality; the form renderer chooses a sensible default when null.required
description
enum
default