Welcome.
We optimize for simplicity, not features.
Before you open a PR, ask yourself:
Did I reduce complexity? Or increase it?
That is how Hono, React, Vite, and Drizzle stay small enough to love.
- The Pulse Manifesto — why we exist
CLAUDE.md— how we build (Prime Directive)ARCHITECTURE.md— six conceptsGOVERNANCE.md— who decides what- Open RFCs and ADRs for the area you touch
| Welcome | Needs RFC + tight review |
|---|---|
| Docs, typos, examples | New public APIs |
| Tests, clearer errors | Scheduler / EventBus changes |
| Small plugins | Core runtime semantics |
| Bug fixes with reproduction | Anything that adds a concept |
For the first 6–12 months, keep core runtime PRs small and well-justified.
pnpm install
pnpm build:packages
pnpm test
pnpm dev # website + docs at http://localhost:3000Requirements: Node 20+, pnpm 10+.
main— default protected branch (releases / stable)development— integration branch for active work- Never push directly to
mainordevelopment - Branch from
development:feat/…,fix/…,docs/… - Open a PR into
development(ormainfor release hotfixes) - Draft PRs are welcome
feat(runtime): emit runtime:start and runtime:end
fix(events): preserve listener order
docs: clarify manifesto wording
perf(scheduler): avoid extra microtask
refactor(tool): flatten input validation
test(runtime): cover abort propagation
build: add empty package stubs
ci: require changeset on package PRs
Scopes: runtime, core, events, workflow, agent, tool, model, memory, rag, plugin, website, docs, examples.
Use the PR template. Every PR should answer Summary and Why.
CI must pass:
pnpm lint
pnpm typecheck
pnpm test
pnpm buildIf you change a published package, add a changeset:
pnpm changesetDocs-only / website-only / example-only PRs do not need a changeset.
Every new exported API must ship with:
- Documentation (example-first)
- A runnable example under 40 lines when possible
- Tests
PRs that add public surface without docs/tests will be asked to complete those first.
No exported API merges unless the author can answer:
- Can this be composed from existing APIs instead?
- Does this add another concept contributors must learn?
- Could we remove this API and lose nothing real?
- Would Express expose this?
- Would React expose this?
- Can the name be shorter?
- Can it be a function instead of a class/builder?
- Can it disappear?
If you cannot justify it, do not add it. Prefer deleting APIs over documenting them.
Major API work starts in rfcs/. See rfcs/README.md.
No major API merges without an accepted RFC.
AI-assisted contributions are welcome.
The contributor remains responsible for:
- Code quality and correctness
- Tests
- Documentation
- Maintainability
- Understanding every line they submit
Generated code without understanding may be rejected. We will not lower standards to accept volume.
- Bugs / concrete tasks → Issues (use templates)
- Ideas, RFCs, help, show & tell → GitHub Discussions
Looking for a place to start? Filter by good first issue.
Participation is governed by CODE_OF_CONDUCT.md.
See SECURITY.md. Never file public issues for vulnerabilities.