Skip to content

feat: Added Agent skills for AI Agents#6007

Merged
ntkathole merged 2 commits intofeast-dev:masterfrom
patelchaitany:agent-skills
Mar 16, 2026
Merged

feat: Added Agent skills for AI Agents#6007
ntkathole merged 2 commits intofeast-dev:masterfrom
patelchaitany:agent-skills

Conversation

@patelchaitany
Copy link
Contributor

@patelchaitany patelchaitany commented Feb 23, 2026

What this PR does / why we need it:

This PR adds the SKILLS for the AI Agents.

Which issue(s) this PR fixes:

#5976

Misc

For creating this Agent SKILLS i used the skill-creator skill from the https://github.com/anthropics/skills


Open with Devin

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 2 additional findings.

Open in Devin Review

Copy link

@soooojinlee soooojinlee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would it make sense to place these under .claude/skills/ (or similar) instead of a top-level Agent-Skill/ directory? I think the https://github.com/anthropics/skills convention typically uses that path.

@patelchaitany
Copy link
Contributor Author

Exactly @soooojinlee - those .claude/skills usually live in the User Directory rather than the main Git repo. Most devs either create a specific subdirectory for skills within the project or manage them in a separate Git repo entirely.

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 5 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 6 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 6 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 7 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 6 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 7 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 9 additional findings in Devin Review.

Open in Devin Review

Sagargupta16 added a commit to Sagargupta16/feast that referenced this pull request Mar 10, 2026
Remove feast-feature-engineering skill to avoid overlap with feast-dev#6007
which covers user-facing content more comprehensively. This PR now
focuses exclusively on the developer/contributor workflow skill.

Signed-off-by: Sagar Gupta <[email protected]>
Copy link
Contributor

@Sagargupta16 Sagargupta16 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work on the content -- the reference docs for configuration, feature definitions, and RAG retrieval are thorough.

A couple of suggestions for cross-platform compatibility:

  1. Directory placement: Both OpenAI and Claude Code follow the open Agent Skills standard. The convention is a skills/ directory (not Agent-Skill/). The spec also requires the directory name to match the name field in SKILL.md frontmatter.

  2. Frontmatter fields: The spec supports optional license, compatibility, and metadata fields that help with discoverability:

    ---
    name: feast-user-guide
    description: ...
    license: Apache-2.0
    compatibility: Works with Claude Code, OpenAI Codex, and any Agent Skills compatible tool.
    metadata:
      author: feast-dev
      version: "1.0"
    ---
  3. Symlinks: The .claude/skills/Agent-Skill and .cursor/Agent-Skill files are symlinks to the main skill. With the skills/ directory convention, these aren't needed -- agents discover skills from skills/ directly.

These are suggestions, not blockers. The content itself is solid.

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Inverted default value logic in _construct_random_input for singleton vs batch mode (sdk/python/feast/on_demand_feature_view.py:1014)

In _construct_random_input, the default value for missing types has its condition inverted. When singleton=False (batch mode), sample_values contains lists (e.g., ["hello world"]), but default_value is set to None (a scalar). When singleton=True, sample_values contains scalars (e.g., "hello world"), but default_value is set to [None] (a list).

Root Cause

The condition on line 1014 reads:

default_value = None if not singleton else [None]

This produces:

  • singleton=Falsedefault_value = None (should be [None] to match list-based sample values)
  • singleton=Truedefault_value = [None] (should be None to match scalar sample values)

The condition is backwards. Lines 1010-1011 show that when singleton=True, sample_values are converted to scalars via {k: v[0] for k, v in sample_values.items()}. So the default should also be a scalar (None) for singleton and a list ([None]) for non-singleton.

Impact: When a feature's ValueType is not found in the sample values map (e.g., an unusual or custom type), the wrong shape of default value is used. In batch mode, a None scalar is passed where a list is expected, potentially causing transformation inference (infer_features) to fail or produce incorrect results. In singleton mode, a [None] list is passed where a scalar is expected.

View 9 additional findings in Devin Review.

Open in Devin Review

@ntkathole ntkathole merged commit 99008c8 into feast-dev:master Mar 16, 2026
27 of 28 checks passed
@patelchaitany patelchaitany deleted the agent-skills branch March 16, 2026 10:07
ntkathole pushed a commit to Sagargupta16/feast that referenced this pull request Mar 16, 2026
Remove feast-feature-engineering skill to avoid overlap with feast-dev#6007
which covers user-facing content more comprehensively. This PR now
focuses exclusively on the developer/contributor workflow skill.

Signed-off-by: Sagar Gupta <[email protected]>
ntkathole pushed a commit that referenced this pull request Mar 16, 2026
* feat: add Claude Code agent skills for Feast

Add two agent skills following the anthropics/skills SKILL.md format:

- feast-dev: Development guide for contributors covering setup, testing,
  linting, code style, project structure, and key abstractions
- feast-feature-engineering: User-facing guide for building feature stores
  covering feature definitions, materialization, online/offline retrieval,
  on-demand transformations, and CLI reference

Closes #5976

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: move skills to top-level dir, add Agent Skills spec compatibility

- Move from .claude/skills/ to skills/ for platform-agnostic placement
- Add license, compatibility, and metadata fields per agentskills.io spec
- Skills now work with Claude Code, OpenAI Codex, and any Agent Skills
  compatible tool

