Thanks for your interest in Hindsight!
We don't accept pull requests from outside the Hindsight team. PRs opened by external contributors are closed without review. This is not about you or the quality of your code: it lets the team decide what gets built, review fewer half-finished changes, and ship fixes together.
The best way to help is to tell us what's wrong or missing:
- Bugs: open a bug report. A clear way to reproduce it is the most useful thing you can give us. If you already know where the problem is in the code, say so in the issue.
- Features, new integrations, extensions and bank templates: open a feature request.
- Questions and ideas: use GitHub Discussions.
- Security issues: follow SECURITY.md. Don't open a public issue.
The rest of this guide covers building and running Hindsight from source, which is useful for reproducing a bug before you report it.
-
Clone the repository
git clone [email protected]:vectorize-io/hindsight.git cd hindsight
-
Bootstrap your dev environment in one shot:
./scripts/dev/setup.sh
This is idempotent (safe to re-run) and gets you ready to develop, including offline. It:
- installs the required toolchains if missing (uv/Python, Node/npm, Rust/cargo),
- creates
.envfrom.env.example(remember to add your LLM API key), - configures git hooks,
- installs all Python and Node workspace dependencies,
- pre-downloads the local ML models + tokenizer so the API runs offline,
- builds the TypeScript SDK and the Rust CLI.
Useful flags:
--skip-build(deps only),--skip-models(skip ML model download),--with-docs(also build the docs site),--force(rebuild artifacts). Docker image builds are out of scope. Run./scripts/dev/setup.sh --helpfor details.
If you'd rather set things up by hand instead of running the script above:
-
Set up your environment:
cp .env.example .env
Edit the .env to add LLM API key and config as required
-
Install dependencies:
# Python dependencies uv sync --directory hindsight-api/ # Node dependencies (uses npm workspaces) npm install
./scripts/dev/start-api.sh./scripts/dev/start-control-plane.sh./scripts/dev/start-docs.shcd hindsight-api
uv run pytest tests/We use Ruff for Python linting and formatting, and ESLint/Prettier for TypeScript.
Set up git hooks to automatically lint and format code before each commit:
./scripts/setup-hooks.shThis configures git to use the hooks in .githooks/, which run all scripts in scripts/hooks/ on commit. The lint hook runs in parallel:
- Python:
ruff check --fix,ruff format,ty check - TypeScript:
eslint --fix,prettier
# Run all lints (same as pre-commit)
./scripts/hooks/lint.sh
# Or run individually for Python:
cd hindsight-api
uv run ruff check --fix . # Lint and auto-fix
uv run ruff format . # Format code
uv run ty check hindsight_api # Type check- Use Python type hints
- Follow existing code patterns
- Keep functions focused and well-named
The project uses scripts/release.sh for creating releases. This script automates the entire release workflow:
- Bumps version in all components (API, clients, CLI, control plane, Helm)
- Regenerates OpenAPI spec and client SDKs (Python, TypeScript, Rust)
- Updates documentation versioning
- Creates a commit and git tag
- Pushes to GitHub (triggers CI/CD to publish packages)
./scripts/release.sh <version>Example:
./scripts/release.sh 0.5.0- During development, version bumps in
__init__.pydo NOT require client regeneration - Clients are only regenerated during releases
- Do not manually run
./scripts/generate-clients.shunless testing generation changes - Client version comments will reflect the API version from the latest release
Open an issue on GitHub with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Python version, Hindsight version, LLM provider)
Open a discussion on GitHub or reach out to the maintainers.