Skip to content

feat(skills): add maintainer skill set foundation and first skill - #269

Merged
efajardo-nv merged 11 commits into
NVIDIA-AI-Blueprints:developfrom
efajardo-nv:devskills-foundation
Jun 15, 2026
Merged

feat(skills): add maintainer skill set foundation and first skill#269
efajardo-nv merged 11 commits into
NVIDIA-AI-Blueprints:developfrom
efajardo-nv:devskills-foundation

Conversation

@efajardo-nv

@efajardo-nv efajardo-nv commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

Overview

Adds the first repo-local maintainer Agent Skills to AI-Q, mirroring the
NeMo Relay split between repo guidance, maintainer skills, and consumer skills.
This is the foundation slice of the DEVSKILLS work: repo guidance +
authoring scaffolding + a validator + one exemplar skill. It intentionally adds
no in-product skill runtime — these are static guidance bundles that coding
agents (Claude Code, Codex, Cursor, OpenCode) load while working in this repo.

What's included:

  • AGENTS.md (+ CLAUDE.md symlink) — repository-global contract for coding
    agents: structure, build/test/eval commands, coding style, security/auth rules,
    frontend conventions, docs expectations, and DCO/PR hygiene.
  • .agents/skills/README.md — maintainer skill index; explains maintainer
    skills (.agents/skills/) vs. API-consumer skills (skills/: aiq-deploy,
    aiq-research).
  • .agents/skills/TEMPLATE.md — canonical authoring template and frontmatter
    contract for new skills.
  • scripts/validate_skills.py — offline validator (frontmatter, naming, name
    ↔ directory match, description length, in-bundle link existence), wired into
    pre-commit and a pytest gate. This is the sole automated gate for
    .agents/skills/, since the existing skills-eval workflow is scoped to
    skills/ only.
  • .agents/skills/aiq-add-data-source/ — exemplar skill (SKILL.md + 3
    references) covering the full data-source workflow: package layout,
    FunctionBaseConfig + @register_function, missing-secret stub,
    data_source_registry wiring, and validation commands. Surfaced to agents via
    a .claude/skills/ symlink.

Validation

uv run python scripts/validate_skills.py .agents/skills   # -> 3 skill(s) OK
uv run pytest tests/test_agent_skills.py                  # -> 1 passed
pre-commit run --all-files                                # all hooks pass (incl. validate-skills)
uv run ruff check . && uv run ruff format --check .

Summary by CodeRabbit

  • Documentation
    • Added maintainer-facing agent-skills guidance (maintainer README, authoring template, and “add data source” workflow/reference docs)
    • Clarified maintainer vs API-consumer skills in integration docs, including updated symlink behavior
    • Added repository-wide authoring guidance via AGENTS.md and a CLAUDE.md link
  • Tests
    • Added a validation-focused test suite for the skills validator (acceptance and failure cases)
  • Chores
    • Added an offline skills validator and a pre-commit hook to fail fast on malformed skills

@copy-pr-bot

copy-pr-bot Bot commented Jun 12, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 66b094a2-c361-4d35-8113-079ac9021c65

📥 Commits

Reviewing files that changed from the base of the PR and between b68560d and d6055ee.

📒 Files selected for processing (2)
  • .agents/skills/README.md
  • docs/source/integration/agent-skills.md
