Skip to content

Commit 312eea3

Browse files
committed
feat: Add agent skills and Cursor/Claude rules for Feast development
Add tool-agnostic agent skills (compatible with Claude Code, Cursor, OpenAI Codex, and similar AI tools): - skills/feast-architecture/SKILL.md: internals of each component (registry, provider, online/offline store, feature server, operator, data flows, serialization) - skills/feast-dev/SKILL.md: contributor workflow, setup, Docker, docs - skills/feast-testing/SKILL.md: how to run and write tests - skills/feast-user-guide/SKILL.md: using Feast as an end user Add Cursor rules (.cursor/rules/) and Claude rules (.claude/rules/) with symlinks to the shared skill files so each tool picks up the same guidance automatically. Update AGENTS.md to reference the new skills table and tighten the command examples. Update .gitignore to track .claude rules/skills while still ignoring ephemeral local-state files. Signed-off-by: ntkathole <nikhilkathole2683@gmail.com>
1 parent 630d9f8 commit 312eea3

14 files changed

Lines changed: 1102 additions & 85 deletions

File tree

.claude/rules/feast-components.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
paths:
3+
- sdk/python/feast/infra/online_stores/**
4+
- sdk/python/feast/infra/offline_stores/**
5+
- sdk/python/feast/infra/registry/**
6+
- sdk/python/tests/unit/infra/**
7+
- go/**
8+
- infra/feast-operator/**
9+
---
10+
11+
Read `skills/feast-architecture/SKILL.md` for the relevant component section:
12+
13+
| Working in… | Read section |
14+
|---|---|
15+
| `online_stores/` | Online Store — config pattern, entity key serialization, async support, registration |
16+
| `offline_stores/` | Offline Store — interface, PIT join, pull_latest, adding a new backend |
17+
| `infra/registry/` | Registry — proto vs SQL backend, caching, adding new object types |
18+
| `go/` | Go Feature Server — entry point, serving path, online store interface, build commands |
19+
| `infra/feast-operator/` | Feast Operator — CRD spec, reconcile loop, RBAC markers, dev workflow |
20+
21+
For testing patterns and debugging, also read `skills/feast-testing/SKILL.md`.
22+
23+
## When making any component change
24+
25+
- **Unit tests**: add or update tests in `sdk/python/tests/unit/infra/<subsystem>/`
26+
- **Integration tests**: run `make test-python-integration-local`; add a universal test case in `sdk/python/tests/integration/` if the change affects retrieval or materialization behavior
27+
- **Protos**: if you add a field to a proto message, recompile with `make protos` and update serialization helpers in `proto_registry_utils.py`
28+
- **Both SDKs**: if the change affects online serving, check whether the Go server (`go/`) also needs updating
29+
- **Skills/Rules**: if the change introduces new patterns, interfaces, or conventions that agents should follow, update the relevant section in `skills/feast-architecture/SKILL.md` (and `skills/feast-testing/SKILL.md` if testing patterns changed)
30+
31+
## Documentation — where to add/update
32+
33+
| Change type | Doc location | Also update |
34+
|---|---|---|
35+
| New **online store** | `docs/reference/online-stores/<name>.md` (copy an existing one as template) | `docs/reference/online-stores/README.md`, `docs/SUMMARY.md` (under "Online stores") |
36+
| New **offline store** | `docs/reference/offline-stores/<name>.md` | `docs/reference/offline-stores/README.md`, `docs/reference/offline-stores/overview.md`, `docs/SUMMARY.md` |
37+
| New **registry backend** | `docs/reference/registries/<name>.md` | `docs/SUMMARY.md` |
38+
| Config option change | `docs/reference/feature-store-yaml.md` ||
39+
| New CLI flag or command | `docs/reference/feast-cli-commands.md` ||
40+
| How-to / integration guide | `docs/how-to-guides/customizing-feast/` or `docs/how-to-guides/` | `docs/SUMMARY.md` |
41+
| Architecture / concept | `docs/getting-started/architecture/` or `docs/getting-started/components/` | `docs/SUMMARY.md` |
42+
| Blog post | `/infra/website/docs/blog/` (NOT `docs/blog/`) ||
43+
44+
All `docs/` pages are rendered by GitBook via `docs/SUMMARY.md`. Any new page must be added to `SUMMARY.md` or it won't appear in the site navigation.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
paths:
3+
- skills/**
4+
- AGENTS.md
5+
- .cursor/rules/**
6+
- .claude/rules/**
7+
---
8+
9+
## When editing skills or rules
10+
11+
Skills and rules are only useful if they accurately reflect the real codebase. Before finalising any skill/rule edit:
12+
13+
**Verify against source code:**
14+
- Command examples (lint, test, type-check) — confirm they still match `Makefile` targets and `pyproject.toml`
15+
- File paths and class names — confirm they exist in the repo
16+
- Interface signatures (e.g. `OnlineStore`, `OfflineStore`, `BaseRegistry`) — confirm against the actual base class files
17+
- Config field names — confirm against `RepoConfig` and `FeastConfigBaseModel` subclasses in `sdk/python/feast/repo_config.py`
18+
19+
**Keep scope consistent:**
20+
- `AGENTS.md` — entry point only; commands, skills table, code style. Max ~120 lines.
21+
- `skills/feast-architecture/SKILL.md` — how each component works internally; data flows; adding new backends
22+
- `skills/feast-testing/SKILL.md` — how to run, write, and debug tests
23+
- `skills/feast-dev/SKILL.md` — contributor workflow; setup; Docker; docs locations; PR process
24+
- `skills/feast-user-guide/SKILL.md` — how to use Feast as an end user; feature definitions; retrieval; RAG
25+
- `.cursor/rules/feast-components.mdc` / `.claude/rules/feast-components.md` — component checklist (tests, docs, skills); keep in sync with each other
26+
27+
**Keep the two rule files in sync:**
28+
`.cursor/rules/feast-components.mdc` and `.claude/rules/feast-components.md` contain the same content with only different frontmatter (`globs:` vs `paths:`). Any content change must be applied to both.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../skills/feast-architecture/SKILL.md

.claude/skills/feast-dev/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../skills/feast-dev/SKILL.md
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../skills/feast-testing/SKILL.md
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../skills/feast-user-guide/SKILL.md

.cursor/rules/feast-components.mdc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
description: Component-level guidance for Feast subsystems
3+
globs: sdk/python/feast/infra/online_stores/**,sdk/python/feast/infra/offline_stores/**,sdk/python/feast/infra/registry/**,sdk/python/tests/unit/infra/**,go/**,infra/feast-operator/**
4+
alwaysApply: false
5+
---
6+
7+
Read `skills/feast-architecture/SKILL.md` for the relevant component section:
8+
9+
| Working in… | Read section |
10+
|---|---|
11+
| `online_stores/` | Online Store — config pattern, entity key serialization, async support, registration |
12+
| `offline_stores/` | Offline Store — interface, PIT join, pull_latest, adding a new backend |
13+
| `infra/registry/` | Registry — proto vs SQL backend, caching, adding new object types |
14+
| `go/` | Go Feature Server — entry point, serving path, online store interface, build commands |
15+
| `infra/feast-operator/` | Feast Operator — CRD spec, reconcile loop, RBAC markers, dev workflow |
16+
17+
For testing patterns and debugging, also read `skills/feast-testing/SKILL.md`.
18+
19+
## When making any component change
20+
21+
- **Unit tests**: add or update tests in `sdk/python/tests/unit/infra/<subsystem>/`
22+
- **Integration tests**: run `make test-python-integration-local`; add a universal test case in `sdk/python/tests/integration/` if the change affects retrieval or materialization behavior
23+
- **Protos**: if you add a field to a proto message, recompile with `make protos` and update serialization helpers in `proto_registry_utils.py`
24+
- **Both SDKs**: if the change affects online serving, check whether the Go server (`go/`) also needs updating
25+
- **Skills/Rules**: if the change introduces new patterns, interfaces, or conventions that agents should follow, update the relevant section in `skills/feast-architecture/SKILL.md` (and `skills/feast-testing/SKILL.md` if testing patterns changed)
26+
27+
## Documentation — where to add/update
28+
29+
| Change type | Doc location | Also update |
30+
|---|---|---|
31+
| New **online store** | `docs/reference/online-stores/<name>.md` (copy an existing one as template) | `docs/reference/online-stores/README.md`, `docs/SUMMARY.md` (under "Online stores") |
32+
| New **offline store** | `docs/reference/offline-stores/<name>.md` | `docs/reference/offline-stores/README.md`, `docs/reference/offline-stores/overview.md`, `docs/SUMMARY.md` |
33+
| New **registry backend** | `docs/reference/registries/<name>.md` | `docs/SUMMARY.md` |
34+
| Config option change | `docs/reference/feature-store-yaml.md` | — |
35+
| New CLI flag or command | `docs/reference/feast-cli-commands.md` | — |
36+
| How-to / integration guide | `docs/how-to-guides/customizing-feast/` or `docs/how-to-guides/` | `docs/SUMMARY.md` |
37+
| Architecture / concept | `docs/getting-started/architecture/` or `docs/getting-started/components/` | `docs/SUMMARY.md` |
38+
| Blog post | `/infra/website/docs/blog/` (NOT `docs/blog/`) | — |
39+
40+
All `docs/` pages are rendered by GitBook via `docs/SUMMARY.md`. Any new page must be added to `SUMMARY.md` or it won't appear in the site navigation.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
description: Guidance for keeping skills and rules accurate and up to date
3+
globs: skills/**,AGENTS.md,.cursor/rules/**,.claude/rules/**
4+
alwaysApply: false
5+
---
6+
7+
## When editing skills or rules
8+
9+
Skills and rules are only useful if they accurately reflect the real codebase. Before finalising any skill/rule edit:
10+
11+
**Verify against source code:**
12+
- Command examples (lint, test, type-check) — confirm they still match `Makefile` targets and `pyproject.toml`
13+
- File paths and class names — confirm they exist in the repo
14+
- Interface signatures (e.g. `OnlineStore`, `OfflineStore`, `BaseRegistry`) — confirm against the actual base class files
15+
- Config field names — confirm against `RepoConfig` and `FeastConfigBaseModel` subclasses in `sdk/python/feast/repo_config.py`
16+
17+
**Keep scope consistent:**
18+
- `AGENTS.md` — entry point only; commands, skills table, code style. Max ~120 lines.
19+
- `skills/feast-architecture/SKILL.md` — how each component works internally; data flows; adding new backends
20+
- `skills/feast-testing/SKILL.md` — how to run, write, and debug tests
21+
- `skills/feast-dev/SKILL.md` — contributor workflow; setup; Docker; docs locations; PR process
22+
- `skills/feast-user-guide/SKILL.md` — how to use Feast as an end user; feature definitions; retrieval; RAG
23+
- `.cursor/rules/feast-components.mdc` / `.claude/rules/feast-components.md` — component checklist (tests, docs, skills); keep in sync with each other
24+
25+
**Keep the two rule files in sync:**
26+
`.cursor/rules/feast-components.mdc` and `.claude/rules/feast-components.md` contain the same content with only different frontmatter (`globs:` vs `paths:`). Any content change must be applied to both.

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,7 @@ Desktop.ini
266266
.agentready/
267267

268268
# Claude Code project settings
269-
.claude/
269+
# Claude Code local state (conversation history, credentials, cache)
270+
.claude/settings.local.json
271+
.claude/todos/
272+
.claude/cache/

AGENTS.md

Lines changed: 40 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -17,98 +17,51 @@ Feast (Feature Store) is a Python-based project that provides:
1717

1818
### Setup
1919
```bash
20-
# Install development dependencies
2120
make install-python-dependencies-dev
22-
23-
# Install minimal dependencies
2421
make install-python-dependencies-minimal
2522
```
2623

2724
### Code Quality
2825
```bash
29-
# Format Python code
26+
# Format Python code (entire codebase)
3027
make format-python
3128

32-
# Lint Python code
29+
# Lint Python code (entire codebase)
3330
make lint-python
3431

35-
# Type check
36-
cd sdk/python && python -m mypy feast
37-
```
38-
39-
### Testing
40-
```bash
41-
# Run unit tests
42-
make test-python-unit
43-
44-
# Run integration tests (local)
45-
make test-python-integration-local
32+
# Full type check (entire codebase)
33+
uv run bash -c "cd sdk/python && mypy feast"
4634

47-
# Run integration tests (CI)
48-
make test-python-integration
49-
50-
# Run all Python tests
51-
make test-python-universal
35+
# Full type check including tests
36+
make mypy-full
5237
```
5338

54-
### Protobuf Compilation
39+
#### Single-file lint and type-check
40+
When working on a specific file, run checks scoped to that file to get fast feedback:
5541
```bash
56-
# Compile Python protobuf files
57-
make compile-protos-python
58-
59-
# Compile all protos
60-
make protos
42+
uv run ruff check sdk/python/feast/path/to/file.py # lint
43+
uv run ruff check --fix sdk/python/feast/path/to/file.py # lint + auto-fix
44+
uv run ruff format sdk/python/feast/path/to/file.py # format
45+
uv run bash -c "cd sdk/python && mypy feast/path/to/file.py" # type-check
6146
```
6247

63-
### Go Development
48+
### Testing
6449
```bash
65-
# Build Go code
66-
make build-go
67-
68-
# Test Go code
69-
make test-go
70-
71-
# Format Go code
72-
make format-go
73-
74-
# Lint Go code
75-
make lint-go
50+
make test-python-unit # unit tests
51+
make test-python-integration-local # integration tests (local)
52+
make test-python-integration # integration tests (CI)
53+
make test-python-universal # all Python tests
7654
```
7755

78-
### Docker
56+
### Protobuf Compilation
7957
```bash
80-
# Build all Docker images
81-
make build-docker
82-
83-
# Build feature server Docker image
84-
make build-feature-server-docker
58+
make compile-protos-python # Python protobufs
59+
make protos # all protos
8560
```
8661

87-
### Documentation
62+
### Go Development
8863
```bash
89-
# Build Sphinx documentation
90-
make build-sphinx
91-
92-
# Build templates
93-
make build-templates
94-
95-
# Build Helm docs
96-
make build-helm-docs
97-
```
98-
99-
## Project Structure
100-
101-
```
102-
feast/
103-
├── sdk/python/ # Python SDK and core implementation
104-
├── go/ # Go implementation
105-
├── ui/ # Web UI
106-
├── docs/ # Documentation
107-
├── examples/ # Example projects
108-
├── infra/ # Infrastructure and deployment
109-
│ ├── charts/ # Helm charts
110-
│ └── feast-operator/ # Kubernetes operator
111-
└── protos/ # Protocol buffer definitions
64+
make build-go && make test-go && make format-go && make lint-go
11265
```
11366

11467
## Key Technologies
@@ -120,24 +73,30 @@ feast/
12073
- **Offline Stores**: BigQuery, Snowflake, Redshift, Spark, Dask, DuckDB
12174
- **Cloud Providers**: AWS, GCP, Azure
12275

123-
## Common Development Tasks
76+
## Agent Skills
77+
78+
The `skills/` directory contains tool-agnostic skills (compatible with Claude Code, OpenAI Codex, and other agent tools):
79+
80+
| Skill | Path | Use when… |
81+
|---|---|---|
82+
| **feast-user-guide** | `skills/feast-user-guide/SKILL.md` | Working with Feast as a user: defining features, retrieval, CLI, RAG |
83+
| **feast-dev** | `skills/feast-dev/SKILL.md` | Contributing to Feast: setup, tests, Docker, docs, PR workflow |
84+
| **feast-architecture** | `skills/feast-architecture/SKILL.md` | Understanding how each component works: registry, materialization, feature server, data flows |
85+
| **feast-testing** | `skills/feast-testing/SKILL.md` | Writing tests, running targeted tests, debugging registry/online store issues |
86+
87+
Reference docs: `skills/references/` — feature definitions, configuration, retrieval & RAG.
12488

125-
### Running Tests
126-
The project uses pytest for Python testing with extensive integration test suites for different data sources and stores.
89+
Architecture & design intent: `docs/getting-started/architecture/` (overview, write patterns, RBAC), `docs/getting-started/components/` (per-component pages), `docs/adr/` (design decisions).
90+
91+
## Code Style
12792

128-
### Code Style
12993
- Use type hints on all Python function signatures
13094
- Follow existing patterns in the module you are modifying
13195
- PR titles must follow semantic conventions: `feat:`, `fix:`, `ci:`, `chore:`, `docs:`
13296
- Sign off commits with `git commit -s` (DCO requirement)
133-
- Uses `ruff` for Python linting and formatting
134-
- Go uses standard `gofmt`
135-
136-
### Protobuf Development
137-
Protocol buffers are used for data serialization and gRPC APIs. Recompile protos after making changes to `.proto` files.
138-
139-
### Multi-language Support
140-
Feast supports Python and Go SDKs. Changes to core functionality may require updates across both languages.
97+
- Uses `ruff` for Python linting and formatting; Go uses standard `gofmt`
98+
- Recompile protos after making changes to `.proto` files (`make protos`)
99+
- Changes to core functionality may require updates across both Python and Go SDKs
141100

142101
## Documentation and Blog Posts
143102

0 commit comments

Comments
 (0)