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

@zizzfizzix/aef

v0.5.1

Published

Slot-based, adapter-driven engineering skills for AI coding harnesses.

Downloads

76

Readme

Agentic Engineering Framework

A reusable, harness-agnostic engineering methodology for AI coding agents — a generic skill catalog plus pluggable adapters for the axes that vary between projects (ORM, UI/design system, stack, and AI harness). You author modular source; aef init renders it down to a flat, self-contained skill set in your repo, and aef sync keeps it up to date without clobbering your local edits.

Extracted and generalized from the open-mercato agentic harness (MIT). See EXTRACTION_PLAN.md for the full design rationale (decisions #1–#9).

What you get

  • 30+ skills across tiers — spec-writing, implement-spec, code-review, integration-tests, smart-test, check-and-commit, migrate-orm, ui-consistency, the auto-*-pr automation family, security audits, and the meta-skills for authoring more.
  • Converged install — each skill lands as one flat SKILL.md containing exactly the adapters you selected and nothing else (no runtime pointer-chasing, no irrelevant content).
  • Conflict-aware sync — a git-native 3-way merge brings framework updates down while preserving your local edits; conflicts surface as standard <<<<<<< markers.
  • Multi-harness wiring — Claude Code, Codex, and Cursor out of the box; new harnesses are just another adapter.

Quickstart

# in your project
npx @zizzfizzix/aef init --interactive       # pick harness(es), orm, ui, stack
# or non-interactively from a config file:
npx @zizzfizzix/aef init --config aef.config.json

This writes aef.config.json, renders the selected skills into .ai/skills/, installs the AGENTS.md + specs/qa/runs conventions, and wires each harness's skills directory. Later:

npx @zizzfizzix/aef sync                 # pull framework updates (3-way merge)
npx @zizzfizzix/aef add mikro-orm        # select an adapter, reconcile installed skills
npx @zizzfizzix/aef remove shadcn        # deselect an adapter

The model

framework source (modular)                 consumer repo (converged)
  core/ai/skills/<skill>/SKILL.md   ──┐
    ├ generic body                    │   aef init / sync
    └ <!-- SLOT:orm.cheatsheet -->    ├──────────────────────▶  .ai/skills/<skill>/SKILL.md
  adapters/orm/drizzle/...          ──┘   (renderer fills/prunes     (one flat file, selected
  adapters/ui/shadcn/...                   slots, deterministic)       adapters only)

Axes & adapters (drop a folder under adapters/<axis>/<name>/ to add a member — no code changes):

| Axis | Members shipped | | --------- | -------------------------- | | harness | claude-code, codex, cursor | | orm | drizzle, mikro-orm | | ui | shadcn, open-mercato-ui | | stack | generic-node, next-js |

A skill whose required axis isn't configured simply isn't installed (no ORM → no migrate-orm).

Configuration

aef.config.json (validated by schemas/aef.config.schema.json):

{
  "projectName": "my-app",
  "harnesses": ["claude-code", "codex"],
  "orm": "drizzle",
  "ui": "shadcn",
  "stack": "generic-node",
  "paths": { "modulesRoot": "src", "specsRoot": ".ai/specs", "testsRoot": ".ai/qa/tests" },
  "validation": ["npm run typecheck", "npm test"],
  "git": { "defaultBranch": "main", "labels": [] }
}

Self-improving loop

The framework improves itself with a skill, not bespoke commands:

  • improve-framework (opt-in, in consumers) — routes a consumer-side fix back to the right source fragment via provenance, validates with the gate, opens a framework PR, and syncs back.
  • Scope-tagged lessonsproject stays local in .ai/lessons.md; framework / adapter:* go to the .ai/framework-feedback/ outbox and upstream as PRs.
  • triage-feedback (framework-side) — dedupes inbound lessons and folds them into skills / adapters / lessons.framework.md, which sync then delivers to every consumer.

Docs

Development

See AGENTS.md. TypeScript (ESM) · pnpm · commander + @clack/prompts · zod · vitest · tsup · Lefthook.

pnpm install        # deps + git hooks
pnpm cli dev        # wire this repo's harness dirs to the dev/ toolchain skills
pnpm gate           # render every skill across an adapter matrix (invariant gate)
pnpm test           # vitest: render, sync, adapters, add/remove, byte-equal goldens

Releasing

Releases are automated via release-please: pushes to main keep a release PR open; merging it cuts a GitHub Release, which triggers a separate publish.yml workflow that publishes @zizzfizzix/aef to npm with provenance. npm auth uses Trusted Publishing (OIDC), so there is no npm token — configure the trusted publisher on npmjs.com pointing at this repo's publish.yml workflow. The only repo secret is:

  • RELEASE_PLEASE_TOKEN — a GitHub PAT (Contents + Pull requests: write) so the release PR gets CI and the GitHub Release triggers publish.yml; the built-in GITHUB_TOKEN can't trigger downstream workflow runs.

publish.yml also has a manual snapshot button (Actions → Publish → Run workflow) that publishes a throwaway prerelease of any branch under a branch-named dist-tag — npm i @zizzfizzix/aef@<branch> — without touching latest. See AGENTS.md for the full flow, including the one-time first-publish bootstrap.

License

MIT — see LICENSE. Attribution to open-mercato preserved.