📜 Recent review details
🧰 Additional context used
📓 Path-based instructions (3)
{docs/**,README.md,CONTRIBUTING.md,SECURITY.md,CODE-OF-CONDUCT.md}

⚙️ CodeRabbit configuration file

{docs/**,README.md,CONTRIBUTING.md,SECURITY.md,CODE-OF-CONDUCT.md}: Review documentation for command accuracy, branch-name consistency, current CI and copy-pr-bot behavior, public
vs internal boundary clarity, stale examples, and links that no longer match the repository layout.

Files:

  • docs/source/integration/agent-skills.md
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • docs/source/integration/agent-skills.md
{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}

⚙️ CodeRabbit configuration file

{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}: Review Agent Skill and skill-eval changes for valid skill metadata, deterministic eval specs, safe handling of
credentials, and clear generated-output boundaries. Do not flag SKILL.md files for missing SPDX headers when the
entrypoint intentionally starts with YAML frontmatter.

Files:

  • .agents/skills/README.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: Match the existing import and formatting style; do not hand-reformat unrelated code
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: Validate UI-affecting changes with npm run lint, npm run type-check, and npm run test:ci; include a screenshot for visible changes
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: Skills are task-oriented; keep the main docs canonical and do not duplicate full doc pages into skill text
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: For substantial behavior, auth, UI, or architecture changes, open a design discussion before coding rather than landing a large unreviewed change
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: Every commit must be signed off with git commit -s containing Signed-off-by trailer; commits without sign-off may be rejected
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:54:34.537Z
Learning: Keep PRs scoped with no unrelated files, no accidental generated artifacts, and no secrets
🔇 Additional comments (4)
.agents/skills/README.md (1)

27-27: ⚡ Quick win

Align maintainer skill examples with public documentation for consistency.

Line 27 lists three maintainer skill examples (aiq-add-data-source, aiq-release-qa, aiq-prepare-pr), but only aiq-add-data-source actually exists in .agents/skills/. The canonical public documentation at docs/source/integration/agent-skills.md line 20 conservatively lists only the existing skill. Since the "Examples" column label does not indicate these are aspirational or future names, the inconsistency may mislead contributors about what currently exists.

For clarity and alignment with the public docs, either:

  1. List only aiq-add-data-source in the examples column (what currently exists), or
  2. Qualify the column with a note like "Examples (current and aspirational)" or move the future names to the descriptive text with explicit framing.

Source: Coding guidelines

docs/source/integration/agent-skills.md (3)

16-21: LGTM!


37-45: LGTM!


107-111: LGTM!


Walkthrough

Adds a repo-local maintainer skills system with documentation, authoring template, and a validator CLI that enforces SKILL.md structure; integrates validation into pre-commit and tests; provides a concrete aiq-add-data-source skill with package layout, registry wiring, and validation guidance; and clarifies API-consumer vs maintainer skill concepts in updated docs.

Changes

Maintainer Skills System & Validation Infrastructure

Layer / File(s) Summary
Skill system documentation and authoring template
.agents/skills/README.md, .agents/skills/TEMPLATE.md, AGENTS.md, CLAUDE.md
Repository-level guidance and canonical authoring template that define the .agents/skills/ layout, required SKILL.md frontmatter fields (name, description), naming pattern (aiq- prefix, lowercase hyphenated), link-resolution scope (allowed subdirs: references/, scripts/, templates/, assets/), and contributor workflow for creating and validating maintainer skills.
Skill validator, pre-commit hook, and test suite
scripts/validate_skills.py, .pre-commit-config.yaml, tests/test_agent_skills.py
Validator that parses YAML frontmatter, enforces name and description contracts (naming regex, 1024-char limit), resolves relative markdown links within allowed bundle subdirectories, exposes a CLI, wires a pre-commit hook with pyyaml dependency, and adds pytest cases that dynamically load and assert validator behavior (link-escape rejection, unreadable SKILL.md handling, CRLF frontmatter acceptance).
aiq-add-data-source skill: workflow and reference guides
.agents/skills/aiq-add-data-source/SKILL.md, .agents/skills/aiq-add-data-source/references/package-layout.md, .agents/skills/aiq-add-data-source/references/registry-and-ui.md, .agents/skills/aiq-add-data-source/references/validation.md, .claude/skills/aiq-add-data-source
Concrete maintainer skill covering how to author and register NAT-based data sources: recommended package layout (NAT-free client/tool logic vs registration), pyproject.toml template with nat.plugins entry-point, example register.py (FunctionBaseConfig, SecretStr API key handling, conditional stub registration), registry/UI wiring and per-request scoping via data_sources, validation procedures (editable install, pytest, ruff, optional smoke-check), plus a symlink for agent tooling discovery.
Updated agent-skills documentation
docs/source/integration/agent-skills.md
Clarified distinction between API-consumer skills (under skills/) and maintainer skills (under .agents/skills/) with comparison table; restructured symlink layout documentation for per-skill consumer symlinks and maintainer symlinks under .claude/skills/; expanded Claude Code integration instructions for both skill types.

Sequence Diagram

sequenceDiagram
  participant Test as tests/test_agent_skills.py
  participant Validator as scripts/validate_skills.py
  participant FS as FileSystem
  participant Frontmatter as parse_frontmatter
  participant LinkCheck as check_bundle_links

  Test->>Validator: validate_roots([.agents/skills])
  Validator->>FS: iter_skill_dirs(root)
  loop Each skill directory
    Validator->>FS: read SKILL.md
    Validator->>Frontmatter: extract YAML frontmatter
    Validator->>Frontmatter: validate name/description
    Validator->>LinkCheck: validate markdown links
    LinkCheck->>FS: resolve relative link targets
  end
  Validator-->>Test: Report(errors, skills_checked)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed Title follows Conventional Commits format with type(scope) and concise summary, is 65 characters, and uses lowercase with no trailing period.
Description check ✅ Passed Description includes all required sections: Overview, Validation with checkbox items and explicit command outputs, Where should reviewers start, and Related Issues.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/aiq-add-data-source/references/package-layout.md:
- Around line 10-22: Update the markdown code fence that displays the directory
tree (the block starting with "sources/my_data_source/" and listing
pyproject.toml, README.md, src/, tests/, etc.) to include a language specifier
by replacing the opening ``` with ```text or ```plaintext so markdownlint MD040
is satisfied.

In @.agents/skills/README.md:
- Around line 41-58: The layout section in .agents/skills/README.md omits the
optional assets/ subdirectory; update the SKILL bundle layout list to include an
"assets/" entry (e.g., add a line describing assets/ as optional
images/binaries/other bundled assets) so it matches the validator's BUNDLE_DIRS
and the Naming/frontmatter rules; ensure the new entry appears alongside
references/, scripts/, and templates/ in the same block and that any example
tree or explanatory text mentions assets/ as optional.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 63cd3469-5536-4668-acd9-f7502ad3cb36

📥 Commits

Reviewing files that changed from the base of the PR and between 945bec1 and 432bddb.

📒 Files selected for processing (12)
  • .agents/skills/README.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/aiq-add-data-source/SKILL.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
  • .agents/skills/aiq-add-data-source/references/registry-and-ui.md
  • .agents/skills/aiq-add-data-source/references/validation.md
  • .claude/skills/aiq-add-data-source
  • .pre-commit-config.yaml
  • AGENTS.md
  • CLAUDE.md
  • scripts/validate_skills.py
  • tests/test_agent_skills.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (7)
{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}

⚙️ CodeRabbit configuration file

{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}: Review Agent Skill and skill-eval changes for valid skill metadata, deterministic eval specs, safe handling of
credentials, and clear generated-output boundaries. Do not flag SKILL.md files for missing SPDX headers when the
entrypoint intentionally starts with YAML frontmatter.

Files:

  • .claude/skills/aiq-add-data-source
  • .agents/skills/README.md
  • .agents/skills/aiq-add-data-source/references/validation.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/aiq-add-data-source/SKILL.md
  • .agents/skills/aiq-add-data-source/references/registry-and-ui.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}

⚙️ CodeRabbit configuration file

{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}: Review automation and packaging changes for least-privilege permissions, pinned versions where appropriate,
copy-pr-bot pull-request/ branch behavior, reproducible uv/npm setup, secret handling, and consistency with
the documented validation matrix.

Files:

  • .pre-commit-config.yaml
**/*AGENTS*.md

📄 CodeRabbit inference engine (CLAUDE.md)

**/*AGENTS*.md: Document agent responsibilities, capabilities, and interactions in markdown files
Include clear descriptions of agent roles, inputs, outputs, and dependencies in agent documentation

Files:

  • AGENTS.md
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • AGENTS.md
  • CLAUDE.md
  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run ruff check and ruff format validation for Python code changes

**/*.py: Lint Python code with Ruff using line length 120, target Python 3.11, rule sets E,F,W,I,PL,UP
Format Python code with Ruff and match existing import and formatting style; do not hand-reformat unrelated code
Configure Ruff isort with force-single-line for import organization

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**/*test*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run pytest for all behavior changes in Python code

Files:

  • tests/test_agent_skills.py
{**/*.py,frontends/**/*.{ts,tsx}}

