Feynman is a research-first CLI built on Pi and alphaXiv. This guide is for humans and agents contributing code, prompts, skills, docs, installers, or workflow behavior to the repository.
- GitHub: https://github.com/Companion-Inc/feynman
- Docs: https://feynman.is/docs
- Repo agent contract: AGENTS.md
- Issues: https://github.com/Companion-Inc/feynman/issues
- CLI/runtime code:
src/ - Bundled prompt templates:
prompts/ - Bundled Pi skills:
skills/ - Bundled Pi subagent prompts:
.feynman/agents/ - Docs site:
website/ - Build/release scripts:
scripts/ - Generated research artifacts:
outputs/,papers/,notes/
If you need to change how bundled subagents behave, edit .feynman/agents/*.md. Do not duplicate that behavior in AGENTS.md.
- Start from the latest
main. - Use Node.js
24.xfor local development. The supported runtime range is Node.js22.22.0through25.x;.nvmrcpins the preferred local version whilepackage.json,website/package.json, and the runtime version guard define the broader supported range. The optional session-search package remains limited to Node.js22.xbecause its sqlite dependency does not reliably install on newer Node majors. - Install dependencies from the repo root:
nvm use || nvm install
npm install- Run the required checks before asking for review:
npm test
npm run typecheck
npm run build
node scripts/check-pi-rpc.mjscheck-pi-rpc.mjs boots the built CLI in Pi RPC mode with a throwaway home and checks that stock Pi loaded Feynman's prompts, skills, and extension plus the bundled Pi packages with empty stderr. Feynman does not patch Pi or its packages; fix Feynman's own code, or report the upstream bug, instead of editing node_modules.
- If you changed the docs site, also validate the website:
cd website
npm install
npm run build- Keep the PR focused. Do not mix unrelated cleanup with the real change.
- Add or update tests when behavior changes.
- Update docs, prompts, or skills when the user-facing workflow changes.
- Bugs, docs fixes, installer fixes, and focused workflow improvements are good PRs.
- Large feature changes should start with an issue or a concrete implementation discussion before code lands.
- Avoid refactor-only PRs unless they are necessary to unblock a real fix or requested by a maintainer.
- Do not silently change release behavior, installer behavior, or runtime defaults without documenting the reason in the PR.
- Use American English in docs, comments, prompts, UI copy, and examples.
- Do not add bundled prompts, skills, or docs whose primary purpose is to market, endorse, or funnel users toward a third-party product or service. Product integrations must be justified by user-facing utility and written in neutral language.
- New workflows usually live in
prompts/*.md. - New reusable capabilities usually live in
skills/<name>/SKILL.md. - Keep skill files concise. Put detailed operational rules in the prompt or in focused reference files only when needed.
- If a new workflow should be invokable from the CLI, make sure its prompt frontmatter includes the correct metadata and that the command works through the normal prompt discovery path.
AGENTS.mdis the repo-level contract for workspace conventions, handoffs, provenance, and output naming.- Long-running research flows should write plan artifacts to
outputs/.plans/and useCHANGELOG.mdas a lab notebook when the work is substantial. - Do not update
CHANGELOG.mdfor trivial one-shot changes.
- The curl installer and release docs point users at tagged releases, not arbitrary commits on
main. - If you ship user-visible fixes after a tag, do not leave the repo in a state where
mainand the latest release advertise the same version string while containing different behavior. - When changing release-sensitive behavior, check the version story across:
.nvmrcpackage.jsonwebsite/package.jsonscripts/check-node-version.mjs- install docs in
README.mdandwebsite/src/content/docs/getting-started/installation.md
The existing static website/ build serves research docs and installers. Cloudflare
Pages project feynman (feynman-bpr.pages.dev) uses
website/wrangler.jsonc and uploads website/dist; building also synchronizes the
canonical installer scripts into the site.
.github/workflows/deploy-website.yml deploys only after a successful Publish and
Release run triggered by a main push in Companion-Inc/feynman, or a manual
Deploy website dispatch on main. Forks, pull requests, unsuccessful releases,
and non-main manual runs are excluded. Both automatic and manual runs validate
their initiating SHA, then reconcile current main, not that initiating SHA.
Before checkout, the GitHub API must prove a completed, successful, same-repository
main push run of the existing .github/workflows/publish.yml at exactly current
main's SHA. The workflow has contents: read and actions: read; the automatic
GITHUB_TOKEN is exposed as GH_TOKEN only to this pre-checkout lookup.
API errors fail closed; an unqualified main skips every remaining step. Manual
dispatch does not bypass publisher success.
The qualified SHA is checked out exactly, its root manifest's
@companion-ai/feynman version must exist on the public npm registry, and website
npm ci, lint, typecheck, and build must pass. Production runs remain serialized
without interrupting active uploads. GitHub can replace a pending run with a
delayed older event; that surviving run now reconciles qualified current main,
so it can deploy the newer release whose pending invocation was canceled. A final
live-main check still skips the upload if main changed after source selection.
There is no fallback to an older release when current main is unqualified; wait
for its successful publisher event or dispatch again after that proof exists.
Hosting and canonical secrets remain in the existing Companion organization:
Infisical project feynman, environment prod, mirrored to GitHub repository
secrets. GitHub uses Companion-Inc/feynman and npm publishes @companion-ai/feynman. The existing
CLOUDFLARE_API_TOKEN secret is passed only to the upload step, after Wrangler
4.107.0 is installed; no new credential is required. Cloudflare account ID
2164ee7d134223511b4621d9b163a5ac is a nonsecret workflow constant.
This configuration does not publish npm, change DNS, or establish a feynman.is
domain cutover. Maintainers handle release completion and domain routing separately.
AI-assisted PRs are fine. The contributor is still responsible for the diff.
- Understand the code you are submitting.
- Run the local checks yourself instead of assuming generated code is correct.
- Include enough context in the PR description for a reviewer to understand the change quickly.
- If an agent updated prompts or skills, verify the instructions match the actual repo behavior.
- Explain what changed and why.
- Call out tradeoffs, follow-up work, and anything intentionally not handled.
- Include screenshots for UI changes.
- Resolve review comments you addressed before requesting review again.
Useful contributions usually land in one of these areas:
- installation and upgrade reliability
- research workflow quality
- model/provider setup ergonomics
- docs clarity
- preview and export stability
- packaging and release hygiene
