AIPe is a framework that turns an agent harness into a general engineering
coordinator and the user into a Product Engineer (PE). It runs on Claude
Code, Gemini CLI, Codex CLI, GitHub Copilot CLI, or any AGENTS.md-shaped
harness — see docs/harnesses.md.
The PE brings demands (bugs, features, tasks spanning different repos); the coordinator decomposes them, distributes them to specialists who work in parallel, and returns deliverables (PRs) — always respecting the relationships between the repos.
The central analogy is a company:
| Role | Who it is | Real mechanics |
|---|---|---|
| PE | The user. CEO/Product: sets the mission, priority, approves budget, decides cross-repo matters. | User in command, approving between phases. |
| Coordinator | The main Claude, with a name set by the PE. | Reads the state, decomposes demands, dispatches, reviews, escalates. |
| Specialists (contractors) | Devs hired per repo (1 dev-fullstack + 1 QA). | Subagents dispatched by the coordinator, materialized as persona skills installed inside each repo. |
Full design rationale: docs/superpowers/specs/2026-07-01-aipe-context-brain-design.md.
AIPe has two phases, both complete:
- (A) Onboarding — map a context (a team's group of repos): declare them, clone them, discover their cross-repo relations, and hire each repo's specialists.
- (B) Operation — the coordinator receives a demand, decomposes it,
dispatches the per-repo specialists in isolated git worktrees under the
parallel-dispatch law, each delivers a PR, and cross-repo matters escalate to
the PE. Workspaces are publishable/portable, can be equipped with extra
skill-packages + MCPs (the "toolbox"), grow one repo at a time
(
/aipe-add-repo), and can be watched live (aipe dashboard).
The guiding invariant throughout: everything past raw agent output on disk is
a deterministic, tested aipe CLI; the coordinator's judgement lives in
SKILL.md prose.
A context is set up in four ordered steps, each a skill in this plugin:
1. /context-brain → declare repos (URLs, paths) → .aipe/brain.yaml
2. /make-workspace → clone the repos on disk (+ rehydrate personas/toolbox)
3. /relationship → discover cross-repo relations + backfill stack → .aipe/relations/
4. /hire-specialists → hire persona skills (1 dev-fullstack + 1 QA per repo) → .aipe/personas.yaml
Each step's precondition is the previous step's state.yaml phase being
done; running any step re-reads what's already there and only fills in
what's missing. The SessionStart hook injects the coordinator's "awareness"
and drives each step conversationally — just open the workspace and say hi.
Once onboarding is done, a demand from the PE runs through the /operate
skill:
- Open a journey (
aipe journey start) — one demand = one journey. - Decompose the demand into per-repo tasks and sequence them into
waves using
.aipe/relations/graph.yaml(a dependency-first order). - For each wave: validate the dispatch law (
aipe dispatch validate), provision a worktree per specialist (aipe worktree create), and dispatch each specialist as a subagent wearing its persona, confined to its worktree, with an ephemeral hiring brief. - Collect results:
delivered(a PR) orescalate(a cross-repo need). - Escalate cross-repo matters to the PE — cross-repo scope is the PE's call. On approval, the next wave targets the other repo, dependency-first.
- On merge, tear worktrees down (
aipe worktree remove/prune).
aipe dashboard shows all of this live in the terminal (workers by status,
the pipeline, worktrees). The responsive web console (aipe serve) is the
same view in the browser — see Web console below.
Status on demand — aipe status. When the PE asks what is running ("status",
"quero o status atual das tarefas"), the coordinator runs aipe status and
renders it rather than assembling a table by hand — the four columns the PE asked
for (who · what · repo · status), the branch/PR/journey, live-session liveness
(honest: alive/silent/unknown — never an idle inferred from agentop's
unreliable activity field, never guessed), and what is waiting on the
PE (gated, escalated, redirected, no-evidence). Default output is short enough to
paste into a chat (open work + recently closed, with an explicit elision count);
--journey <id> scopes to one demand, --all is the full history, --json is the
same data structured, and --compact/--detailed pick the density. The PE can opt
into an automatic status table after each dispatch and status change — chosen
once at onboarding ("Deseja que a cada progresso de algum agente eu dispare uma
tabela de status…") and changeable any time with aipe status config --auto <true|false> --format <detailed|compact>; with it off, the on-demand pull still
works. The same report is injected at SessionStart, so a fresh coordinator session
knows where the work stands, not only how to work.
A workspace is a publishable git repo: aipe start writes an allowlist
.gitignore so only the AIPe "brain" (.aipe/ + .claude/) is published —
never the cloned repos, their worktrees, or secrets. Personas are stored in
.aipe/personas/ (committed) and rehydrated into re-cloned repos by
aipe rehydrate (also run automatically by /make-workspace), so the PE can
continue on another machine without redoing onboarding.
/toolbox equips the context with frameworks (e.g. an SDD kit) and MCP servers,
catalogued in .aipe/toolbox.yaml (published). Skills install per repo; MCPs at
workspace scope (shared by all specialist subagents) or per repo. A structured
routing hint + aipe skill match let the coordinator pick the right tool
mechanically (so it doesn't spawn a heavy framework for a trivial edit). The full
lifecycle is add · list · match · remove (aipe skill|mcp remove <name>
uninstalls the catalog entry and every installed copy, keeping other tools
intact).
Add one repo to an already-onboarded context without redoing onboarding:
aipe add-repo appends it, /make-workspace clones just it, aipe relationship --merge folds its relations into the existing graph, and aipe hire-specialists --merge hires its personas — preserving every existing persona and its name.
aipe serve starts a zero-dependency Bun HTTP server (default
127.0.0.1:4317) rendering the whole company as a responsive web app — two
purpose-built experiences, not one reflowed layout:
- Desktop cockpit: the org chart as an interactive SVG graph (coordinator hub → repo clusters → specialist nodes colored by state, over the relation edges), a pipeline board (columns = stages, cards = dispatches with PRs), and a detail panel for the selected worker/repo/dispatch.
- Mobile flow: a tab bar over workers-by-repo, a collapsible org tree, and a per-journey pipeline timeline.
It reads the same extended buildSnapshot the TUI dashboard uses, updates
live over SSE (fs.watch on .aipe/ + a reconcile safety net — realtime, no
lost update), and is theme-aware (light/dark). The SPA is self-contained
(HTML/CSS/JS inlined, embedded in the binary via a text import, no external CDN),
so --compile keeps working. Everything stays local; nothing leaves the machine.
It binds localhost by default.
aipe serve # http://127.0.0.1:4317
aipe serve --port 8080 --workspace ../aipe-opvibes
aipe serve --host 0.0.0.0 # reachable from the LAN → token requiredBinding off loopback requires a token. The console serves the whole
workspace (/api/snapshot) and streams the code your specialists are writing,
file contents included (/api/monitor) — so any host other than
127.0.0.1/::1/localhost makes every request carry a token. It is printed
once in the URL and promoted to an HttpOnly cookie, so the SPA's own fetches
and SSE streams keep working:
aipe serve — web console at http://localhost:4317/?token=b0jU-xdf…
aipe serve — bound to 0.0.0.0 (reachable from the network), so a token is required.
Set AIPE_SERVE_TOKEN to pin your own (an upgrade restarts the console with the
same token, so open browsers keep their session). --insecure opts out
deliberately, with a warning. On loopback nothing changes — no token, no cookie.
Every dispatch has four axes: mode (in-process subagent vs. a detached
session), intensity (normal vs. ultracode), harness and tier/model.
Left to guesswork, the cheapest correct choice rarely gets made. aipe start
already probes this machine's harness binaries automatically and writes
.aipe/capabilities.yaml — a claim with a date, not a fact, so it stays
unconfirmed until you run aipe capabilities confirm (the PE's word
overriding it). Even if that record is somehow missing, aipe execution propose --journey <id> self-heals: it probes right there, says so, and
proceeds — it only refuses if that probe finds no usable harness at all.
propose then crosses the record against .aipe/execution-policy.yaml and
prints, per unit, every viable envelope with a cost-index and a GATED
marker where the policy needs the PE's signature — it enumerates and prices,
it never chooses. Once the PE approves and the coordinator records the chosen
envelope per unit, aipe execution plan --journey <id> groups the recorded
choices into waves (session mode binds --model per wave, not per unit) and
reports the wave-level cost and any gate. cost-index is a coarse relative
index, never money — AIPe cannot know your token price, plan, or rate
limits. See dossier 14.
A specialist is normally dispatched as an in-process subagent, sharing
the coordinator's context and lifetime. aipe session dispatch --journey <id>
instead starts it as a real, detached agentop session
with its own full context window (and, opted in, ultracode) — for units
heavy or long enough that a shared context would starve them. It records into
the journey ledger instead of returning; aipe session collect --journey <id>
polls and classifies each unit as landed, running, or dead-silent. A
per-harness containment hook stops a dispatched specialist from opening or
killing further sessions — aipe session grant is the only authorised
escape, and today its quota cannot yet take effect: agentop does not
stamp AGENTOP_SESSION_ID into the specialist's environment, so the
consuming side has nothing to check against (the command says so). Only
claude-code and gemini are containable today; codex and copilot each
require an interactive trust step AIPe's unattended dispatch cannot clear, so
aipe dispatch validate rejects them from session mode outright. aipe session doctor reports whether agentop (>= 1.9.0, from the agentistics
project — not the unrelated npm package of the same name) is installed;
without it, mode: session is simply unavailable and every unit dispatches
as a subagent, unaffected. See dossier 15.
| # | Sub-project | Status | Dossier |
|---|---|---|---|
| 1 | /context-brain — factual map of a context |
Merged | 01 |
| 2 | /make-workspace — clone the repos |
Merged | 02 |
| 3 | SessionStart hook — coordinator context injection |
Merged | 03 |
| 4 | /relationship — cross-repo relationship discovery |
Merged | 04 |
| 5 | /hire-specialists — persona skills |
Merged | 05 |
| — | Unified aipe CLI + zero-dependency distribution |
Merged | 06 |
| 6 | Phase B — Operation (worktree · dispatch · journey · /operate · dashboard) + portability + toolbox + /aipe-add-repo |
Merged | 07 |
| 7 | AIPe Web Console (aipe serve — responsive org chart · pipeline · detail · embedded terminal, live over SSE) |
Built | 08 |
| 8 | Monorepo package granularity (package as the unit of work) + toolbox uninstall |
Built | 09 |
| 9 | Spec-first operation (coordinator Orientation Spec + PE gate + specialist SDD) | Built | 10 |
| 10 | Model policy (aipe model — model selection by tier + authorization/volume gates) |
Built | 12 |
| 11 | Toolbox kits (aipe skill add sdd-lite|spec-kit|pdd + aipe skill preset — vendored Spec Kit, wired PDD plugin) |
Built | — |
| 12 | /handoff (portable CLAUDE.md export for a collaborator who won't install AIPe) |
Built | 13 |
| 13 | Execution-envelope recommendation (aipe capabilities probe|show|confirm, aipe execution propose|plan) |
Built | 14 |
| 14 | Session-mode dispatch (aipe session dispatch|collect|grant|doctor|guard via agentop) |
Built | 15 |
| 15 | Multi-harness (5 adapters behind one seam; per-repo install routed through it) | Built | harnesses |
| 16 | Automatic releases + verified self-upgrade (aipe upgrade → install, rehydrate, restart) |
Built | upgrades |
| Item | Notes |
|---|---|
| Persona load-order validation | Needs a live interactive session (persona identity surviving a third-party skill loaded on top). Can't be done autonomously. |
| Antigravity / Cursor adapters | The other five harnesses ship; these two are listed coming-soon in the picker and need a harness to target + validate against. See docs/harnesses.md. |
| Codex/Copilot session-mode containment | Both CLIs gate on an interactive trust step (Codex: per-hook-hash /hooks trust; Copilot: directory trust) that AIPe's unattended dispatch cannot clear headlessly today, so their adapters return containmentHook(): null and stay ineligible. Needs a documented non-interactive bypass from either CLI. |
aipe session grant redemption |
The quota machinery is implemented and tested, but consuming it requires agentop to stamp AGENTOP_SESSION_ID into the specialist's environment, which it does not do yet. Blocked on that agentop-side change. |
The rules the framework enforces (most as tested CLI, a few as skill prose):
- Parallel-dispatch law (the one law the coordinator can't break): the same
repo serializes (never two dispatches on one repo at once), distinct repos
run in parallel, capped at 16 concurrent. Adjudicated by
aipe dispatch validate, never by hand. - Worktree-per-journey isolation: each dispatch works in
<repo>/.worktrees/<journey>-<slug>/on branchaipe/<journey>/<slug>..worktrees/is excluded via.git/info/exclude(never a tracked.gitignore).remove/prunerefuse to delete uncommitted or unpushed work unless--force. - PR attribution: commits carry the persona as a namespaced git author
name (
aipe/<Persona>, set per-worktree viaextensions.worktreeConfig), withuser.emailinherited so the PE's real account is the true author. Each specialist opens its own PR. - Hiring brief: a canonical shape (task, worktree, branch, relevant relations, delivery contract, escalation trigger) assembled at dispatch and never persisted — the durable record is the journey ledger + the PRs.
- Cross-repo escalation: a specialist never edits another repo; it escalates the need to the coordinator, who takes it to the PE (cross-repo scope is the PE's decision).
- Publish the brain, never the repos or secrets: allowlist
.gitignore; personas stored in.aipe/and rehydrated, not regenerated. - Secrets never enter the published catalog:
aipe mcp addrefuses literal secrets in an MCP config (env references only;--allow-secretsoverrides). - Non-destructive growth:
--mergemodes for relations and personas fold a new repo in without disturbing existing edges/personas. - Session containment: a specialist dispatched via
aipe session dispatchcan never open or kill anagentopsession — every containable harness's adapter writes aPreToolUse-shaped hook into that unit's own worktree (never the PE's own workspace) that denies it.aipe session grantis the only authorised escape, and it is scoped to one(journey, session)pair. - English-only repository: code, specs, plans, skills, docs, and commit messages are English; interaction with the PE may happen in any language.
# 1. Install the aipe binary (no Bun/Node/npm needed)
curl -fsSL https://aipe.openvibes.tech/cli | sh
# 2. Create a workspace. `aipe start` is a plain terminal program (no AI):
# it shows an arrow-key list of harnesses, asks the workspace name,
# creates aipe-<name>/ (a publishable git repo) with the integration inside,
# and probes this machine's harness binaries automatically — no separate
# step needed before the coordinator can propose a priced dispatch envelope.
aipe start
# ? Choose your agent harness: ❯ Claude Code / Gemini CLI / Codex CLI / …
# ? Workspace name: minha-empresa
# aipe: checked which harnesses are available on this machine:
# aipe: - OK claude-code claude 2.1.4
# aipe: - NOTE capabilities: probed, not confirmed — a binary on PATH is
# not an authenticated binary. Run `aipe capabilities confirm`
# once you have checked.
# ✓ Created aipe-minha-empresa/
# 3. Open that folder in your harness and just say hi.
cd aipe-minha-empresa && claude
# The coordinator asks for your repos and drives onboarding; after each step
# it tells you to open a NEW session to continue — no slash commands to memorize.
# Once onboarded, bring a demand and it runs /operate.Releases are cut automatically from main, and every aipe command tells you
when a newer one is out:
aipe upgrade # the whole job, in one command
aipe check-update # silent when current; prints the banner when notaipe upgrade downloads the binary for this platform, verifies it before it
replaces anything (size, executable magic, and the new binary's own
--version), keeps the one it replaces at <binary>.bak and restores it if
anything fails — then applies the new version to the machine: it runs
aipe rehydrate in every workspace it knows about and restarts every running
aipe serve console. It exits non-zero if any of that did not happen, so a
half-applied upgrade never reports success.
It deliberately does not re-run curl … | sh for this: the installer writes
with curl -o ~/.local/bin/aipe, which truncates the executable you are running
(curl: (23) Failure writing output to destination). The upgrade stages the
download beside the target and renames it into place instead.
A release whose notes carry a [critical] line on its own is flagged as
critical. By default that only makes the banner louder; set
AIPE_AUTO_UPGRADE=1 to let such a release install itself in a detached
background process (logged to ~/.aipe/auto-upgrade.log). Set
AIPE_NO_UPDATE_CHECK=1 to silence update checks entirely. Full details —
including the machine state under ~/.aipe/ and how the update cache avoids
ever blocking a prompt — in docs/upgrades.md.
Two surfaces: aipe start (terminal, deterministic) picks the harness and
creates the self-contained, publishable aipe-<name>/ workspace; the
coordinator (the LLM, inside the harness) runs onboarding and then operates.
The install is project-scoped — .claude/settings.json (a SessionStart
hook calling aipe session-context) plus the skills live in the folder, so
nothing is installed globally and no marketplace/plugin step is required. The
same project-scoped integration is installed inside each specialist repo too
(by /hire-specialists, and repaired by aipe rehydrate), so opening a session
directly in a repo gets that repo's persona-scoped context instead of the
coordinator's.
aipe start offers Claude Code, Gemini CLI, OpenAI Codex CLI,
GitHub Copilot CLI and the experimental generic/AGENTS.md adapter;
Antigravity and Cursor are listed but coming-soon (no adapter yet). Each
installs its own native integration — hooks, skill paths, MCP config and model
tiers all differ — and nothing outside src/harness/ hardcodes a harness path.
The full comparison, including which harnesses can be contained, is in
docs/harnesses.md.
Which harness a workspace runs on is a separate question from which harness a
unit can be dispatched to under session mode (below): a claude-code
workspace can still dispatch a QA unit to gemini, since that only needs the
gemini binary present.
One more step becomes relevant once you are operating, and it's optional:
# 4. `aipe start` already probed your capabilities (unconfirmed — a binary on
# PATH is not an authenticated binary). Once you've actually checked what
# it found, put your word on record:
aipe capabilities confirm
# Skipping this is fine too: `aipe execution propose` still runs on an
# unconfirmed record (it just prints a NOTE saying so on every line), and
# if a workspace somehow has no capabilities record at all, `propose`
# probes automatically right there rather than refusing outright.
# `aipe capabilities probe` re-runs the detection by hand — useful right
# after installing a new harness binary — and `aipe capabilities show`
# flags drift (a recorded harness that has since appeared or vanished).
# 5. For session-mode dispatch (a specialist running as its own detached
# agentop session instead of an in-process subagent), install agentop
# (>= 1.9.0, from the agentistics project — NOT the unrelated npm package
# of the same name): either `curl -fsSL https://agentop.openvibes.tech/cli
# | bash` or `npm i -g @agentistics/agentop` (a thin wrapper that fetches
# the same binary — Linux x86_64 only, today). Then check it:
aipe session doctor
# Without agentop, mode: session is simply unavailable; every unit
# dispatches as a subagent, which needs nothing extra and is the default.AIPe is meant to run for anyone, in any agent harness, on any OS. The
portable core is a single CLI (aipe):
-
Onboarding:
start · context-brain · make-workspace · relationship · hire-specialists · read-state · session-context -
Handoff (standalone, no workspace):
handoff— one-shotCLAUDE.mdexport for a collaborator who won't install AIPe. -
Operation & growth:
worktree · dispatch · journey · dashboard · serve · rehydrate · skill · mcp · add-repo · capabilities · execution · session -
End users need no runtime. The CLI compiles to a standalone executable per OS/arch (
bun build --compile), so there's no Bun, Node, or npm requirement on the host. Thebin/aipelauncher (andbin/aipe.cmdon Windows) resolves the right binary:$AIPE_BIN→dist/<host>→ cached download → Bun dev fallback (only when developing in this repo) → best-effort download from the GitHub release. -
Any harness. Five adapters ship today (Claude Code, Gemini, Codex, Copilot, generic/
AGENTS.md), each writing its own native integration behind one interface; another harness only needs to call theaipebinary. The generated persona files are plain Markdown skills. Seedocs/harnesses.md. -
Building the binaries:
bun run build(all targets) orbun run build:host. Releases are automatic — merging tomaincomputes the next version, builds every target and publishes a GitHub Release (.github/workflows/release.yml); seeRELEASING.md.
Developers of AIPe itself still use Bun (see Development below).
src/cli.ts # unified `aipe` entry point: dispatches every subcommand
src/<name>/ # deterministic TS per capability (types, logic, cli.ts run(), __tests__/)
context-brain, make-workspace, relationship, hire-specialists, start, session-hook # onboarding
worktree, dispatch, journey, rehydrate, toolbox, add-repo, dashboard, serve, handoff # operation & growth
capabilities, execution, session # envelope recommendation + agentop dispatch
bin/aipe, bin/aipe.cmd # launchers: pick the standalone binary for the host (or Bun dev fallback)
scripts/build.ts # cross-platform `bun build --compile` into dist/ (gitignored)
src/harness/<id>.ts # one adapter per harness behind HarnessAdapter (see docs/harnesses.md)
src/runtime/ # machine-level state under ~/.aipe: workspace + running-serve registries
src/update/ # check-update / upgrade: verified self-install, then rehydrate + restart
skills/<name>/SKILL.md # coordinator-facing flows (Claude Code adapter):
# onboarding (context-brain, make-workspace, relationship, hire-specialists)
# operation (operate, toolbox, aipe-add-repo)
hooks/session-start # SessionStart hook: injects coordinator awareness via `aipe session-context`
.github/workflows/release.yml # automatic release on merge to main → GitHub Release
docs/harnesses.md # harness adapter reference: the seam, every harness, adding one
docs/upgrades.md # self-update + machine state under ~/.aipe/
docs/superpowers/specs/ # design specs (brainstorming output), one per sub-project
docs/superpowers/plans/ # implementation plans
docs/dossie/ # execution ledger: decisions, plan, review, final state per sub-project
A workspace using this plugin (e.g. aipe-opvibes/) is itself a git repo:
aipe-opvibes/
├── .gitignore # allowlist: publish .aipe/ + the harness's own paths, ignore repos/secrets
├── .aipe/
│ ├── brain.yaml # repos (URLs, paths, stacks)
│ ├── state.yaml # onboarding phases
│ ├── relations/graph.yaml # cross-repo edges (+ README.md)
│ ├── personas.yaml # roster (coordinator + specialists)
│ ├── personas/<repo>/<slug>/SKILL.md # published persona sources (for rehydrate)
│ ├── toolbox.yaml # skill-packages + MCP catalog
│ ├── skills/<name>/SKILL.md# published toolbox-skill sources
│ ├── journeys/<id>.yaml # per-demand dispatch ledger (audit)
│ ├── journeys/<id>/orientation.md # the approved Orientation Spec (scope + per-unit envelope)
│ ├── journeys/<id>/prompts/<fqid>.md # session-mode: exactly what each specialist was told
│ ├── journeys/<id>/grants/<sessionId>/ # session-mode: spawn-quota tokens issued via `aipe session grant`
│ ├── capabilities.yaml # what this machine can run (probed automatically by `aipe start`; `aipe capabilities probe|show|confirm`)
│ └── execution-policy.yaml # wave-level spending limits (optional; conservative defaults if absent)
├── .claude/ # SessionStart hook + AIPe skills
└── repos/<repo>/ # cloned repo (NOT published), with:
├── .claude/skills/<persona>/SKILL.md # installed persona (rehydratable)
└── .worktrees/<journey>-<slug>/ # isolated dispatch working trees
The clones live under repos/ so the brain and the team's code never share a
namespace — a repo called docs or README.md used to collide with a workspace
file. repo.path in brain.yaml is the single source of truth, so the legacy
layout (repos as direct children of the workspace) stays valid forever and
nothing at runtime assumes the prefix. A PE who wants to move an old workspace
over runs it explicitly:
aipe workspace migrate-layout # prints the plan, changes nothing
aipe workspace migrate-layout --apply # moves repos/ + rewrites brain.yamlIt refuses while any repo has a registered git worktree or a journey has work in
flight — a worktree records an absolute path, so moving the repo out from under
a running dispatch would break it. aipe rehydrate never migrates anything: it
runs unattended (SessionStart, and after a self-upgrade across every known
workspace) and only ever writes derived files.
- Runtime (for developing AIPe): Bun + TypeScript strict. End users of the plugin need no runtime — see "Requirements & distribution".
- Tests:
bun test. Type-check:bunx tsc --noEmit -p tsconfig.json(orbun run typecheck). One known environment-only test failure exists (make-workspace/git.test.ts, a git-remote URL rewrite specific to some sandboxes; passes on a clean runner). - Build standalone binaries:
bun run build(all) /bun run build:host. - Every sub-project is built through brainstorming → a written design spec →
an implementation plan → TDD execution → review → a dossier entry. See
docs/dossie/README.mdfor the convention. - The repository is English-only; interaction with the PE may happen in any language.
- Read
CONTRIBUTING.mdbefore opening a PR — AIPe dogfoods its own/operatedispatch flow, and the doc explains what that means for how this repo is developed and reviewed. - Governed by the Contributor Covenant.
- Found a security issue? See
SECURITY.mdfor the private report channel — please don't open a public issue for it. - Released under the MIT License.
CHANGELOG.mdpoints to the automated Releases page.