📄 CodeRabbit inference engine (AGENTS.md)

Never print or log secret values, including in tool output or error messages

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Never commit secrets, tokens, or environment-specific hostnames; use environment variables and SecretStr; resolve API keys at runtime
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Missing-secret paths must degrade gracefully (stub/skip), not crash or leak
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Keep docs canonical; do not duplicate full doc pages into skill text
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Every commit must include DCO sign-off with 'git commit -s -m' containing Signed-off-by trailer
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Keep PRs scoped: no unrelated files, no accidental generated artifacts, no secrets; provide validation evidence
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Stay inside this repository; if workspace contains adjacent repos, do not edit them as part of an AI-Q change
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Run the narrowest relevant build/test command first; broaden to full suite only when a change crosses shared boundaries
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:51.912Z
Learning: Install and use pre-commit to enforce linting, secret detection, link checking, and skill validation before pushing
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:55.501Z
Learning: Define agents for specific domain responsibilities and capabilities following the agent-based architecture pattern
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T01:22:55.501Z
Learning: Maintain consistency in agent naming and interaction patterns across the system
🪛 ast-grep (0.43.0)
scripts/validate_skills.py

[warning] 87-87: Do not make http calls without encryption
Context: "http://"
Note: [CWE-319].

(requests-http)

🪛 markdownlint-cli2 (0.22.1)
.agents/skills/README.md

[warning] 38-38: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 67-67: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 69-69: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 71-71: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

.agents/skills/TEMPLATE.md

[warning] 90-90: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 90-90: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

AGENTS.md

[warning] 137-137: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 139-139: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

.agents/skills/aiq-add-data-source/references/package-layout.md

[warning] 10-10: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (10)
.agents/skills/aiq-add-data-source/SKILL.md (1)

1-94: LGTM!

.agents/skills/aiq-add-data-source/references/registry-and-ui.md (1)

1-62: LGTM!

.agents/skills/aiq-add-data-source/references/validation.md (1)

1-57: LGTM!

.claude/skills/aiq-add-data-source (1)

1-1: LGTM!

.pre-commit-config.yaml (1)

51-57: LGTM!

scripts/validate_skills.py (1)

1-174: Verify Ruff compliance for the Python files in this changeset. The prior Ruff command couldn’t run here because uv isn’t available (/bin/bash: uv: command not found), so Ruff’s E,F,W,I,PL,UP checks (line length 120, target py311) and ruff format --check still need to be executed for scripts/validate_skills.py and tests/test_agent_skills.py before merge.

.agents/skills/README.md (1)

67-73: 💤 Low value

Add blank lines around bash code blocks (Markdown style).

Lines 67–73 show a bash code block without blank lines before and after. Markdown linting (markdownlint-cli2) expects blank lines around fenced code blocks (MD031).

.agents/skills/TEMPLATE.md (1)

1-105: LGTM!

AGENTS.md (1)

1-157: LGTM!

CLAUDE.md (1)

1-1: LGTM!

Comment thread .agents/skills/aiq-add-data-source/references/package-layout.md Outdated
Comment thread .agents/skills/README.md
@efajardo-nv efajardo-nv changed the title feat(skills): add maintainer skill set with AGENTS.md, validator, and first skill feat(skills): add maintainer skill set foundation and first skill Jun 12, 2026
efajardo-nv and others added 3 commits June 11, 2026 22:18
… aiq-add-data-source

Adds repo-local maintainer Agent Skills under .agents/skills/: root AGENTS.md
(CLAUDE.md symlink), skill index README, authoring TEMPLATE, a skill validator
wired into pre-commit and pytest, and the aiq-add-data-source exemplar skill.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
…package-layout.md

Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
…tor's BUNDLE_DIRS

Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
@efajardo-nv
efajardo-nv force-pushed the devskills-foundation branch from 5489a4b to 34dd4c0 Compare June 12, 2026 02:18
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agents/skills/aiq-add-data-source/references/package-layout.md:
- Around line 63-95: The example uses os.environ inside the my_data_source
function but never imports os; add an import os at the top of the module so
my_data_source (and the stub logic that reads MY_API_KEY) can access os.environ.
Locate the module header where other imports (e.g., from pydantic,
nat.builder.builder) are declared and add the os import alongside them to fix
the NameError.

In @.agents/skills/aiq-add-data-source/references/validation.md:
- Around line 29-36: Update the Lint step in the validation runbook to run both
style checks and formatting checks: amend the "Lint" section (the commands shown
in .agents/skills/aiq-add-data-source/references/validation.md) to include `ruff
format --check` in addition to `ruff check` (keeping the same Ruff settings:
line length 120, target 3.11) so the validation enforces both linting and format
consistency.

