Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Reviews JSON Schema files in iglu-central for common issues found in PR reviews.
$ npx skills add snowplow/iglu-central --skill schema-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install snowplow/iglu-central schema-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/schema-review .claude/skills/schema-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .claude/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add snowplow/iglu-central --skill schema-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install snowplow/iglu-central schema-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/schema-review .agents/skills/schema-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .agents/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add snowplow/iglu-central --skill schema-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install snowplow/iglu-central schema-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/schema-review .cursor/skills/schema-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .cursor/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/snowplow/iglu-central.git --path .claude/skills/schema-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add snowplow/iglu-central --skill schema-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install snowplow/iglu-central schema-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/schema-review .gemini/skills/schema-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .gemini/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install snowplow/iglu-central schema-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add snowplow/iglu-central --skill schema-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/schema-review .github/skills/schema-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .github/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add snowplow/iglu-central --skill schema-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install snowplow/iglu-central schema-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/snowplow/iglu-central.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/schema-review .opencode/skills/schema-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "schema-review" agent skill from https://github.com/snowplow/iglu-central/tree/master/.claude/skills/schema-review into .opencode/skills/schema-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "schema-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
schema-reviewReviews JSON Schema files in iglu-central for common issues found in PR reviews.
Schema Review is an agent skill from snowplow/iglu-central. Reviews JSON Schema files in iglu-central for common issues found in PR reviews. Checks field constraints, type definitions, warehouse compatibility, and consistency patterns. Use when reviewing schema files before PR submission or when validating changes to schemas in the schemas/ directory.
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Pull requests. The repository describes itself as: Contains all JSON Schemas, Avros and Thrifts for Iglu Central. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 8efc158. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Schema Review loads about 3.8k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 1,681 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from snowplow/iglu-central at commit 8efc158, republished under its Apache-2.0 licence (© snowplow). 1,681 words, ~3,807 tokens.
.claude/skills/schema-review/SKILL.md (or your agent's skills folder).Reviews JSON Schema files for issues that commonly appear in PR feedback.
When invoked, reviews schema files for:
Check: All string fields have maxLength
Strings without maxLength accept any length, which can cause problems when users (intentionally or accidentally) send very large strings into the warehouse. This can significantly slow down warehouse modeling queries.
Problematic:
"field_name": {
"type": "string",
"description": "User identifier"
}Fixed:
"field_name": {
"type": "string",
"description": "User identifier",
"maxLength": 128
}Why: Protects warehouse models from unexpectedly large strings. Also acts as a contract with downstream consumers about what to expect from the data.
What to do: Consider whether this field could realistically receive very large values, and whether you want to protect against that. Comment in your PR on your reasoning either way.
Severity: Warning
Check: Consider trade-offs of minLength = maxLength
When minLength equals maxLength, Snowplow's Redshift loader creates CHAR columns as an optimization. CHAR columns cannot be altered later, so this blocks schema evolution if you need to change the length.
Problematic if flexibility needed:
"snowplow_id": {
"type": "string",
"minLength": 26,
"maxLength": 26,
"pattern": "^[0-9a-zA-Z]{26}$"
}Fixed for flexibility:
"snowplow_id": {
"type": "string",
"maxLength": 26,
"pattern": "^[0-9a-zA-Z]{26}$"
}Why: Trade-off between optimization and flexibility. CHAR is more efficient for truly fixed-length fields (like three-character country codes), but prevents future schema evolution.
What to do: If you're certain this field will always be exactly this length, minLength = maxLength is fine. If you might want to increase maxLength in future versions, omit minLength. Comment on your reasoning in the PR.
Severity: Warning
Check: Consider allowing null for optional fields
Snowplow has an established pattern where optional fields (not in the required array) also allow null in their type definition. This isn't required by JSON Schema, but it provides better cross-platform compatibility.
Current:
"properties": {
"optional_field": {
"type": "string",
"description": "Optional identifier"
}
},
"required": ["some_other_field"]With pattern applied:
"properties": {
"optional_field": {
"type": ["string", "null"],
"description": "Optional identifier"
}
},
"required": ["some_other_field"]Why: Cross-platform compatibility. Some languages cannot easily omit map properties and must use null instead. This pattern makes Iglu more permissive about accepting either missing fields or explicit null values, preventing validation errors when payloads contain "optional_field": null. Doesn't break anything if omitted, but following this pattern improves developer experience across different SDK implementations.
Severity: Suggestion
Check: Integers should have maximum constraint
Integers without maximum default to 64-bit (BIGINT) in warehouses. Setting maximum to 2147483647 (max 32-bit value) creates smaller INT32 columns instead, which is a nice storage optimization for many use cases.
Problematic if optimization wanted:
"count": {
"type": "integer",
"description": "Number of items"
}Fixed for 32-bit storage:
"count": {
"type": "integer",
"description": "Number of items",
"maximum": 2147483647
}Why: Storage optimization. But note you cannot easily increase to 64-bit range in future schema versions if you set maximum to 32-bit range now.
What to do: Consider whether this value could ever exceed 32-bit range. If you're confident it won't, the optimization is worthwhile. Be aware of the evolution trade-off.
Severity: Suggestion
Check: Use integer not number for whole numbers
Number type creates double/float columns in warehouses. Use integer for counts, IDs, and other whole numbers.
Problematic:
"autonomous_system_number": {
"type": "number",
"description": "ASN number"
}Fixed:
"autonomous_system_number": {
"type": "integer",
"minimum": 0,
"maximum": 4294967295,
"description": "ASN number"
}Why: Number type creates double columns. Integer type creates int columns, which is more appropriate for whole number data.
What to do: Use number if your data includes decimal values. Use integer if values are always whole numbers. You know your data best - just be aware of the warehouse column type impact.
Severity: Warning
Check: Money fields need multipleOf: 0.01
Number type for monetary values creates double columns, which lose precision for financial calculations.
Problematic:
"price": {
"type": "number",
"description": "Item price"
}Fixed:
"price": {
"type": "number",
"multipleOf": 0.01,
"description": "Item price"
}Why: Creates DECIMAL columns instead of DOUBLE in warehouses. Preserves precision for monetary calculations.
Severity: Critical (for monetary fields)
Check: Field becoming nullable in a non-first schema version
When a schema shares a MODEL number with a previous version (e.g. 1-0-2 when 1-0-1 exists, or 1-1-0 when 1-0-0 exists), compare each field's effective nullability against the previous version. A field is nullable if either of these is true:
required arraytype allows null (e.g. ["string", "null"])Any field that was non-nullable in the previous version and is nullable in the new version is a breaking change for Snowplow's Redshift integration. This covers two distinct cases:
Case 1 — removed from required:
// 1-0-1
"required": ["email", "eventName", "dataFields"]
// 1-0-2 — removes email from required (BREAKING)
"required": ["eventName", "dataFields"]Case 2 — type changed to allow null:
// 1-0-1
"email": { "type": "string", "maxLength": 254 }
// 1-0-2 — type now allows null (BREAKING)
"email": { "type": ["string", "null"], "maxLength": 254 }Both cases mean that a NOT NULL column in Redshift would need to become nullable — a migration that Snowplow's RDB Loader does not support.
Why: Snowplow's RDB Loader treats this as a breaking schema evolution. Rather than attempting the unsupported DDL migration, the loader routes events validated against the new version into a recovery table (named <base_table>_<revision>_<addition>_recovered_<hash>) instead of the main table. This is not immediately visible — events pass validation and appear to load successfully, but land in the wrong table where consumers won't find them.
What to do: Any change that makes a previously non-nullable field nullable requires a new major version (e.g. 2-0-0). Options if a major bump is undesirable:
Severity: Critical
Check: Required fields that accept null
Fields in the required array that also accept null is unusual - it means the property must exist but can be null.
Verify intentionality:
"properties": {
"status": {
"type": ["string", "null"]
}
},
"required": ["status"]Why: This pattern is unusual but not strictly wrong. Verify this is what you intend rather than the field being truly required with a value, or optional without being in the required array.
Severity: Warning (verify intent)
Check: Descriptions should match schema validation
If a description makes any claim about the rules of the schema, that claim should be consistent with what the JSON Schema actually validates.
Problematic:
"properties": {
"item_type": {
"type": "string",
"description": "Item type (required)"
}
},
"required": ["item_id"]Fixed:
"properties": {
"item_type": {
"type": "string",
"description": "Item type"
}
},
"required": ["item_id", "item_type"]Why: Documentation should accurately reflect what the schema enforces. If the description claims something is required, the schema should require it.
Severity: Warning
Check: Properties should have descriptions
Missing descriptions reduce clarity in Console and code generation.
Problematic:
"item_id": {
"type": "string",
"maxLength": 128
}Fixed:
"item_id": {
"type": "string",
"maxLength": 128,
"description": "Unique identifier for the item"
}Severity: Suggestion
Check: Description grammar and clarity
Check for typos, grammar issues, unclear wording.
Common issues:
Severity: Suggestion
Check: Avoid $supersedes and $supersededBy
These fields exist in the Iglu spec but are not used in Iglu Central.
"$supersedes": ["1-0-2"]Why: There is no precedent for using these fields in Iglu Central. This was previously discussed and decided against.
What to do: If you believe you have a special case that requires these fields, flag for discussion with a maintainer before proceeding.
Severity: Warning (flag for review if present)
Check: Field definitions across related schemas
Field names used in multiple related schemas sometimes have different types and constraints.
Example variance:
"location": {"type": "string", "maxLength": 128}"location": {"type": "string", "maxLength": 256}"location": {"type": ["string", "null"], "maxLength": 128}Why: Schemas in Iglu Central come from many different sources, so consistency across vendors isn't always expected. However, it's useful to be aware of how similar fields are defined elsewhere.
What to do: Consider whether consistency is appropriate for your use case. Differences may be intentional and justified.
Severity: Suggestion
Check: Enum usage across related schemas
If a field uses enum in one schema, consider whether related schemas would benefit from similar constraints.
Why: Awareness of patterns in related schemas can inform your design decisions.
What to do: Consider whether enum usage would be appropriate for your field based on how it's used in similar contexts.
Severity: Suggestion
When this skill is invoked:
Identify files to review
schemas/**/*.jsonschema/*Parse each schema file
*-0-0), also read the immediately preceding version to enable evolution checks. This applies to both revision bumps (e.g. 1-0-0 → 1-1-0) and addition bumps (e.g. 1-0-1 → 1-0-2)Apply validation checklist
Check related schemas for awareness
Categorize findings
Provide structured results:
For each issue:
File: [path] Property: [property_name] Issue: [brief description]
// Current
[problematic code]// Suggested fix
[fixed code]Why: [explanation of impact]
For each warning:
File: [path] Property: [property_name] Issue: [brief description]
// Current
[current code]// Consider
[suggested alternative]Why: [explanation of trade-offs] What to do: [guidance for submitter]
[Same format as warnings]
Critical - Causes data precision loss or silently misroutes events:
required or by adding null to the type (Snowplow's RDB Loader silently routes events to a recovery table rather than the main table)Warning - Requires submitter consideration and explanation:
Suggestion - Documentation, patterns, and awareness:
This is iglu-central, a JSON Schema registry for Snowplow. Schemas define:
Schemas must be warehouse-compatible as they generate DDL for:
Schema evolution is append-only. Breaking changes require new major versions.
© snowplow, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/schema-review of snowplow/iglu-central.
Open the folder on GitHubat commit 8efc158
Schema Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Schema Review this skillsnowplow/iglu-central | 123 | — | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Check PRonyx-dot-app/onyx | 32k | 2 repos | ~2.3k | Automated safety check: Pass | MIT | |
| PR Design DocOpenHands/OpenHands | 90k | — | ~2.4k | Automated safety check: Pass | MIT | |
| WooCommerce Code Reviewwoocommerce/woocommerce | 11k | 3 repos | ~1.1k | Automated safety check: Pass | Custom licence |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
onyx-dot-app/onyx
Checks a GitHub, GitLab, or Perforce (p4) pull request (or merge request, or shelved changelist) for unresolved review comments, failing status checks, and incomplete PR descriptions.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
payloadcms/payload
A skill your agent uses when a Payload pull request needs a concise visual walkthrough for reviewers.
Categories
Reviews JSON Schema files in iglu-central for common issues found in PR reviews. Schema Review is an agent skill from snowplow/iglu-central. Reviews JSON Schema files in iglu-central for common issues found in PR reviews.
Schema Review fits situations like: reviewing schema files before PR submission; validating changes to schemas in the schemas/ directory.
Run `npx skills add snowplow/iglu-central --skill schema-review -a claude-code`. Or copy the skill folder (.claude/skills/schema-review in snowplow/iglu-central) into .claude/skills/schema-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add snowplow/iglu-central --skill schema-review -a codex`. Or copy the skill folder (.claude/skills/schema-review in snowplow/iglu-central) into .agents/skills/schema-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add snowplow/iglu-central --skill schema-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/schema-review, .gemini/skills/schema-review, .github/skills/schema-review and .opencode/skills/schema-review in your project.
SKILL.md names no scripts, command-line tools or credentials: Schema Review is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Schema Review is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Schema Review: Finishing a Development Branch (obra/superpowers, 297k stars), PR Babysitter (openinterpreter/openinterpreter, 69k stars), Check PR (onyx-dot-app/onyx, 32k stars) and PR Design Doc (OpenHands/OpenHands, 90k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
snowplow (a GitHub organization) maintains it in snowplow/iglu-central, which has 123 GitHub stars. The repository was last updated on October 1, 2026.
Source: snowplow/iglu-central on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.