Thanks for your interest in contributing. This document covers how to set up a dev environment, run the tests, and submit changes.
By participating in this project you agree to abide by the Code of Conduct.
Cortexes splits work across two branches:
| Branch | Contents |
|---|---|
plugin (default) |
The Claude Code plugin — commands, skills, hooks, the cortex-vec CLI, and the website source |
main |
Personal Obsidian vault data (not open to outside contributions) |
All PRs target plugin.
Main subsystems:
commands/,skills/,hooks/— the plugin's slash commands, self-triggering skills, and lifecycle hookscortex-vec/— the Python semantic indexing CLI (ChromaDB + OpenAI embeddings + BM25 hybrid retrieval)site/— the static site generator for the website (zero dependencies, Node built-ins only)
pip install -e ./cortex-vecRequires Python 3.11+. Semantic-search features need OPENAI_API_KEY; without
it, everything falls back to BM25-only. Tests don't require an API key.
Zero npm dependencies, just Node 18+:
node site/build.mjs # outputs to site/dist/
node --test site/tests/*.test.mjs # run testsMake sure tests pass before submitting a PR.
Python (cortex-vec) — the project's test gate runs ruff lint + pytest in one shot:
./scripts/run-checks.shWe recommend installing the pre-commit hook so this gate runs automatically
on every git commit:
pip install pre-commit
pre-commit installWebsite —
node --test site/tests/*.test.mjsThis project follows Conventional Commits:
<type>(<scope>): <description>
Common types: feat, fix, docs, chore, refactor, test, ci.
Scope is the subsystem name, e.g. feat(takeoff):, fix(cortex-vec):,
ci(site):.
- Branch off
plugin. - Make your changes and confirm the relevant tests pass.
- Open a PR targeting
plugin, describing what you changed and how you verified it. - CI runs the tests; website changes also get a Cloudflare Pages preview deployment.
- Bugs and feature requests go through the matching issue template.
- Security issues should not be filed as public issues — see SECURITY.md.
By submitting a contribution, you agree to license it under the project's Apache License 2.0.