Thanks for helping improve ipfs2foc. This repo is small; the loop is short.
Development uses pnpm (Corepack picks the version from
package.json's packageManager field).
pnpm install
pnpm lint # biome check
pnpm typecheck # tsc --noEmit
pnpm test # node --test
pnpm build # compile to dist/ (what gets published)ipfs2foc runs on Node 26+ and uses the built-in node:sqlite. During
development, run the CLI straight from source — node packages/cli/src/index.ts <command> —
since Node strips the TypeScript types at runtime. The published package ships
compiled JS from dist/ (Node refuses to strip types under node_modules).
Keep pnpm lint, pnpm typecheck, and the test suite green before pushing.
Tests live under test/ and drive control flow with injectable dependencies
rather than live network calls; match that pattern when adding coverage.
AGENTS.md and the skills under skills/ are the source of truth for code,
docs, and commit style. The ones you will reach for most:
- Commits — Conventional Commits prefix, active voice, under 50 characters,
no body unless required (
skills/git-commit.md). - Docs and prose — describe the system as it is now, verify before
asserting, link instead of restating (
skills/documentation-voice.md,skills/anti-ai-smell.md). - Defaults and behavior —
mainnetis the default network; CLI flags state their default in--help(skills/default-mainnet-network.md,skills/sensible-defaults.md).
Verify CLI commands and flags against ipfs2foc --help rather than from memory;
docs that lag the binary are a bug.
Push to main; there is no pull-request gate. Branch, merge, and delete the
remote branch is fine for larger changes. Exploratory notes go under .research/
(gitignored) and never land in a commit.