antigravity-config-json-valid¶
Antigravity registry files must decode their paths and filters correctly
| Severity | error (disabled) |
| Autofix | - |
| Since | v0.20.0 |
| Repo Types | antigravity, antigravity-plugin |
| Category | Google Antigravity |
Why¶
A customization root can carry registry files — agents.json,
plugins.json, skills.json, workflows.json — that name where else to
load that kind of customization from. They hold no customizations
themselves. These files accept JSONC: line and block comments and trailing
commas. Registry discovery and this opt-in validator use the same syntax:
Measured against agy 1.1.25 and 1.1.26: a registry whose root is neither
an object nor null logs
one Failed to load JSON config file line and is skipped, and agy exits
0. Nothing else reports it, so a mistyped registry looks exactly like a
project that has none — the agents or skills it was meant to add are simply
absent.
Opt-in¶
Off by default. Only agents.json and plugins.json could be exercised
against a running agy: no offline subcommand loads the other two, so the
checks stop at what a measurement covers rather than guessing at a schema.
Turn it on when a repository actually uses these files.
Severity¶
Errors — the registry is skipped and loads nothing:
- Invalid JSONC, including single-quoted strings or unquoted keys, or a
non-finite number (
NaN,Infinity,-Infinity). - A UTF-8 byte-order mark (BOM). Remove it; the loader does not strip it.
- A non-null root that is not a JSON object.
- Non-null
entriesorinheritsthat is not an array. - A non-null element of either array that is not an object, or a non-null
paththat is not a string. - Non-null
include_onlyorexcludethat is not a string array, or a non-null array element that is not a string.
One finding groups field type errors and names the first few positions. A type error remains fatal even if a later duplicate replaces the field.
What is not reported¶
- Whether a
pathresolves. A path is absolute,~/-relative, or relative to the repository root, and a registry may legitimately name a directory that only exists on a developer's machine.
skillsaw still follows the ones that do resolve inside the repository.
A plugins.json entry's plugins get their hooks, MCP servers, skills and
prose linted, and an agents.json entry's *.md is read as agent prose —
independently of this rule, which is opt-in. include_only and exclude
are ignored when deciding what to lint: skillsaw reports what a
repository ships, not what it currently loads.
- Unknown keys. Antigravity reads these files with a tolerant JSON
decoder that discards them.
- Field casing. Known fields match case-insensitively: Entries,
Inherits, Path, Include_Only and EXCLUDE are accepted. Underscores
remain significant; IncludeOnly is an ignored unknown field.
- Repeated fields. Later path strings replace earlier strings; null
retains a prior string. Repeated nonempty entries / inherits arrays
reuse corresponding path-entry fields, including after shortening and
regrowing the array. An empty array or null resets those entries.
Discovery follows the resulting paths, using this same decoded view.
- Null defaults. A null root, null arrays, null entries and missing
or null paths are accepted. An entry without a path contributes nothing;
valid siblings still load. Null filter elements are accepted too.
- An empty string path. It contributes no directory.
- A large finite JSON number in an unknown field. The loader ignores
that field; the lexical tokens NaN and Infinity remain invalid.
Examples¶
Bad — an array root, which Antigravity skips whole:
Good — an agents.json registry:
{
"entries": [
{
"path": "internal/schedule/agents",
"include_only": ["gtfs-*"]
}
],
"inherits": [{ "path": "tools/shared/agents.json" }]
}
inherits names another registry file, not a directory: a directory
there loads nothing.
How to fix¶
- Wrap the list in an object under
entries. - Give every entry a string
path. What it may name depends on the registry: foragents.jsonit must be the directory the items sit directly inside, and a parent of that loads nothing. Forplugins.jsoneither spelling works — one plugin directory, or a container whose direct children are plugins. skills.jsonandworkflows.jsonhave shape-only coverage. Their loading semantics remain unverified, and skillsaw does not resolve their entries.
Configuration¶
Run skillsaw explain antigravity-config-json-valid to see this documentation and the rule's effective configuration in your terminal.