Agent skill

Fable Review

by ZoneMinder in ZoneMinder/zmNinjaNg

A skill your agent uses when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will…

Apache-2.0Auto-check passedMobile

Install Fable Review

skills CLI
$ npx skills add ZoneMinder/zmNinjaNg --skill fable-review -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ZoneMinder/zmNinjaNg fable-review --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ZoneMinder/zmNinjaNg.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/fable-review .claude/skills/fable-review && rm -rf skills-src

Use ~/.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/

Facts

Skill name
fable-review
GitHub stars
110
Token cost
~4.2k tokens
SKILL.md length
2,412 words
Files
2
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will…

  • Works in 3 steps: Your own system prompt names the model… → If that name is not Fable (model id… → Say exactly this and end the turn
  • Asked for a full codebase review
  • SKILL.md covers Overview, Preconditions (check both…, Procedure and Scoring rubric, plus 6 more sections
  • Calls git, gh and claude

What it does

Fable Review is an agent skill from ZoneMinder/zmNinjaNg. Use when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will execute. Runs only on Fable. Triggers on "fable review", "review the codebase", "score the repo", "audit code health".

Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `brief-template.md`).

It sits in Mobile, covering Code quality. It works with React. The repository describes itself as: ZoneMinder client for iOS, Android, Windows, macOS, Linux and web. Live camera view, event review, montage, timeline, push notifications. Rewrite of zmNinja. The licence is Apache-2.0.

When your agent uses it

  • Asked for a full codebase review
  • Scorecard of this repo
  • For a fable review / multi-pillar review whose output another agent will execute
  • Review the codebase

Example prompts

  • “fable review”
  • “review the codebase”
  • “score the repo”
  • “/fable-review”

Requirements

  • Node.js

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Your own system prompt names the model you are running as.
  2. If that name is not Fable (model id claude-fable-5), **stop
  3. Say exactly this and end the turn

What it can do on your machine

Read from SKILL.md and the folder at commit 3f90042. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh
    • claude
    • npm
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, gh, npm and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Fable Review loads about 4.2k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 2,412 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~4.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from ZoneMinder/zmNinjaNg at commit 3f90042, republished under its Apache-2.0 licence (© ZoneMinder). 2,412 words, ~4,207 tokens.

Download SKILL.mdSave it as .claude/skills/fable-review/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
fable-review
description
Use when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will execute. Runs only on Fable. Triggers on "fable review", "review the codebase", "score the repo", "audit code health".

Fable Codebase Review

Overview

A scored, multi-pillar codebase review whose output is a report another agent (Opus) executes without re-deriving anything. The pillars and the report shape come from the first run of this review (issue #217, PR #218, overall 7.5 to 8.1); the rules below are what that run and its two follow-up reviews proved necessary.

Core principle: every finding was confirmed by reading the file it cites. A grep hit is a lead, not a finding, and a pillar score with no evidence under it is an opinion that does not get a number.

Second principle: the report is executed by an agent that cannot see this session. Anything a finding leaves implicit - the fix, the verification, the risk, the reason a nearby thing must not change - is work the executor will get wrong.

Preconditions (check both before anything else)

Clean context

The review must start from a clean context. A session that has already done implementation work carries the assumptions it made while working, and it will grade its own output: gates it stopped checking read as green, code it wrote reads as idiomatic, and drift it introduced becomes invisible. Re-running these checks from a fresh context is the point of the review.

If this session already holds prior work - edits, debugging, a long conversation, or anything beyond the invocation itself - stop and say:

This review needs a clean context. Start a fresh session (/clear, or claude -p "/fable-review" from a new shell) on Fable, then run /fable-review there.

Pillar agents inherit this: each gets a fresh context and a written brief. Never paste session history into a dispatch.

Model

This review runs on Fable only. Fable's judgment across a whole repository is the deliverable; the orchestrator's model bounds everything under it (see Orchestration in agents/generic/claude-workflows.md).

  1. Your own system prompt names the model you are running as.

  2. If that name is not Fable (model id claude-fable-5), stop immediately. Read nothing, dispatch nothing, write nothing.

  3. Say exactly this and end the turn:

    This review runs on Fable. You are on <model name>. Switch with /model (pick Fable 5), then run /fable-review again.

Do not work around the gate: not by dispatching Fable subagents under a different orchestrator, not by "starting the easy parts" first, not by offering a lighter review instead. .claude/settings.json pins this repo to Opus by default, so hitting this gate is the normal case, and switching is the user's call.

Procedure

  1. Read the instruction system first. AGENTS.md, AGENTS.project.md, every file in agents/project/ and agents/generic/. Pillar 3 scores adherence to those contracts, and the domain playbook lists approaches that already failed here - a review that recommends one of them is worse than no review.
  2. Record scale and state. File and LOC counts for app/src/ (prod vs test split), native shells, docs/, workflows. Name what you excluded. Record git status and git branch --show-current; a dirty working tree changes what the executor may commit.
  3. Run the gates bare. npm run gates from app/, plus npx madge --circular style structural probes as needed. Never pipe a gate into a filter (the pipeline reports the filter's exit status; that shipped a red commit here once). Record raw counts and quote failures verbatim.
  4. Dispatch one read-only agent per pillar, all in one message, each on Fable (model: "fable"). Fill brief-template.md (next to this file) once per pillar; the filled template is the whole prompt. Agents read and probe only - no edits, no commits. Stop each agent as soon as its report is verified.
  5. Verify before publishing. Re-read the cited source for every damning or load-bearing claim yourself. Duplication and dead-code claims are wrong often enough that an unverified one belongs nowhere near a score. A claim you cannot confirm is dropped, not softened.
  6. Score, rank, write. One decimal per pillar from the rubric below, an overall, then the phased execution plan. Rank by risk reduced per unit of effort, not by pillar order. Before scoring, read the scorecard of the newest docs/superpowers/analysis/*-fable-review.md; any pillar moving more than 1.0 from it gets one sentence naming the findings (or fixes) that moved it.

Scoring rubric

Scores come from confirmed findings, not impression. Start at 10 and apply the cap or deduction each row names; the lowest cap wins, then deductions apply below it.

ConditionEffect
Any confirmed HIGH findingCap 7.0
Three or more confirmed HIGHCap 5.0
A gate the pillar relies on is red or advisory-onlyCap 6.0
Each confirmed MED-0.5
Each confirmed LOW-0.2
Pillar skipped by instruction, or evidence could not be gatheredNo number; write "not assessed"

Floor is 1.0. Overall is the mean of scored pillars only.

The pillars

#PillarScores whatLook at
1Code clarityIdiom consistency, unnamed state machines, dead ternaries, IIFE-in-JSX, comments that explain whyLargest components, hooks with paired raw/wrapped setters
2DRY and reuseReal cross-file duplication (verified by hand), under-adopted shared componentsPage scaffolding, error banners, empty states, control wiring
3Contract and rule adherenceEvery contract in AGENTS.project.md (Owns/Path/Never/Gate) plus the AGENTS.md tiers, measured by counts not vibesapp/src/tests/agents-contracts.test.ts and the paths each contract names
4Architecture and modularityDependency direction, cycles, query-key discipline, persistence durability, folder shapeapp/src/tests/no-circular-deps.test.ts, lib/query/, stores vs services
5Test quality and automation trustWhat the suite would catch: assertion-free tests, conditional-pass e2e steps, fixed sleeps, presence-only assertions, untested risky modulesapp/tests/**/*.steps.ts, coverage of services/, lib/security/
6Runtime performanceHot paths, whole-store subscriptions, per-render allocation, canvas reallocation, stream teardownMontage, timeline canvas, event list, zustand selectors
7Native platform integrationSession/delegate lifetimes, iOS/Android parity, main-thread discipline, permission surface, SDK currencyapp/ios/, app/android/, app/electron/
8Accessibility and UX robustnessOffline behavior, reduced motion, contrast, touch targets, accessible names, keyboard and TV reachabilitylint:a11y output, index.css tokens, icon-only buttons
9Build, CI, dependency healthWhich gates are hard vs advisory, hooks, PR gating, dead scripts, gitignore claims that do not match reality.github/workflows/, root and app/ package.json, husky
10Documentation and handoverAccuracy over volume: spot-verify code-citing claims against sourcedocs/developer-guide/call-flows.rst, user guide gaps
11Error handling and trust boundariesI1/I2: validation of server responses, user input and IPC; recovery paths on destructive operations; swallowed errors; error-class misdetection (DOMException is not an Error)Validators, delete/download paths, catch bodies
12SecuritySecrets handling, token storage and logging, injection sinks, TLS trust decisionsAsk the maintainer first; the first run skipped this by instruction. If skipped, say so in the report and score it as not assessed, never 0
13Instruction system overheadWhether the contracts, gates, and playbooks cost more than they catch: contracts whose Never list a gate never checks or that duplicate a lint or type error, gates that overlap (two tests asserting the same invariant, a ratchet and a lint on the same count), rules with no gate (M1), playbook facts repeated across files or restating code, instruction length that slows every session without preventing a recorded breakage. Score by work removed per breakage still prevented; a rule whose history (git log, agents/project/domain-context.md) shows no incident it stopped is a candidate for deletion, not hardeningAGENTS.md, AGENTS.project.md, agents/**, app/src/tests/agents-contracts.test.ts, app/src/tests/no-circular-deps.test.ts, scripts/*.mjs, .github/workflows/, husky hooks; findings route through the self-improvement protocol (M3) and name the consolidated gate that survives

If git ls-files | cut -d/ -f1-2 | sort -u lists a directory that no pillar's Look-at column names and that holds shipped code, add a pillar for it and say so in the header. If a pillar's Look-at paths do not exist in the tree, drop it and say so; a dropped pillar is not a zero.

Evidence rules

  • Cite file.ts:123 for anything the reader would open, and name the symbol next to it. Line numbers rot within hours on an active branch; the symbol is what survives.
  • Quote the shortest decisive line of any output. Never paste a log.
  • Distinguish confirmed from theoretical. "WKWebView may evict localStorage" with no observed incident is labeled as such, and it ranks below anything a user has actually hit.
  • Deliberate simplifications documented in the domain playbook or a ponytail: comment are not findings. Contract text beats rediscovering an invariant from code; a code/contract mismatch is itself a finding, routed to the self-improvement protocol.
  • Verify effort estimates against the real site count. "Kill the conditional-pass e2e steps" reads as small and is not: it turns green scenarios red, because they were hiding gaps.
Show full SKILL.md (1,019 more words)Show less

Finding fields

Every finding in the report carries all of these, rendered as a bullet list with one **Field:** per bullet. Single newlines merge into one paragraph on GitHub, so field-per-line prose becomes unreadable there. The executing agent has no session context; a missing field becomes a guess.

FieldContent
IDP<pillar>-<n>, stable, referenced by the phase plan
SeverityHIGH / MED / LOW by user-visible impact, not by how odd the code looks
Sitefile:line plus symbol name, one line per site if several
What is wrongThe defect, stated plainly
Why it mattersThe failure a user or contributor would see
FixConcrete enough to start: the pattern to follow and the existing example of it in this repo
VerificationWhich gate, test, or device pass proves the fix. New behavior needs a test proven red against the pre-fix code (P2)
EffortS / M / L, justified by site count
RiskWhat the fix could break, and whether it is verifiable in CI or device-only
ContractsRule and contract IDs implicated, never copied text

Report

Write to docs/superpowers/analysis/YYYY-MM-DD-fable-review.md. It is documentation: agents/project/documentation.md applies in full - plain headings, no superlatives, no invented shorthand, depth over compression.

Sections, in order:

  1. Header - date, reviewer model, scope, what was excluded, what was skipped by instruction.
  2. Scorecard - one row per pillar: score, one-line verdict, then the overall.
  3. Gates - command, result, raw counts, failures verbatim.
  4. Cross-cutting themes - two to four themes that explain most of the lost points. This is what the maintainer reads first.
  5. One section per pillar - Pillar N: name (X/10), then strengths verified (not assumed), then numbered findings with the fields above, then Path to 10/10 split into worth it and not worth it. The not worth it half is load-bearing: without it the executor churns through mechanical work that buys nothing.
  6. Non-findings - things that look wrong and must stay. Every do-not-retry from the domain playbook that touches reviewed code goes here explicitly.
  7. Phased execution plan - ordered by risk reduced per effort, each item naming its finding IDs. Enforcement and cheap confirmed bugs first; large refactors of fragile working code last or deferred. Sequencing warnings belong on the item ("gate CI against the tests as they are, then harden them behind it"). Batch device-only items into one session.
  8. Notes for the executing agent - per-commit gates to run, issue and commit rules (P1, P2, P5), native build-number handling, and anything that must not be merged, deleted, or re-attempted.

After the report

  1. Post the report path and the scorecard table in the session.
  2. Offer to log a tracking issue carrying the review. Ask three things in the same message: why this review was run (scheduled sweep, before a handover, after a heavy fix period, a specific worry), whether there is any other context to include, and whether to fix the findings now. Wait for the answer; the reason belongs to the maintainer, not to your guess.
  3. Only if they say yes to the issue, create it:
    • Title names the review and its date.
    • Body, in order: a short Why this review ran section from their answer; the Scorecard table (pillar, score, verdict, overall) under a ## Score (before) heading; then the report from the cross-cutting themes onward (gh issue create --body-file on a file assembled from those parts, so the issue and the report do not drift). Never paste the report's own header twice.
    • Labels core and refactor together: a review spans both behavior-changing findings and behavior-preserving cleanups, so neither label alone describes the work it will spawn. Confirm both labels exist first (gh label list).
    • Close with the identification line the project rules require: Posted by Claude (Fable 5), assisting @<login>. - resolve <login> with gh api user --jq .login; never hardcode a username.
    • Report the issue URL back.
  4. If they decline the issue, say the report stands on its own and stop. Never open an issue, push a branch, or start executing findings unasked - the phase plan is the maintainer's to schedule (P1).
  5. If they said fix now: branch off the default branch, turn the phased execution plan into a plan file, and execute it with superpowers:subagent-driven-development (commits Refs #<issue>). When the branch's final review is clean, re-dispatch the pillar agents for every pillar the branch touched (same briefs, fresh context), re-score them with the rubric, and post one comment on the issue: a table with pillar, score before, score after, one-line verdict; overall before and after; then the findings that remain, each with its ID and why it was left. Close with the identification line. The PR body quotes the issue's acceptance lines (P1); closing keywords only after the maintainer confirms.

Common mistakes

MistakeFix
Proceeding on a non-Fable modelStop at the gate. It is the first instruction for a reason
Reporting grep counts as findingsOpen the file. The first run's credibility came from spot-verified claims
Recommending an approach the domain playbook records as failedRead agents/project/domain-context.md before writing any Path to 10/10
Proposing deletion of an empty hook pointAn unimplemented feature is a missing feature: file it, do not silently remove the branch
Bundling enforcement with the work it would newly failGate first against current behavior, harden after
Sizing a multi-site cleanup as SCount the sites, then estimate
Scoring test quality by test countScore by what the suite would catch; name one plausible bug it would miss
Ranking theoretical risks alongside observed onesLabel the evidence, rank by it
Omitting the non-findings sectionThe executor will "fix" a deliberate design and ship a regression
Leaving native items unmarkedSay device-pass-required on every one; CI cannot verify them
Grading the instruction system only for gapsPillar 13 exists to find what to remove. A redundant gate or an ungated rule that has never fired is friction, and adding more rules to a system that already slows work is itself a finding
Filing the issue with your own guess at why the review ranAsk, then quote the answer. The trigger is the maintainer's context, and it is what makes the issue readable a month later

© ZoneMinder, 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

Files

SKILL.md and 1 other file in .claude/skills/fable-review of ZoneMinder/zmNinjaNg.

  • SKILL.md
  • brief-template.md

Open the folder on GitHubat commit 3f90042

Compare with similar skills

Fable 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.

Fable Review compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Fable Review this skillZoneMinder/zmNinjaNg110—~4.2kAutomated safety check: PassApache-2.0
Coding Standardskurealnum/dotfiles29017 repos~2.9kAutomated safety check: PassNone
Code Review SkillRain-kl/OpenFlare288—~2.3kAutomated safety check: NotesMIT
Qovery Console StandardsQovery/console227—~924Automated safety check: PassMIT
Clean Code Refactorerfike/fastapi-blog101—~402Automated safety check: PassMIT
Code Review Excellenceandrew-yangy/gru-ai155—~1.7kAutomated safety check: NotesMIT

Similar skills

  • Coding Standards

    kurealnum/dotfiles

    Universal coding standards, best practices, and patterns for TypeScript, JavaScript, React, and Node.js development.

    290 GitHub starsUsed in 17 repos~2.9k tokens
    DevelopmentAuto-check passed
  • Code Review Skill

    Rain-kl/OpenFlare

    Provides comprehensive code review guidance for React 19, Vue 3, Angular 17+, Svelte 5, Rust, TypeScript, Java, PHP, Python, Django, Go, C/.NET, Kotlin, Swift, NestJS, C/C++, and more.

    288 GitHub stars~2.3k tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • Qovery Console coding standards, architecture guidelines, naming conventions, testing practices, and development workflows.

    227 GitHub stars~924 tokensUpdated today
    DevelopmentAuto-check passed
  • Clean Code Refactorer

    fike/fastapi-blog

    Skill for identifying code smells and refactoring code using Clean Code, SOLID, and DRY principles.

    101 GitHub stars~402 tokensUpdated today
    DevelopmentAuto-check passed
  • Code Review Excellence

    andrew-yangy/gru-ai

    Provides comprehensive code review guidance for React 19, Vue 3, Rust, TypeScript, Java, Python, and C/C++.

    155 GitHub stars~1.7k tokensUpdated 7 mo ago
    DevelopmentAuto-check: notes
  • Senior Fullstack

    davila7/claude-code-templates

    Comprehensive fullstack development skill for building complete web applications with React, Next.js, Node.js, GraphQL, and PostgreSQL.

    32k GitHub starsUsed in 7 repos~1.1k tokens
    DevelopmentAuto-check: notes

More from ZoneMinder/zmNinjaNg

  • Add Language

    ZoneMinder/zmNinjaNg

    A skill your agent uses when adding a new interface language (locale) to the app, or when asked to translate the UI into another language.

    110 GitHub stars~1.1k tokensUpdated 3 days ago
    Auto-check passed
  • Mine History

    ZoneMinder/zmNinjaNg

    A skill your agent uses when asked to mine the commit history for lessons the agent instruction files have not captured, to audit whether domain-context and contracts reflect what actually broke, or…

    110 GitHub stars~1k tokensUpdated 3 days ago
    Auto-check passed

Works with

Questions about Fable Review

What does Fable Review do?

A skill your agent uses when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will…. Fable Review is an agent skill from ZoneMinder/zmNinjaNg. Use when asked for a full codebase review, health check, quality audit, or scorecard of this repo, or for a "fable review" / multi-pillar review whose output another agent will execute.

When should I use Fable Review?

Fable Review fits situations like: asked for a full codebase review; scorecard of this repo; for a fable review / multi-pillar review whose output another agent will execute; review the codebase.

How do I install Fable Review in Claude Code?

Run `npx skills add ZoneMinder/zmNinjaNg --skill fable-review -a claude-code`. Or copy the skill folder (.claude/skills/fable-review in ZoneMinder/zmNinjaNg) into .claude/skills/fable-review in your project. Claude Code loads it when a task matches its description.

How do I install Fable Review in Codex?

Run `npx skills add ZoneMinder/zmNinjaNg --skill fable-review -a codex`. Or copy the skill folder (.claude/skills/fable-review in ZoneMinder/zmNinjaNg) into .agents/skills/fable-review in your project. Codex loads it when a task matches its description.

Can I use Fable Review in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ZoneMinder/zmNinjaNg --skill fable-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/fable-review, .gemini/skills/fable-review, .github/skills/fable-review and .opencode/skills/fable-review in your project.

What does Fable Review need to run?

Going by SKILL.md and its folder, Fable Review needs the command-line tools its instructions call (git, gh, claude, npm and npx). Our summary lists: Node.js.

Does Fable Review access the network?

SKILL.md contains no URLs. Its commands use git, gh, npm and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Fable Review safe to install?

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.

What licence does Fable Review use?

Fable 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.

How many tokens does Fable Review use?

About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Fable Review?

Skills that share tags, products or a category with Fable Review: Coding Standards (kurealnum/dotfiles, 290 stars), Code Review Skill (Rain-kl/OpenFlare, 288 stars), Qovery Console Standards (Qovery/console, 227 stars) and Clean Code Refactorer (fike/fastapi-blog, 101 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Fable Review?

ZoneMinder (a GitHub organization) maintains it in ZoneMinder/zmNinjaNg, which has 110 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 6, 2026.

Source: ZoneMinder/zmNinjaNg on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.