In @.agents/skills/README.md:
- Around line 38-45: Add a language label to the top tree fence (e.g., ```text
or ```bash) in .agents/skills/README.md and ensure every fenced shell block in
the numbered list has a blank line before and after the fence; also add a blank
line before and after the `git commit` fenced example in AGENTS.md so all fenced
code blocks follow markdownlint rules. Locate the block that lists SKILL.md,
references/, scripts/, templates/, assets/ and update the opening ``` to include
a language tag, then scan the numbered list and AGENTS.md for fenced shell
examples and insert single blank lines immediately above and below each fenced
block.

In @.agents/skills/TEMPLATE.md:
- Around line 69-79: Update the "Validation" checklist in TEMPLATE.md to include
the Ruff formatting check by adding the command `ruff format --check
<path/to/changed/code>` alongside the existing `uv run ruff check` entry so
authors run both lint and format validation; ensure the expected result text is
updated to require both tests passing and no Ruff lint/format failures for the
changed code.

In @.pre-commit-config.yaml:
- Line 55: The pre-commit hook configuration for the validate-skills hook
currently uses a floating dependency via additional_dependencies: ["pyyaml"];
update that entry to pin pyyaml to the resolved version (e.g., pyyaml==6.0.3) so
pre-commit runs are reproducible—edit the validate-skills hook's
additional_dependencies to use the exact version string instead of the unpinned
package.

In `@scripts/validate_skills.py`:
- Around line 110-114: Wrap the call to skill_md.read_text(encoding="utf-8") in
a try/except that catches UnicodeDecodeError and OSError, so a bad/unreadable
SKILL.md doesn't crash the validator; on exception call report.fail(dir_name,
f"Unable to read SKILL.md: {err}") (or similar message including the exception)
and return early for that skill, then continue processing other skills; keep the
existing frontmatter parsing via _parse_frontmatter and its report.fail path
unchanged.
- Around line 90-97: The link validation currently uses first_segment and
.exists() which allows path traversal like "references/../../README.md"; change
to resolve the candidate path and verify it stays inside the intended bundle
directory before accepting it. Concretely, build candidate = (skill_md.parent /
path_part).resolve(strict=False), compute bundle_root = (skill_md.parent /
first_segment).resolve(strict=False) (or use a commonpath check), then fail via
report.fail(dir_name, ...) if not candidate.exists() or if candidate is not
under bundle_root (i.e., not candidate.is_relative_to(bundle_root) / commonpath
mismatch). This prevents "../" escapes while preserving normal in-bundle links.
- Line 54: FRONTMATTER_RE currently only accepts LF delimiters and rejects CRLF
files; update the regular expression FRONTMATTER_RE so the opening and closing
frontmatter delimiters accept optional CR (use \r?\n) — e.g. change the pattern
from matching "^---\n(.*?)\n---" to a pattern that allows CRLF and still uses
re.DOTALL so YAML body can span lines; ensure the symbol FRONTMATTER_RE is
updated accordingly so CRLF-authored SKILL.md files parse correctly.

In `@tests/test_agent_skills.py`:
- Around line 31-37: Add explicit guards after creating the dynamic import spec
to fail fast with a helpful error: check that spec is not None and that
spec.loader is not None before using them (the variables named spec and
spec.loader in this block), and raise an AssertionError or RuntimeError with a
clear message like "failed to create import spec for VALIDATOR" or "import spec
loader missing for VALIDATOR" instead of letting spec.loader.exec_module raise
an unclear exception; then proceed to register module in sys.modules and call
spec.loader.exec_module(module) as before.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 312e32f7-e0b4-48f5-a52a-c0cfba4aba29

📥 Commits

Reviewing files that changed from the base of the PR and between 5489a4b and 34dd4c0.

📒 Files selected for processing (12)
  • .agents/skills/README.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/aiq-add-data-source/SKILL.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
  • .agents/skills/aiq-add-data-source/references/registry-and-ui.md
  • .agents/skills/aiq-add-data-source/references/validation.md
  • .claude/skills/aiq-add-data-source
  • .pre-commit-config.yaml
  • AGENTS.md
  • CLAUDE.md
  • scripts/validate_skills.py
  • tests/test_agent_skills.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (6)
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • CLAUDE.md
  • AGENTS.md
  • tests/test_agent_skills.py
  • scripts/validate_skills.py
{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}

⚙️ CodeRabbit configuration file

{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}: Review automation and packaging changes for least-privilege permissions, pinned versions where appropriate,
copy-pr-bot pull-request/ branch behavior, reproducible uv/npm setup, secret handling, and consistency with
the documented validation matrix.

Files:

  • .pre-commit-config.yaml
{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}

⚙️ CodeRabbit configuration file

{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}: Review Agent Skill and skill-eval changes for valid skill metadata, deterministic eval specs, safe handling of
credentials, and clear generated-output boundaries. Do not flag SKILL.md files for missing SPDX headers when the
entrypoint intentionally starts with YAML frontmatter.

Files:

  • .claude/skills/aiq-add-data-source
  • .agents/skills/aiq-add-data-source/references/validation.md
  • .agents/skills/README.md
  • .agents/skills/aiq-add-data-source/SKILL.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/aiq-add-data-source/references/registry-and-ui.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
AGENTS.md

📄 CodeRabbit inference engine (CLAUDE.md)

Document agents in AGENTS.md file with their purpose, capabilities, and usage

Files:

  • AGENTS.md
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run ruff check and ruff format validation for Python code changes

**/*.py: Python code must be linted and formatted with Ruff using line length 120, target Python 3.11, and rule sets E,F,W,I,PL,UP with isort force-single-line import style
Match the existing import and formatting style in Python; do not hand-reformat unrelated code

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**/*test*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run pytest for all behavior changes in Python code

Files:

  • tests/test_agent_skills.py
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: pre-commit enforces linting, formatting, secret detection, link checking, and skill validation; install it and let it run before pushing
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: Use a maintainer-reviewed PR workflow with DCO sign-off; every commit must be signed off with git commit -s
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: Keep PRs scoped with no unrelated files, no accidental generated artifacts, and no secrets; provide validation evidence with commands run and results
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: Stay inside this repository; if the workspace contains adjacent repos, do not edit them as part of an AI-Q change
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: Treat sources/* as independent packages; prefer the smallest change scoped to the package you are touching
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: For substantial behavior, auth, UI, or architecture changes, open a design discussion before coding rather than landing a large unreviewed change
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:19:05.974Z
Learning: Repository-global rules live in AGENTS.md; task-specific runbooks live in .agents/skills/; API-consumer skills live in skills/
🪛 ast-grep (0.43.0)
scripts/validate_skills.py

[warning] 87-87: Do not make http calls without encryption
Context: "http://"
Note: [CWE-319].

(requests-http)

🪛 markdownlint-cli2 (0.22.1)
.agents/skills/README.md

[warning] 38-38: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 68-68: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 70-70: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 72-72: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

AGENTS.md

[warning] 137-137: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 139-139: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

.agents/skills/TEMPLATE.md

[warning] 90-90: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 90-90: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (2)
CLAUDE.md (1)

1-1: LGTM!

.agents/skills/aiq-add-data-source/SKILL.md (1)

1-94: LGTM!

Comment thread .agents/skills/aiq-add-data-source/references/package-layout.md
Comment thread .agents/skills/aiq-add-data-source/references/validation.md
Comment thread .agents/skills/README.md Outdated
Comment thread .agents/skills/TEMPLATE.md Outdated
Comment thread .pre-commit-config.yaml Outdated
Comment thread scripts/validate_skills.py Outdated
Comment thread scripts/validate_skills.py
Comment thread scripts/validate_skills.py Outdated
Comment thread tests/test_agent_skills.py
…mple

Signed-off-by: Eli Fajardo <efajardo@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
tests/test_agent_skills.py (1)

41-46: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Add negative-path coverage for the validator.

This test only proves the current repo skills pass the happy path. It would not catch the validator regressions above, such as CRLF frontmatter, bundle-link traversal, or unreadable SKILL.md handling. Add tempdir-based cases that call validate_roots() on intentionally malformed bundles. As per coding guidelines, "Run pytest for all behavior changes in Python code" and "Make the smallest coherent change and add or update tests for behavior changes."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_agent_skills.py` around lines 41 - 46, Extend
test_agent_skills_are_valid by adding tmpdir-based negative-path cases that call
the same _load_validator().validate_roots(...) (use tmp_path or tmpdir to create
ephemeral skill bundles) and assert the validator reports errors for malformed
bundles; specifically create separate temp bundles to test: (1) CRLF frontmatter
in SKILL.md, (2) a bundle-link that traverses out of the bundle, and (3) an
unreadable SKILL.md (change file permissions) — for each bundle call
validate_roots([temp_bundle_path]) and assert report.errors is not empty and
contains an expected substring, keeping existing SKILLS_ROOT happy-path check
intact.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@tests/test_agent_skills.py`:
- Around line 41-46: Extend test_agent_skills_are_valid by adding tmpdir-based
negative-path cases that call the same _load_validator().validate_roots(...)
(use tmp_path or tmpdir to create ephemeral skill bundles) and assert the
validator reports errors for malformed bundles; specifically create separate
temp bundles to test: (1) CRLF frontmatter in SKILL.md, (2) a bundle-link that
traverses out of the bundle, and (3) an unreadable SKILL.md (change file
permissions) — for each bundle call validate_roots([temp_bundle_path]) and
assert report.errors is not empty and contains an expected substring, keeping
existing SKILLS_ROOT happy-path check intact.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 837c7825-c647-4616-a9ca-239be54cd535

📥 Commits

Reviewing files that changed from the base of the PR and between 34dd4c0 and d31653e.

📒 Files selected for processing (2)
  • scripts/validate_skills.py
  • tests/test_agent_skills.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (4)
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run ruff check and ruff format validation for Python code changes

**/*.py: Python code must be linted and formatted with Ruff using line length 120, target Python 3.11, rule sets E,F,W,I,PL,UP, and isort with force-single-line
Never print or log secret values, including in tool output or error messages
Missing-secret paths must degrade gracefully (stub/skip), not crash or leak

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**/*test*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run pytest for all behavior changes in Python code

Files:

  • tests/test_agent_skills.py
**/*.{py,js,ts,tsx,yml,yaml}

📄 CodeRabbit inference engine (AGENTS.md)

Never commit secrets, tokens, or environment-specific hostnames; use environment variables and SecretStr; resolve API keys at runtime

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:26:27.927Z
Learning: Do not hand-reformat unrelated code when making changes
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:26:27.927Z
Learning: For substantial behavior, auth, UI, or architecture changes, open a design discussion before coding rather than landing a large unreviewed change
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:26:27.927Z
Learning: Every commit must be signed off with git commit -s and contain a Signed-off-by trailer; commits without sign-off may be rejected
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:26:27.927Z
Learning: Keep PRs scoped: no unrelated files, no accidental generated artifacts, no secrets; provide validation evidence
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T02:26:27.927Z
Learning: Do not edit adjacent repositories (e.g., sibling NeMo-Relay checkout) as part of an AI-Q change
🔇 Additional comments (5)
scripts/validate_skills.py (4)

54-54: Keep frontmatter parsing CRLF-safe.

FRONTMATTER_RE still matches LF-only delimiters, so a Windows-authored SKILL.md with valid YAML frontmatter can still be rejected.


90-97: Reject bundle-link escapes before checking existence.

references/../../README.md still passes the first_segment gate and .exists() check here, which lets links escape the skill bundle while still satisfying the current validator.


110-114: Do not let one unreadable SKILL.md abort the whole run.

read_text() can still raise OSError or UnicodeDecodeError here and terminate validation before the remaining skills are checked. As per coding guidelines, "Missing-secret paths must degrade gracefully (stub/skip), not crash or leak."

Source: Coding guidelines


151-171: LGTM!

tests/test_agent_skills.py (1)

32-37: Fail fast when dynamic import spec resolution fails.

spec_from_file_location() can still return None, and spec.loader can still be None; the current path turns that into a less-diagnostic failure in module_from_spec() or exec_module().

efajardo-nv and others added 3 commits June 11, 2026 22:30
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
Cover bundle-link escape and unreadable SKILL.md error paths, plus a
positive guard that CRLF frontmatter stays accepted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
.agents/skills/aiq-add-data-source/references/validation.md (1)

11-17: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Make the validation steps actually fail when registration is broken.

Step 1 only installs the package; it does not assert that the nat.plugins entry point exists. Step 4 only curls the endpoint; it does not fail on HTTP errors or verify that my_data_source appears in the response. As written, both checks can pass even when registration is wrong.

Also applies to: 40-47

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/aiq-add-data-source/references/validation.md around lines 11
- 17, Update the validation steps so they assert plugin registration: after step
1 (package install) add a check that the `nat.plugins` entry point for
`my_data_source` is present (e.g., run Python code or
`pkg_resources`/`importlib.metadata` lookup and fail non-zero if missing), and
update step 4 to curl the service endpoint but exit non-zero on HTTP errors and
assert the response body contains `my_data_source`; reference `nat.plugins`,
`my_data_source`, the installation step and the curl endpoint in the checks so
the validation fails when registration is broken.
.agents/skills/README.md (1)

8-17: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Update the canonical docs to match this new skill-location contract.

This README now tells contributors to author maintainer skills under .agents/skills/ and symlink .claude/skills/* into that tree, but the supplied docs/source/integration/agent-skills.md snippets still document .agents/skills -> ../skills and .claude/skills/* -> ../../skills/*. That leaves docs/source/ contradicting the workflow defined here.

As per coding guidelines, “Update the docs under docs/source/ when behavior, configuration, or workflows change. Keep the docs canonical; do not duplicate full doc pages into skill text.”

Also applies to: 65-80

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.agents/skills/README.md around lines 8 - 17, The docs under
docs/source/integration/agent-skills.md are out of sync with the new
skill-location contract described in .agents/skills/README.md; update the
documentation text and any example symlink commands in agent-skills.md so they
show maintainer skills living in .agents/skills/ with contributors creating
symlinks from .claude/skills/* into .agents/skills/ (not the old .agents/skills
-> ../skills or .claude/skills/* -> ../../skills/* paths), and make the same
correction for the other referenced snippet range (lines referenced as 65-80) so
the canonical docs in docs/source/ match the README workflow exactly.

Sources: Coding guidelines, Learnings

.pre-commit-config.yaml (1)

51-57: ⚠️ Potential issue | 🟠 Major

Pin validate-skills to Python 3.11 to match the repo target.

.pre-commit-config.yaml sets default_language_version: python: python3 for the local validate-skills hook (no language_version override), but pyproject.toml targets requires-python >=3.11,<3.14 and scripts/validate_skills.py uses Python-3.10+ syntax (dict | None) and Path.is_relative_to. If a contributor’s python3 is <3.11, the hook may crash before validation. Add language_version: python3.11 to the validate-skills hook (or bump the global default).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.pre-commit-config.yaml around lines 51 - 57, The pre-commit hook entry with
id "validate-skills" invokes the script validate_skills.py but relies on the
repo default python which may be older than 3.11; add language_version:
python3.11 to the validate-skills hook in .pre-commit-config.yaml so the hook
runs under Python 3.11 (or alternatively bump the global
default_language_version) to match pyproject.toml and the script's Python-3.11+
syntax.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/validate_skills.py`:
- Line 54: The FRONTMATTER_RE pattern allows the closing '---' to be part of a
longer token (e.g. '----' or '---oops'); update the FRONTMATTER_RE regex to
require the closing fence to be a full line by adding an end-of-line or EOF
anchor (e.g. change the pattern used in FRONTMATTER_RE to require the closing
'---' to be followed by either a newline or end-of-file using a non-capturing
group like (?:\r?\n|$) while preserving DOTALL).

