npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

a2scaffold

v0.2.0

Published

CLI tool to scaffold AI agent configuration files in any repository

Readme

a2scaffold

Scaffolds a governed knowledge base for AI coding agents — one source of truth, an authority model that says who may write what, and a promotion path from agent findings to project canon. a2 = ai agents.

Several tools already emit CLAUDE.md, AGENTS.md and .cursorrules from a single source. a2scaffold does that too, but it is not the point. The point is what surrounds the files:

  • Authority separation — .agents/context/ is human-owned canon; .agents/memory/ is where agents write. Claude Code is configured to ask before it edits canon. That rule covers the Edit tool in interactive sessions — a speed bump in the loop, not a wall; the docs say where it stops.
  • A promotion path — findings start as drafts, get reviewed, and are promoted into canon with a logged rationale. Knowledge earns its place.
  • Verification cycles — each shipped phase records what was checked, so the guidance stays tied to evidence.

The working model

The layout above is not a filing system. It is the shape of a way of working with an agent that the author calls CoSF, the Co-spiral Framework: human and AI take turns lifting each other's thinking, one revolution at a time. Three claims, each labelled with how tested it is, because a claim without that label is marketing:

| Claim | Status | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | | The human is the loop. The agent is instrumentation inside a person's cycle of understanding, not the other way round. Canon is human-promoted; agents draft, verify, propose. | Stance, one recorded instance | | HI × AI, not HI + AI. Each side scales the other, and the product can be smaller than either factor. A scaffold can make an agent worse; an agent can make a human worse. | Untested, falsifiable | | A scaffold is a specialization layer. A frontier model arrives generally capable and specifically ignorant; .agents/ is what closes that gap fast. | Sourced, by analogy |

The full statement, with what would falsify each claim, is in philosophy.md. The repository runs the model on itself: Round 13 records the review loop this branch went through before its own PR, including what each pass missed.

Quick Start

npx a2scaffold

This generates the base AI agent setup in your current directory:

.agents/                       # Shared knowledge base — written once
  .gitignore                   # Keeps placeholder files trackable
  AGENTS.md                    # The heart — every stub points here
  reference/                   # Topic docs, each with its own trigger
  context/                     # Canonical knowledge (human-curated)
    harness-behaviour.md       # How harnesses load and enforce (dated)
    memory-placement.md        # Which memory system a finding belongs in
    philosophy.md              # Principles that decide close calls
  memory/                      # Agent-generated learnings
  prompts/                     # Scanning & generation prompts
    reflect-agents.prompt.md   # Agent reflection prompt
  skills/                      # Reusable procedures
  plan/
    PDCA.md                    # PDCA methodology
    promotions.md              # Promotion log
    cycles/                    # Individual PDCA rounds
.claude/settings.json          # Ask before Edit() on canon — Claude Code only, interactive
AGENTS.md                      # Stub for Codex & the AGENTS.md convention
CLAUDE.md                      # Stub for Claude Code — @.agents/AGENTS.md
.github/copilot-instructions.md  # Stub for Copilot — restates it (cannot import)

.agents/AGENTS.md is the heart — project knowledge lives there once. Each harness reads a different filename, so the root files are peer stubs that all point at it:

| Stub | Harness | Points at the KB by | | --------------------------------- | ------------------------------------------------------ | ------------------------------------- | | CLAUDE.md | Claude Code | @.agents/AGENTS.md, expanded inline | | GEMINI.md | Gemini CLI | @.agents/AGENTS.md, expanded inline | | AGENTS.md | Codex, Cursor, Jules, Devin, Amp, Zed, Windsurf, Aider | the same line, read as a path | | .github/copilot-instructions.md | GitHub Copilot | restated — it cannot import |

No stub imports another, so every one reaches the knowledge base in a single hop and no harness depends on a file meant for a different one.

Toggle each stub in the template's values.yaml under agents:. AGENTS.md, Claude Code and Copilot are on by default.

Installation

# Use directly with npx (no install needed)
npx a2scaffold

# Or install globally
npm install -g a2scaffold

# Or add to a project
pnpm add -D a2scaffold

Requires Node.js >= 20.

Usage

# Scaffold with defaults (template: base, output: current dir)
a2scaffold

# Same as the default scaffold command
a2scaffold init

# Specify project name
a2scaffold --name my-project

# Output to a different directory
a2scaffold --output ./my-repo

# Use a specific template
a2scaffold --use base

# Preview what would be generated, including files that need --adopt or --force
a2scaffold --dry-run

# Bring an existing repo up to date without touching anything you wrote
a2scaffold sync
a2scaffold sync --dry-run

# List available templates
a2scaffold --list

# Adopt existing agent files: keep what they say, add the generated block
a2scaffold --adopt

# Replace existing files wholesale, losing edits (implies --adopt for stubs)
a2scaffold --force

Options

| Flag | Short | Default | Description | | ----------- | ----- | -------- | --------------------------------------------------------------------- | | --use | -u | base | Template to use | | --output | -o | . | Output directory | | --name | -n | dir name | Project name | | --list | -l | | List available templates | | --adopt | | | Insert the generated block into an existing stub, keeping its content | | --force | -f | | Replace existing files wholesale, edits lost (implies --adopt) | | --dry-run | | | Preview without writing | | --help | -h | | Show help | | --version | -v | | Show version |

Programmatic API

import { scaffold, listTemplates } from 'a2scaffold';

// List available templates
const templates = listTemplates();

// Scaffold to a directory
await scaffold({
  templateName: 'scaffold/base',
  outputDir: './my-project',
  overrides: { project: { name: 'my-project' } },
});

Documentation

Philosophy

  • A personal tool that might generalise — in that order. No vision statement, no 1.0 promise. An idea earns a plan doc when daily use proves the pain, not before.
  • Explicit over implicit. skill add resolves locally; reaching the network needs an explicit --from. No hidden fallbacks, no magic defaults.
  • Built-ins over dependencies. Two production deps. Arg parsing is node:util parseArgs, tests are node:test, types are JSDoc plus tsc --noEmit. No build step.
  • Paths are the grouping. The directory path is the namespace — no manifest to keep in sync with the filesystem.
  • Humans own canon, agents own drafts. Agents write to .agents/memory/; promotion into .agents/context/ is a human decision, logged.
  • Stability over speed. A pattern seen once is an observation. Only repeated patterns get promoted.

Full version, with rationale: .agents/context/philosophy.md.

Contributing Templates

See CONTRIBUTING.md for how to add new templates.

License

See LICENSE.

Transparency

AI-assisted development (e.g., Claude Code, Copilot) was used for scaffolding and iteration.