Skip to main content
Issues and pull requests are welcome. There is no response time promise, and only the latest release is supported. Security reports do not go in issues. Use GitHub’s private vulnerability reporting, or email hello@craftspace.app.

House rules

  • Read CODING_STYLE.md before writing TypeScript. It is the whole rulebook: module shape, file order, error handling, named parameters, how config is read.
  • No comments in executable code. Intent goes in names, structure, types and tests, and change-specific context goes in the commit message.
  • Fix every instance, not just the reported one. If the same bug shape exists in four callers, the fix belongs where all four cross.
  • A fix should leave the system smaller. Deleting beats adding a flag.
  • No abstraction for one caller. A plain object or a direct call beats a registry, a factory, or an interface with a single implementation.

Adding a server module

Follow .agents/skills/craftspace-module/SKILL.md: shared zod schemas, a FastifyPluginAsyncZod controller with its request schemas at the end of the file, registered in app.ts. The simplest existing example is packages/app/server/src/knowledge/spaces/space-controller.ts.

Explaining a change

Reasoning goes in the pull request description, not in a comment above the code. If a change turned on something surprising, say so there: it is what the next person reads when they wonder why.