---

Outside diff comments:
In @.agents/skills/aiq-add-data-source/references/validation.md:
- Around line 11-17: Update the validation steps so they assert plugin
registration: after step 1 (package install) add a check that the `nat.plugins`
entry point for `my_data_source` is present (e.g., run Python code or
`pkg_resources`/`importlib.metadata` lookup and fail non-zero if missing), and
update step 4 to curl the service endpoint but exit non-zero on HTTP errors and
assert the response body contains `my_data_source`; reference `nat.plugins`,
`my_data_source`, the installation step and the curl endpoint in the checks so
the validation fails when registration is broken.

In @.agents/skills/README.md:
- Around line 8-17: The docs under docs/source/integration/agent-skills.md are
out of sync with the new skill-location contract described in
.agents/skills/README.md; update the documentation text and any example symlink
commands in agent-skills.md so they show maintainer skills living in
.agents/skills/ with contributors creating symlinks from .claude/skills/* into
.agents/skills/ (not the old .agents/skills -> ../skills or .claude/skills/* ->
../../skills/* paths), and make the same correction for the other referenced
snippet range (lines referenced as 65-80) so the canonical docs in docs/source/
match the README workflow exactly.

In @.pre-commit-config.yaml:
- Around line 51-57: The pre-commit hook entry with id "validate-skills" invokes
the script validate_skills.py but relies on the repo default python which may be
older than 3.11; add language_version: python3.11 to the validate-skills hook in
.pre-commit-config.yaml so the hook runs under Python 3.11 (or alternatively
bump the global default_language_version) to match pyproject.toml and the
script's Python-3.11+ syntax.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 8ca85dbd-46ff-460a-811a-b3862d35eb17

📥 Commits

Reviewing files that changed from the base of the PR and between d31653e and 91e2622.

📒 Files selected for processing (8)
  • .agents/skills/README.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
  • .agents/skills/aiq-add-data-source/references/validation.md
  • .pre-commit-config.yaml
  • AGENTS.md
  • scripts/validate_skills.py
  • tests/test_agent_skills.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (5)
{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}

⚙️ CodeRabbit configuration file

{.github/**,ci/**,.pre-commit-config.yaml,pyproject.toml,uv.lock}: Review automation and packaging changes for least-privilege permissions, pinned versions where appropriate,
copy-pr-bot pull-request/ branch behavior, reproducible uv/npm setup, secret handling, and consistency with
the documented validation matrix.

Files:

  • .pre-commit-config.yaml
{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}

⚙️ CodeRabbit configuration file

{skills/**,.agents/skills/**,.claude/skills/**,.github/skill-eval/**}: Review Agent Skill and skill-eval changes for valid skill metadata, deterministic eval specs, safe handling of
credentials, and clear generated-output boundaries. Do not flag SKILL.md files for missing SPDX headers when the
entrypoint intentionally starts with YAML frontmatter.

Files:

  • .agents/skills/aiq-add-data-source/references/validation.md
  • .agents/skills/aiq-add-data-source/references/package-layout.md
  • .agents/skills/TEMPLATE.md
  • .agents/skills/README.md
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run ruff check and ruff format validation for Python code changes

**/*.py: Lint Python code with Ruff (line length 120, target Python 3.11, rule sets E,F,W,I,PL,UP; isort force-single-line). Match existing import and formatting style; do not hand-reformat unrelated code.
Format Python code check with Ruff using uv run ruff format --check .
Never print or log secret values, including in tool output or error messages.

Files:

  • tests/test_agent_skills.py
  • scripts/validate_skills.py
**/*test*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Run pytest for all behavior changes in Python code

Files:

  • tests/test_agent_skills.py
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • tests/test_agent_skills.py
  • AGENTS.md
  • scripts/validate_skills.py
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Never commit secrets, tokens, or environment-specific hostnames. Use environment variables and `SecretStr`; resolve API keys at runtime.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Missing-secret paths must degrade gracefully (stub/skip), not crash or leak.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Respect authenticated data sources: honor `requires_auth`, per-user token pass-through, and backend token validators. Apply owner guardrails before loading protected report or artifact context into an agent.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Do not weaken or bypass `AuthMiddleware`, validators, or auth gating without a prior design discussion.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Update the docs under `docs/source/` when behavior, configuration, or workflows change. Keep the docs canonical; do not duplicate full doc pages into skill text.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Every commit must be signed off with DCO: `git commit -s -m "Concise, scoped change"`. The commit must contain a `Signed-off-by: Your Name <youremail.com>` trailer.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Keep PRs scoped: no unrelated files, no accidental generated artifacts, no secrets. Provide validation evidence (commands run and results).
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Do not edit adjacent repositories (e.g., sibling NeMo-Relay checkout) as part of an AI-Q change. Stay inside this repository and treat `sources/*` as independent packages: prefer the smallest change scoped to the package you are touching.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:31.294Z
Learning: Backend Python package code should reside in `src/aiq_agent/`. Data-source and tool packages should reside in `sources/`. Frontends and tooling should reside in `frontends/`. Configs, deployment, and docs should reside in `configs/`, `deploy/`, and `docs/` respectively.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:41.562Z
Learning: Define agent capabilities and responsibilities in a structured format with clear sections for purpose, actions, and dependencies
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:41.562Z
Learning: Document agent interfaces and communication protocols when defining agents
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-12T03:06:41.562Z
Learning: Maintain consistency in agent naming conventions across the codebase

Comment thread scripts/validate_skills.py Outdated
Require the closing '---' to be a full line (newline or EOF) so tokens
like '----' or '---oops' are not accepted as a valid frontmatter close.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
@AjayThorve

Copy link
Copy Markdown
Member

/ok to test 8681926

@AjayThorve
AjayThorve requested a review from a team June 12, 2026 18:07
@AjayThorve AjayThorve added AIQ2.2 enhancement New feature or request labels Jun 12, 2026
@efajardo-nv
efajardo-nv requested a review from AjayThorve June 12, 2026 18:16

@AjayThorve AjayThorve left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

One blocking docs-consistency issue from my review.

Comment thread .agents/skills/README.md

@AjayThorve AjayThorve left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

approving, pending one requested change

@AjayThorve

Copy link
Copy Markdown
Member

/nvskills-ci

…on page

Signed-off-by: Eli Fajardo <efajardo@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/source/integration/agent-skills.md`:
- Around line 20-21: Remove all references to the non-existent aiq-add-tool
skill from the documentation. In docs/source/integration/agent-skills.md, remove
aiq-add-tool from the table examples at lines 20-21 (replace it with only
aiq-add-data-source in the second column) and remove it from the symlink targets
section at lines 110-111. Additionally, check .agents/skills/README.md and
remove any references to aiq-add-tool listed as an example maintainer skill,
since only aiq-add-data-source actually exists in the .agents/skills/ directory.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 035957d3-bf43-43b8-a690-5869a6a9618b

📥 Commits

Reviewing files that changed from the base of the PR and between 8681926 and b68560d.

📒 Files selected for processing (1)
  • docs/source/integration/agent-skills.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**

📄 CodeRabbit inference engine (AGENTS.md)

Update the docs under docs/source/ when behavior, configuration, or workflows change. Keep docs canonical; do not duplicate full doc pages into skill text.

Files:

  • docs/source/integration/agent-skills.md
{docs/**,README.md,CONTRIBUTING.md,SECURITY.md,CODE-OF-CONDUCT.md}

⚙️ CodeRabbit configuration file

{docs/**,README.md,CONTRIBUTING.md,SECURITY.md,CODE-OF-CONDUCT.md}: Review documentation for command accuracy, branch-name consistency, current CI and copy-pr-bot behavior, public
vs internal boundary clarity, stale examples, and links that no longer match the repository layout.

Files:

  • docs/source/integration/agent-skills.md
**

⚙️ CodeRabbit configuration file

**: # Contributing Guidelines

We welcome contributions to the NVIDIA AI-Q blueprint. This repository uses a maintainer-reviewed pull request workflow with DCO sign-off, code-owner review, copy-pr-bot mirroring, and GitHub Actions validation.

Before You Start

  • Search existing issues and pull requests before opening new work.
  • Open an issue or discussion before large design changes, public APIs, deployment changes, or contributor workflow changes.
  • Do not include secrets, credentials, private hostnames, internal-only logs, customer data, or generated local artifacts.
  • Target the develop branch unless a maintainer asks you to use a release branch.

Pull Requests

  1. Fork the repository and create a focused branch from develop.
  2. Make the smallest coherent change and add or update tests for behavior changes.
  3. Sign off every commit with git commit -s.
  4. Run the relevant local validation before opening the PR.
  5. Open a pull request into develop and fill out the PR template with exact validation evidence.
  6. Address review feedback until required checks and code-owner review pass.

Local Validation

Use the narrowest command that covers your change, then include the exact output or workflow link in the PR.

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run pytest

For UI changes:

cd frontends/ui
npm ci
npm run lint
npm run type-check
npm run test:ci
npm run build

For deployment changes, run the relevant Helm or compose validation and describe the environment used.

CI and Bot Workflow

AI-Q uses push-triggered GitHub Actions. Pull requests are mirrored by copy-pr-bot to pull-request/<PR number> branches after a maintainer or configured vetter comments /ok to test, and CI runs on those mirrored branches.

Repository owners, organization members, and collaborators can request NVSkills validation by commenting:

/nvskills-ci

Maintainers can request bot-driven merge with:

``...

Files:

  • docs/source/integration/agent-skills.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: For substantial behavior, auth, UI, or architecture changes, open a design discussion before coding rather than landing a large unreviewed change.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: Every commit must be signed off with git commit -s -m and include a Signed-off-by: Your Name <youremail.com> trailer. Commits without sign-off may be rejected.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: Keep PRs scoped: no unrelated files, no accidental generated artifacts, no secrets. Provide validation evidence (commands run and results).
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: pre-commit enforces linting, formatting, secret detection, link checking, and skill validation. Install it and let it run before pushing.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: Stay within the AI-Q repository. Do not edit adjacent repositories (e.g., NeMo-Relay) as part of AI-Q changes. Treat sources/* as independent packages: prefer the smallest change scoped to the package being touched.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:26.711Z
Learning: Backend code should be organized under src/aiq_agent/. Data-source and tool packages should be under sources/. Frontends and tooling under frontends/. Configs, deployment, and docs under configs/, deploy/, and docs/.
Learnt from: CR
Repo: NVIDIA-AI-Blueprints/aiq

Timestamp: 2026-06-15T18:27:29.501Z
Learning: Maintain comprehensive documentation of all agent implementations with their capabilities and integration patterns

Comment thread docs/source/integration/agent-skills.md Outdated
@copy-pr-bot

copy-pr-bot Bot commented Jun 15, 2026

Copy link
Copy Markdown

/ok to test

@AjayThorve, there was an error processing your request: E1

See the following link for more information: https://docs.gha-runners.nvidia.com/cpr/e/1/

@AjayThorve

Copy link
Copy Markdown
Member

/nvskills-ci

Signed-off-by: Eli Fajardo <efajardo@nvidia.com>
@AjayThorve

Copy link
Copy Markdown
Member

/ok to test d6055ee

@efajardo-nv
efajardo-nv merged commit 1dbed5d into NVIDIA-AI-Blueprints:develop Jun 15, 2026
19 of 22 checks passed
@efajardo-nv
efajardo-nv deleted the devskills-foundation branch June 15, 2026 22:05
zhongxuanwang-nv added a commit to zhongxuanwang-nv/aiq that referenced this pull request Jun 23, 2026
…ainer skill artifacts

The maintainer skill set (.agents/skills/) shipped in NVIDIA-AI-Blueprints#269/NVIDIA-AI-Blueprints#277 carried a few
documentation defects found while auditing it against the live AI-Q config
schema and the sibling NeMo-Relay skill set. Documentation-only; no skills are
added or removed.

- aiq-add-data-source: correct the data_source_registry YAML example to match
  DataSourceEntry / DataSourceRegistryConfig and the working configs -- use the
  `data_sources` instance name, drop the non-existent `category` field, and list
  `tools` as plain function-instance-name strings (not `_type:` mappings). Add
  the missing `ruff format --check` to the validation block.
- aiq-add-data-source: replace the dangling `aiq-ui-change` reference (no such
  skill) with a generic frontends/ui note.
- aiq-prepare-pr, aiq-release-qa: remove stray `</content>` artifacts left at
  the end of three skill files.
- aiq-release-qa: the npm "only these scripts exist" claim was inaccurate
  (package.json defines many more); reword to recommend the canonical checks
  without asserting exhaustiveness.
- docs/integration/agent-skills.md, .agents/skills/README.md: list all four
  maintainer skills and all four .claude/skills maintainer symlinks.

Validation: scripts/validate_skills.py (6 skills OK), pytest
tests/test_agent_skills.py (4 passed), and pre-commit (detect-secrets,
validate-skills, markdown-link-check) on the changed files all pass.

Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
cdgamarose-nv pushed a commit that referenced this pull request Jun 23, 2026
…ainer skill artifacts (#281)

The maintainer skill set (.agents/skills/) shipped in #269/#277 carried a few
documentation defects found while auditing it against the live AI-Q config
schema and the sibling NeMo-Relay skill set. Documentation-only; no skills are
added or removed.

- aiq-add-data-source: correct the data_source_registry YAML example to match
  DataSourceEntry / DataSourceRegistryConfig and the working configs -- use the
  `data_sources` instance name, drop the non-existent `category` field, and list
  `tools` as plain function-instance-name strings (not `_type:` mappings). Add
  the missing `ruff format --check` to the validation block.
- aiq-add-data-source: replace the dangling `aiq-ui-change` reference (no such
  skill) with a generic frontends/ui note.
- aiq-prepare-pr, aiq-release-qa: remove stray `</content>` artifacts left at
  the end of three skill files.
- aiq-release-qa: the npm "only these scripts exist" claim was inaccurate
  (package.json defines many more); reword to recommend the canonical checks
  without asserting exhaustiveness.
- docs/integration/agent-skills.md, .agents/skills/README.md: list all four
  maintainer skills and all four .claude/skills maintainer symlinks.

Validation: scripts/validate_skills.py (6 skills OK), pytest
tests/test_agent_skills.py (4 passed), and pre-commit (detect-secrets,
validate-skills, markdown-link-check) on the changed files all pass.

Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
@AjayThorve AjayThorve added this to the v2.2 milestone Jul 7, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Aug 20, 2026
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIQ2.2 enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants