- Never use
anyunless 100% necessary or specifically instructed. - Use effect only if the project uses effect or specifically instructed, use effect reference repository for latest architecture patterns.
- Don't run dev server commands (e.g
pnpm run dev) - assume it's already running. - Don't run build commands unless specifically told to.
- Focus on checking commands like
pnpm run typecheck,pnpm run check,bun run lint, etc
- Use
pnpm,vp - vite plusif the project already uses it, otherwise usepnpm - Never use
npmor `yarn
When uncertain, prefer: Effect, Tailwind, TypeScript, React, Clerk, TanStack, Vercel, Vite
- Always strive for concise, simple solutions.
- If a problem can be solved in a simpler way, propose it.
- No pre-mature optimizations, propose if required.
- Use single word filename whenever possible otherwise split into kabab-case(only if no options).
- If asked to do too much work at once, stop and state that clearly.
- If computer use is helpful for completing or verifying work, use it.
- Avoid defensive future-facing design. This leads to pre-mature assumptions which are never true.
Long term maintainability is a core priority. If you add new functionality, first check if there is shared logic that can be extracted to a separate module. Duplicate logic across multiple files is a code smell and should be avoided. Don't be afraid to change existing code. Don't take shortcuts by just adding local logic to solve a problem.
packages/aikit- Low level SDK that provides unified LLM API for multiple LLM providers.packages/harness- Effect powered main Agent Harness application, usespackages/aikitunder the hood..scratch/packages- Local, ignored reference archive for packages that are no longer developed.
This project vendors external repositories under .repos/ as read-only reference material for coding agents.
- Prefer examples and patterns from the vendored source code over generated guesses or web search results.
- Do not edit files under .repos/ unless explicitly asked.
- Do not import from
.repos/; application code must continue importing from normal package dependencies. - When writing Effect code, read
.repos/effect-smol/LLMS.mdfirst and inspect.repos/effect-smol/for examples of idiomatic usage, tests, module structure, and API design.
This project uses private design documents under .notes/ as implementation reference for coding agents. When specified use it for planning, designing and brainstorming. When creating, mention in doc current date and git commit ID if available.
- Allow the design docs to be reviewed by subagents when see fit.
- Propose improvements when see fit.
vp checkandvp run typecheckmust pass before considering tasks completed, unless otherwise specified.- Use
vp testfor the built-in Vite+ test command andvp run testwhen you specifically need the test package script.
Conventional Commit style with optional package scopes, e.g feat(aikit): ..., fix(aikit): ..., and chore: .... Keep commit subjects imperative and concise.
The publishable package @codeworksh/aikit owns its release scripts; the root exposes *:aikit aliases so every command works from the repo root or from inside the package. Versioning uses bumpp, configured in packages/aikit/bump.config.ts (tags follow @codeworksh/aikit@<version> and pushing is disabled). Build + publish run through scripts/publish.mjs, which builds, rewrites the manifest, and publishes from a temp dir. Pushing and publishing stay manual.
Flow:
- Update
CHANGELOG.md— move the entry from[Unreleased]into a versioned section. pnpm bump:aikit(orpnpm run bumpinsidepackages/aikit): pick the bump; it commits and tags@codeworksh/aikit@<version>without pushing.git push && git push --tag.pnpm release:aikit:dryto preview the tarball, thenpnpm release:aikitto publish. Usepnpm release:aikit:devfor a prerelease under thedevdist-tag.