Addresses feedback from @franciscojavierarceo regarding OpenAI compatibility.

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: scope to dev/contributor skill only

Remove feast-feature-engineering skill to avoid overlap with #6007
which covers user-facing content more comprehensively. This PR now
focuses exclusively on the developer/contributor workflow skill.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: align commands with Makefile and CLAUDE.md

Address Devin Review findings:
- Use make install-python-dependencies-dev instead of uv pip install
- Remove nonexistent start-local-integration-tests target
- Fix type-check command to cd sdk/python && python -m mypy feast
- Add make test-python-unit-fast and make precommit-check targets

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct test file path to test_unit_feature_store.py

Address Devin Review finding: the example pytest commands referenced
test_feature_store.py which doesn't exist. The actual file is
test_unit_feature_store.py. Also use -k flag for test name filtering
instead of :: class notation.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct CLI entry point path to cli/cli.py

Signed-off-by: Sagar Gupta <[email protected]>

---------

Signed-off-by: Sagar Gupta <[email protected]>
Anarion-zuo pushed a commit to Anarion-zuo/feast that referenced this pull request Mar 17, 2026
Added Agent Skills for the feast user

Signed-off-by: Chaitany patel <[email protected]>
Signed-off-by: aaronzuo <[email protected]>
Anarion-zuo pushed a commit to Anarion-zuo/feast that referenced this pull request Mar 17, 2026
* feat: add Claude Code agent skills for Feast

Add two agent skills following the anthropics/skills SKILL.md format:

- feast-dev: Development guide for contributors covering setup, testing,
  linting, code style, project structure, and key abstractions
- feast-feature-engineering: User-facing guide for building feature stores
  covering feature definitions, materialization, online/offline retrieval,
  on-demand transformations, and CLI reference

Closes feast-dev#5976

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: move skills to top-level dir, add Agent Skills spec compatibility

- Move from .claude/skills/ to skills/ for platform-agnostic placement
- Add license, compatibility, and metadata fields per agentskills.io spec
- Skills now work with Claude Code, OpenAI Codex, and any Agent Skills
  compatible tool

Addresses feedback from @franciscojavierarceo regarding OpenAI compatibility.

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: scope to dev/contributor skill only

Remove feast-feature-engineering skill to avoid overlap with feast-dev#6007
which covers user-facing content more comprehensively. This PR now
focuses exclusively on the developer/contributor workflow skill.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: align commands with Makefile and CLAUDE.md

Address Devin Review findings:
- Use make install-python-dependencies-dev instead of uv pip install
- Remove nonexistent start-local-integration-tests target
- Fix type-check command to cd sdk/python && python -m mypy feast
- Add make test-python-unit-fast and make precommit-check targets

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct test file path to test_unit_feature_store.py

Address Devin Review finding: the example pytest commands referenced
test_feature_store.py which doesn't exist. The actual file is
test_unit_feature_store.py. Also use -k flag for test name filtering
instead of :: class notation.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct CLI entry point path to cli/cli.py

Signed-off-by: Sagar Gupta <[email protected]>

---------

Signed-off-by: Sagar Gupta <[email protected]>
Signed-off-by: aaronzuo <[email protected]>
Shizoqua pushed a commit to Shizoqua/feast that referenced this pull request Mar 18, 2026
Added Agent Skills for the feast user

Signed-off-by: Chaitany patel <[email protected]>
Signed-off-by: Shizoqua <[email protected]>
Shizoqua pushed a commit to Shizoqua/feast that referenced this pull request Mar 18, 2026
* feat: add Claude Code agent skills for Feast

Add two agent skills following the anthropics/skills SKILL.md format:

- feast-dev: Development guide for contributors covering setup, testing,
  linting, code style, project structure, and key abstractions
- feast-feature-engineering: User-facing guide for building feature stores
  covering feature definitions, materialization, online/offline retrieval,
  on-demand transformations, and CLI reference

Closes feast-dev#5976

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: move skills to top-level dir, add Agent Skills spec compatibility

- Move from .claude/skills/ to skills/ for platform-agnostic placement
- Add license, compatibility, and metadata fields per agentskills.io spec
- Skills now work with Claude Code, OpenAI Codex, and any Agent Skills
  compatible tool

Addresses feedback from @franciscojavierarceo regarding OpenAI compatibility.

Signed-off-by: Sagar Gupta <[email protected]>

* refactor: scope to dev/contributor skill only

Remove feast-feature-engineering skill to avoid overlap with feast-dev#6007
which covers user-facing content more comprehensively. This PR now
focuses exclusively on the developer/contributor workflow skill.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: align commands with Makefile and CLAUDE.md

Address Devin Review findings:
- Use make install-python-dependencies-dev instead of uv pip install
- Remove nonexistent start-local-integration-tests target
- Fix type-check command to cd sdk/python && python -m mypy feast
- Add make test-python-unit-fast and make precommit-check targets

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct test file path to test_unit_feature_store.py

Address Devin Review finding: the example pytest commands referenced
test_feature_store.py which doesn't exist. The actual file is
test_unit_feature_store.py. Also use -k flag for test name filtering
instead of :: class notation.

Signed-off-by: Sagar Gupta <[email protected]>

* fix: correct CLI entry point path to cli/cli.py

Signed-off-by: Sagar Gupta <[email protected]>

---------

Signed-off-by: Sagar Gupta <[email protected]>
Signed-off-by: Shizoqua <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants