Cmux Debugging Guide
manaflow-ai/cmux
Covers debug logging, the Debug menu, profiling rules and runtime pitfalls for working on the cmux macOS terminal app.
BIND 9's memory allocator wrapper (iscmem memory contexts and iscmempool fixed-size pools).
$ npx skills add isc-projects/bind9 --skill isc-mem-allocator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install isc-projects/bind9 isc-mem-allocator --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/isc-projects/bind9.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .claude/skills/isc-mem-allocator && 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 "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .claude/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocatorType 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 isc-projects/bind9 --skill isc-mem-allocator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install isc-projects/bind9 isc-mem-allocator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/isc-projects/bind9.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .agents/skills/isc-mem-allocator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .agents/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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 isc-projects/bind9 --skill isc-mem-allocator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install isc-projects/bind9 isc-mem-allocator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/isc-projects/bind9.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .cursor/skills/isc-mem-allocator && 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 "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .cursor/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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/isc-projects/bind9.git --path .agents/skills/isc-mem-allocator--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 isc-projects/bind9 --skill isc-mem-allocator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install isc-projects/bind9 isc-mem-allocator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/isc-projects/bind9.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .gemini/skills/isc-mem-allocator && 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 "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .gemini/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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 isc-projects/bind9 isc-mem-allocatorInstalls 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 isc-projects/bind9 --skill isc-mem-allocator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/isc-projects/bind9.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .github/skills/isc-mem-allocator && 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 "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .github/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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 isc-projects/bind9 --skill isc-mem-allocator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install isc-projects/bind9 isc-mem-allocator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/isc-projects/bind9.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/isc-mem-allocator .opencode/skills/isc-mem-allocator && 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 "isc-mem-allocator" agent skill from https://github.com/isc-projects/bind9/tree/main/.agents/skills/isc-mem-allocator into .opencode/skills/isc-mem-allocator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "isc-mem-allocator", 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.
isc-mem-allocatorBIND 9's memory allocator wrapper (iscmem memory contexts and iscmempool fixed-size pools).
Isc Mem Allocator is an agent skill from isc-projects/bind9. BIND 9's memory allocator wrapper (iscmem memory contexts and iscmempool fixed-size pools). Use when writing or reviewing code that allocates/frees memory anywhere in BIND 9, when choosing between iscmemget/put and iscmemallocate/free, when debugging "iscmeminuse(ctx) == 0" or mempool-leak assertion failures, memory-leak reports, overmem/water-mark behavior, or ISCMEMDEBUG tracing.
Its SKILL.md is about 2.9k 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 Performance optimization and Debugging. The repository describes itself as: Archived mirror of https://gitlab.isc.org/isc-projects/bind9, please submit issues and PR/MRs in the GitLab. The licence is MPL-2.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 12d28b2. 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 c).
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.
Isc Mem Allocator loads about 2.9k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 1,368 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 isc-projects/bind9 at commit 12d28b2, republished under its MPL-2.0 licence (© isc-projects). 1,368 words, ~2,881 tokens.
.claude/skills/isc-mem-allocator/SKILL.md (or your agent's skills folder).Source of truth: lib/isc/include/isc/mem.h (public API), lib/isc/mem.c
(implementation), lib/isc/mem_p.h (private init/shutdown),
lib/isc/jemalloc_shim.h (non-jemalloc fallback).
isc_mem_t (an "mctx") is a thin, reference-counted accounting wrapper over
jemalloc's non-standard API: mallocx / sdallocx / rallocx / sallocx.
On systems without jemalloc, jemalloc_shim.h emulates those on top of
malloc, recovering sizes from malloc_usable_size() / malloc_size(), or
as a last resort by prepending a size_info header to every allocation.
Key consequences:
oom(), which writes a
signal-safe report + backtrace to stderr and abort()s. Never write
if (ptr == NULL) after an isc_mem_* call; there is no NULL return.sdallocx). Freeing with the wrong size
is undefined behavior inside jemalloc, not just a stats bug.jemalloc_flags is currently always 0),
so an mctx is an accounting domain, not a heap: it tracks who owes what,
it does not partition memory.isc_g_mctx always exists (created by the library
constructor isc__lib_initialize() → isc__mem_initialize() in
lib/isc/lib.c). Use it only when nothing more specific fits.| sized family | usable-size family | |
|---|---|---|
| alloc | isc_mem_get(mctx, size) | isc_mem_allocate(mctx, size) |
| zeroed | isc_mem_cget(mctx, n, size) | isc_mem_callocate(mctx, n, size) |
| realloc | isc_mem_reget(mctx, p, oldsize, newsize) / isc_mem_creget(mctx, p, oldn, newn, size) | isc_mem_reallocate(mctx, p, newsize) |
| free | isc_mem_put(mctx, p, size) / isc_mem_cput(mctx, p, n, size) | isc_mem_free(mctx, p) |
| strdup | — | isc_mem_strdup(mctx, s) |
| stats charge | the size you passed | real usable size via sallocx (≥ requested) |
Rules:
isc_mem_get must be returned with isc_mem_put using the
same mctx and the same size. Memory from isc_mem_allocate must go back
via isc_mem_free. Crossing the families corrupts the per-context inuse
counter (put charges the requested size, free charges the sallocx size),
which detonates later as INSIST(isc_mem_inuse(ctx) == 0) when the context
is destroyed. The header's ISC_ATTR_MALLOC_DEALLOCATOR_IDX attributes make
compilers warn about some mismatches — treat those warnings as errors.isc_mem_get(mctx, sizeof(*obj))). Use allocate/free only for
variable-length data whose size is inconvenient to carry around.c-prefixed variants are calloc-alikes: ISC_CHECKED_MUL(n, size)
(overflow-fatal multiply) plus ISC__MEM_ZERO. ISC__MEM_ZERO is verbatim
jemalloc's MALLOCX_ZERO (0x40), RUNTIME_CHECKed at startup. Free a cget'd
array with isc_mem_cput(mctx, p, n, size) so the sizes match.sizeof(void *) (ADJUST_ZERO_ALLOCATION_SIZE).isc_mem_put, isc_mem_cput, isc_mem_free, isc_mem_putanddetach, and
isc_mempool_put are statement macros that end with (p) = NULL;. So:
isc_mem_put(mctx, arr[i++], size)).For objects that hold a reference to their own mctx:
isc_mem_putanddetach(&obj->mctx, obj, sizeof(*obj));frees obj and then drops the mctx reference in the safe order (equivalent to
attach-to-local / detach-member / put / detach-local). This is the standard
destructor idiom; use it instead of an open-coded put + detach.
isc_mem_create("name", &mctx) — name is mandatory, copied, shows up in
stats channel output and leak dumps. (The create macro also re-assigns
isc__mem_malloc = mallocx; that is a deliberate link-order hack for
jemalloc — see jemalloc issue #2566 — don't "clean it up".)ISC_REFCOUNT_IMPL: isc_mem_attach(src, &dst),
isc_mem_detach(&mctx) (NULLs the pointer), isc_mem_ref/unref. The last
detach destroys the context.INSIST(isc_mem_inuse(ctx) == 0) and
that no pools remain. isc_mem_setdestroycheck(mctx, false) disables the
leak check — almost never the right fix; a failing inuse INSIST means a leak
or a family/size mismatch.isc_mem_checkdestroyed(stderr) (called by named/tests at shutdown) arms a
library-shutdown check that every context was destroyed; it hits
UNREACHABLE() otherwise, after dumping live contexts when debugging is on.isc__mem_shutdown() runs rcu_barrier() before checking, so RCU-deferred
frees (call_rcu) are flushed first — deferred frees still count as live
until the grace period runs.inuse is striped per thread id: stat_s[ISC_TID_MAX + 1] cacheline-padded
slots; ctx->stat = &stat_s[1] so isc_tid() == -1 (ISC_TID_UNKNOWN,
i.e. threads outside the loopmgr) indexes stat[-1] legally.
Updates are relaxed atomics on the caller's own stripe.isc_mem_inuse(), which walks
-1..isc_tid_count()) is meaningful.isc_mem_inuse() is O(threads) and iterates all stripes — fine for
water-mark checks, don't put it in per-packet hot paths gratuitously.isc_mem_setwater(mctx, hiwater, lowater) (0,0 or isc_mem_clearwater()
disables). Used by the resolver/cache to bound cache memory.isc_mem_isovermem() is probabilistic: false below lowater, true above
hiwater, and in between returns true with probability ramping linearly
0→1 (8-bit resolution, isc_random8()). This deliberately spreads cache
cleaning over many inserts instead of a thundering herd at the mark —
do not "fix" the randomness, and don't expect two consecutive calls to
agree.freed_bytes, thread-local); every
16 MiB it triggers mem_purge(): jemalloc arena.<all>.decay (or glibc
malloc_trim(0)), rate-limited via CAS on last_purge to once per second
globally.background_thread = true,
dirty_decay_ms = 10000 applied to existing and future arenas. Failures
are ignored on purpose (the volumetric purge covers it).Compile-time gate: ISC_MEM_TRACKLINES (set automatically by
-Ddeveloper=enabled meson builds) compiles in per-call
__func__/__FILE__/__LINE__ plumbing. Without it, the runtime flags below are
inert no-ops. ISC_MEM_TRACE additionally turns attach/detach into traced
refcounting.
Runtime flags (a context copies the global default at creation;
isc_mem_debugon()/debugoff() adjust the default and isc_g_mctx;
isc_mem_setdebugging() sets one context but requires inuse == 0):
ISC_MEM_DEBUGTRACE — print every alloc/free (add ptr size func file line mctx / del ...) to stderr.ISC_MEM_DEBUGRECORD — record every live allocation in a 512-bucket hash
table; freeing something never allocated hits UNREACHABLE(); leaks are
dumped (print_active) with file:line when the context is destroyed. This
is the tool for "inuse != 0 at destroy" hunts.ISC_MEM_DEBUGUSAGE — log when usage crosses the water marks.Each flag can be enabled by simply setting the environment variable of the same name (existence is checked, not the value) before start; the file name in each record is copied, not pointed to, so plugins can be unloaded safely.
Observability: isc_mem_stats(mctx, fp) (pool table + active allocations),
isc__mem_printactive() (unit tests), and the statistics channel renders all
contexts via isc_mem_renderxml() / isc_mem_renderjson() (id, name,
references, inuse, pool count, water marks).
isc_mempool_t batches fixed-size items on top of an mctx to cut allocator
round-trips (used for message buffers etc.):
isc_mempool_create(mctx, sizeof(item_t), "items", &pool);
isc_mempool_setfillcount(pool, 32); /* items grabbed per refill, default 1 */
isc_mempool_setfreemax(pool, 32); /* free-list cap, default 1 */
...
item_t *it = isc_mempool_get(pool); /* never NULL */
isc_mempool_put(pool, it); /* NULLs 'it' */
...
isc_mempool_destroy(&pool);Critical facts:
getallocated, getfreecount, ...) return garbage under
concurrent mutation.get: pops the free list; if empty, grabs fillcount items from the mctx
in one loop. put: pushes back on the free list unless freecount >= freemax, in which case the item goes straight back to the mctx.sizeof(element) (one pointer) because
free items are chained through their own storage — a pool of very small
items wastes the difference.fillcount is forced to 1 and freemax to 0 so
every get/put reaches the real allocator and poisoning/use-after-free
detection works. Don't assume pooling behavior in ASAN builds.isc_mempool_destroy() requires every item returned: outstanding items log
UNEXPECTED_ERROR("mempool %s leaked memory") and fail a REQUIRE.pools list (isc_mem_stats prints them); a context cannot be destroyed
while its pools exist.When touching allocation code, check:
n, size pairs for cget/cput). Grep for the struct's free sites when a
size or family changes.isc_mem_reget needs the correct old size; on the
non-jemalloc path it manually zeroes the growth for creget, so a wrong
old size also breaks zeroing.isc_mem_putanddetach.isc_g_mctx.© isc-projects, MPL-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 .agents/skills/isc-mem-allocator of isc-projects/bind9.
Open the folder on GitHubat commit 12d28b2
Isc Mem Allocator 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 |
|---|---|---|---|---|---|---|
| Isc Mem Allocator this skillisc-projects/bind9 | 780 | — | ~2.9k | Automated safety check: Pass | MPL-2.0 | |
| Cmux Debugging Guidemanaflow-ai/cmux | 28k | 1 repos | ~1.1k | Automated safety check: Pass | Custom licence | |
| Electron Heap Snapshot Analysiskeybase/client | 9.3k | — | ~875 | Automated safety check: Pass | BSD-3-Clause | |
| Issue Fixmono/SkiaSharp | 5.6k | — | ~5.1k | Automated safety check: Pass | MIT | |
| PlotJuggler 4 Perf ProfilingPlotJuggler/PlotJuggler | 6.2k | — | ~1.6k | Automated safety check: Notes | MPL-2.0 | |
| Electron DevTools Trace Analysiskeybase/client | 9.3k | — | ~809 | Automated safety check: Pass | BSD-3-Clause |
manaflow-ai/cmux
Covers debug logging, the Debug menu, profiling rules and runtime pitfalls for working on the cmux macOS terminal app.
keybase/client
Analyzes V8, Chrome and Electron .heapsnapshot files with Node scripts to find memory leaks, detached DOM nodes and the retainer paths that keep objects alive.
mono/SkiaSharp
Fix bugs in SkiaSharp C bindings. An agent skill from mono/SkiaSharp.
PlotJuggler/PlotJuggler
Guides CPU profiling of PlotJuggler 4 on Linux with perf: count first, record cheaply with LBR, then read per-thread, flat, flamegraph or time-window views.
keybase/client
Analyzes Chrome or Electron DevTools Performance trace exports with Python scripts to find where render time actually goes, without opening DevTools.
wshobson/agents
Profiles slow Python code with cProfile and memory profilers, then applies targeted fixes for CPU, memory, I/O and query bottlenecks.
isc-projects/bind9
Correct discipline for mutating an RCU / lock-free pointer-based data structure (trie, tree, list, graph) that has concurrent readers — build a new node cluster invisibly, publish it, then reclaim…
isc-projects/bind9
Measure and fix C struct layout in BIND 9 — pahole on the build's DWARF for sizes, padding holes, and cacheline boundaries, plus the house cacheline-padding idiom.
isc-projects/bind9
Review and refine ISC BIND 9 release notes for a new version — audit audience/action tags against the actual change substance, verify every covered issue is closed, and rewrite the auto-generated…
isc-projects/bind9
Drafting BIND 9 merge-request titles and descriptions — they feed the generated release notes, so the audience is system administrators.
isc-projects/bind9
How BIND 9 schedules callbacks — iscjobrun (same loop), iscasyncrun (any thread → any loop), iscworkenqueue (offload to a worker thread).
isc-projects/bind9
Methodology for root-causing hard concurrency / memory-ordering bugs (intermittent races, use-after-free, RCU/lock-free publish-order defects, "impossible" stale reads) with LTTng flight-recorder…
Categories
BIND 9's memory allocator wrapper (iscmem memory contexts and iscmempool fixed-size pools). Isc Mem Allocator is an agent skill from isc-projects/bind9. BIND 9's memory allocator wrapper (iscmem memory contexts and iscmempool fixed-size pools).
Isc Mem Allocator fits situations like: reviewing code that allocates/frees memory anywhere in BIND 9; choosing between iscmemget/put and iscmemallocate/free; debugging iscmeminuse(ctx) == 0; mempool-leak assertion failures.
Run `npx skills add isc-projects/bind9 --skill isc-mem-allocator -a claude-code`. Or copy the skill folder (.agents/skills/isc-mem-allocator in isc-projects/bind9) into .claude/skills/isc-mem-allocator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add isc-projects/bind9 --skill isc-mem-allocator -a codex`. Or copy the skill folder (.agents/skills/isc-mem-allocator in isc-projects/bind9) into .agents/skills/isc-mem-allocator 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 isc-projects/bind9 --skill isc-mem-allocator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/isc-mem-allocator, .gemini/skills/isc-mem-allocator, .github/skills/isc-mem-allocator and .opencode/skills/isc-mem-allocator in your project.
SKILL.md names no scripts, command-line tools or credentials: Isc Mem Allocator 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.
Isc Mem Allocator is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k 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 Isc Mem Allocator: Cmux Debugging Guide (manaflow-ai/cmux, 28k stars), Electron Heap Snapshot Analysis (keybase/client, 9.3k stars), Issue Fix (mono/SkiaSharp, 5.6k stars) and PlotJuggler 4 Perf Profiling (PlotJuggler/PlotJuggler, 6.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
isc-projects (a GitHub organization) maintains it in isc-projects/bind9, which has 780 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 7, 2026.
Source: isc-projects/bind9 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.