Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills
711 changes: 0 additions & 711 deletions .agents/skills/cutile-autotuning/SKILL.md

This file was deleted.

2 changes: 1 addition & 1 deletion .claude/skills
60 changes: 32 additions & 28 deletions .github/scripts/check_spdx_headers.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,12 @@
)
# Default SPDX license identifier line for the main repo (MIT).
SPDX_LICENSE = "SPDX-License-Identifier: MIT"
# SPDX license identifier line used for skill files (under ``.agents/skills/``
# and the ``.claude/skills`` symlink). These files are dual-licensed under
# CC-BY-4.0 (documentation) AND Apache-2.0 (source code) per the NVIDIA
# Skills Publishing Onboarding guide and the OSRB-approved CC-BY-4.0-Apache2
# Dual License pattern.
# SPDX license identifier line used for skill content files (under
# ``skills/``, the canonical location; also accessible via the
# ``.agents/skills`` and ``.claude/skills`` backward-compatibility symlinks).
# These files are dual-licensed under CC-BY-4.0 (documentation) AND
# Apache-2.0 (source code) per the OSRB-approved dual-license pattern; the
# SPDX expression uses ``AND`` to reflect the legal scope.
SPDX_LICENSE_SKILLS = "SPDX-License-Identifier: CC-BY-4.0 AND Apache-2.0"

# Regex pattern to validate SPDX copyright lines with any valid year or year range
Expand All @@ -50,21 +51,23 @@
# Public / exportable code (default): MIT only — matches the repo-wide license
# for everything that is not a dual-licensed agent skill.
#
# Skill content (under ``.agents/skills/``): the dual-licensed combination
# ``CC-BY-4.0 AND Apache-2.0`` only. We deliberately do not accept MIT here
# so that the gate catches any skill file that was authored before the
# relicensing or imported from elsewhere with a stale header.
# Skill content files (under ``skills/``, non-SKILL.md): dual-licensed
# ``CC-BY-4.0 AND Apache-2.0`` per OSRB approval. The NV-BASE validator only
# inspects SKILL.md frontmatter (Tier 1), so the SPDX ``AND`` expression in
# source-file headers is not seen by the validator and remains the legally
# accurate scope marker.
ALLOWED_LICENSES_DEFAULT: Tuple[str, ...] = ("MIT",)
ALLOWED_LICENSES_SKILLS: Tuple[str, ...] = ("CC-BY-4.0 AND Apache-2.0",)

# Directory names (anywhere under root) to skip entirely.
#
# ``.agents`` and ``.claude`` are skipped from the default walker because
# they are dual-licensed and therefore cannot use the default MIT header.
# Skill files under those directories are processed separately via
# :func:`iter_skill_files` and :func:`iter_skill_content_files`, both of
# which target ``.agents/skills/`` (the canonical path; ``.claude/skills``
# is a symlink to ``../.agents/skills`` for agent-tool compatibility).
# ``skills``, ``.agents`` and ``.claude`` are skipped from the default walker
# because they are dual-licensed and therefore cannot use the default MIT
# header. Skill files are processed separately via :func:`iter_skill_files`
# and :func:`iter_skill_content_files`, both of which target the canonical
# ``skills/`` path. ``.agents/skills`` and ``.claude/skills`` are
# backward-compatibility symlinks pointing to ``../skills``; walking only
# the canonical ``skills/`` avoids double-processing the same files.
SKIP_DIRS = {
".git",
"__pycache__",
Expand All @@ -75,6 +78,7 @@
".egg-info",
"dist",
"build",
"skills",
".agents",
".claude",
}
Expand Down Expand Up @@ -196,7 +200,7 @@ def should_skip_file(file_path: Path, root_dir: Path) -> bool:


# License field to insert into SKILL.md (and other frontmatter .md) files
# under ``.agents/skills/``. These files are dual-licensed; the YAML
# under ``skills/``. These files are dual-licensed; the YAML
# ``license:`` field carries the same SPDX expression as the in-file SPDX
# comment used for non-frontmatter files.
SKILL_LICENSE_LINE = "license: CC-BY-4.0 AND Apache-2.0"
Expand All @@ -207,7 +211,7 @@ def should_skip_file(file_path: Path, root_dir: Path) -> bool:


def iter_skill_files(root_dir: Path) -> Iterator[Path]:
"""Yield .md files with YAML frontmatter under .agents/skills/.
"""Yield .md files with YAML frontmatter under skills/.

This includes SKILL.md files and any other .md files that start with
``---`` frontmatter (e.g. sub-skill definitions). All yielded files are
Expand All @@ -217,12 +221,12 @@ def iter_skill_files(root_dir: Path) -> Iterator[Path]:
that :func:`iter_skill_content_files` can give them a standard SPDX
comment header instead.

Note: ``.claude/skills`` is a symlink to ``../.agents/skills`` for
backward compatibility with agents that hard-code the ``.claude/`` path.
Walking the canonical ``.agents/skills/`` path avoids double-processing
the same files via the symlink.
Note: ``.agents/skills`` and ``.claude/skills`` are symlinks to
``../skills`` for backward compatibility with agents that hard-code the
older paths. Walking the canonical ``skills/`` path avoids
double-processing the same files via the symlinks.
"""
skills_dir = root_dir / ".agents" / "skills"
skills_dir = root_dir / "skills"
if not skills_dir.is_dir():
return
for dirpath, _dirnames, filenames in os.walk(skills_dir):
Expand Down Expand Up @@ -314,7 +318,7 @@ def _has_yaml_frontmatter(path: Path) -> bool:


def iter_skill_content_files(root_dir: Path) -> Iterator[Path]:
"""Yield .py and ``SKILL.md`` files under .agents/skills/ for SPDX headers.
"""Yield .py and ``SKILL.md`` files under skills/ for SPDX headers.

.md files with YAML frontmatter (starting with ``---``) are handled by
:func:`iter_skill_files` using the frontmatter ``license:`` approach.
Expand All @@ -331,7 +335,7 @@ def iter_skill_content_files(root_dir: Path) -> Iterator[Path]:
``SKILL.md`` that has not yet been migrated to YAML frontmatter, so the
skill itself always advertises its license one way or another.
"""
skills_dir = root_dir / ".agents" / "skills"
skills_dir = root_dir / "skills"
if not skills_dir.is_dir():
return
for dirpath, _dirnames, filenames in os.walk(skills_dir):
Expand Down Expand Up @@ -568,14 +572,14 @@ def action_write(root_dir: Path) -> int:
print(f"Added header to: {file_path.relative_to(root_dir)}")
modified_count += 1

# Handle SKILL.md (and other frontmatter .md) files under .agents/skills/.
# Handle SKILL.md (and other frontmatter .md) files under skills/.
# These carry the dual-license expression in the YAML ``license:`` field.
for skill_md in iter_skill_files(root_dir):
if add_skill_license(skill_md, license_line=SKILL_LICENSE_LINE):
print(f"Added/updated license in frontmatter: {skill_md.relative_to(root_dir)}")
modified_count += 1

# Handle .py and non-frontmatter .md files under .agents/skills/.
# Handle .py and non-frontmatter .md files under skills/.
# These are dual-licensed under CC-BY-4.0 AND Apache-2.0.
for content_file in iter_skill_content_files(root_dir):
comment_style = get_comment_style(content_file)
Expand Down Expand Up @@ -603,7 +607,7 @@ def action_check(root_dir: Path) -> int:
if not check_file(file_path):
missing_headers.append(file_path)

# Check SKILL.md (and other frontmatter .md) files under .agents/skills/.
# Check SKILL.md (and other frontmatter .md) files under skills/.
for skill_md in iter_skill_files(root_dir):
try:
with open(skill_md, "r", encoding="utf-8") as f:
Expand All @@ -613,7 +617,7 @@ def action_check(root_dir: Path) -> int:
except Exception as e:
print(f"Error reading {skill_md}: {e}", file=sys.stderr)

# Check .py and non-frontmatter .md files under .agents/skills/. These
# Check .py and non-frontmatter .md files under skills/. These
# must carry the dual-license SPDX expression.
for content_file in iter_skill_content_files(root_dir):
if not check_file(content_file, allowed_licenses=ALLOWED_LICENSES_SKILLS):
Expand Down
7 changes: 4 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,10 @@ To accept your contribution, we need a signed Contributor License Agreement (CLA
3. Email the signed CLA to `TileGym@nvidia.com` with subject: `TileGym CLA Submission`.
4. Wait for confirmation from the TileGym team before your PR can be merged.

### 5. Signing your work (DCO) — required for `.agents/skills/` contributions
### 5. Signing your work (DCO) — required for `skills/` contributions

Files under `.agents/skills/` (and the `.claude/skills/` symlink) are dual-licensed under
Files under `skills/` (also accessible via the `.agents/skills/` and `.claude/skills/`
backward-compatibility symlinks) are dual-licensed under
**CC-BY-4.0 AND Apache-2.0** (see [`LICENSE`](LICENSE)). All contributions to the
dual-licensed agent-skills content must be signed off via the
[Developer Certificate of Origin](https://developercertificate.org/) (DCO).
Expand All @@ -159,7 +160,7 @@ dual-licensed agent-skills content must be signed off via the

By signing off on a commit, you certify that the contribution is your original work, or
that you have rights to submit it under the same license, or a compatible license.
Any commit touching files under `.agents/skills/` that is not signed off will not be accepted.
Any commit touching files under `skills/` (or its `.agents/skills/` / `.claude/skills/` symlinks) that is not signed off will not be accepted.

#### How to sign off

Expand Down
26 changes: 15 additions & 11 deletions LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,31 @@ This repository is distributed under two licenses:
repository.

2. The Agent License (CC-BY-4.0 AND Apache-2.0), set out in Section B
below, applies only to files located under the `.agents/` and
`.claude/` directories (recursively), if present in this repository.
below, applies only to files located under the `skills/` directory
(the canonical location), and equivalently under the `.agents/skills/`
and `.claude/skills/` paths (which are backward-compatibility symlinks
pointing to `skills/`), recursively, if present in this repository.

For any file located under `.agents/` or `.claude/`, both licenses nominally
apply; in the event of any conflict between them for those files, the Agent
License in Section B controls. All other files in the repository are
governed solely by the MIT License in Section A.
For any file located under `skills/`, `.agents/skills/`, or `.claude/skills/`,
both licenses nominally apply; in the event of any conflict between them for
those files, the Agent License in Section B controls. All other files in the
repository are governed solely by the MIT License in Section A.

The Agent License additionally travels with the files it covers: it continues
to apply to any copy, clone, relocation, or redistribution of those files,
including installations into different directories used by other agent tools
(for example, to support Codex or similar). The Agent License scope follows
the files themselves, not only the original paths listed above.

If the `.agents/` or `.claude/` directories do not exist in a given checkout
of this repository, the scoping clauses above are inert for that checkout
and the MIT License in Section A governs the entire checkout on its own.
If the `skills/`, `.agents/`, or `.claude/` directories do not exist in a
given checkout of this repository, the scoping clauses above are inert for
that checkout and the MIT License in Section A governs the entire checkout
on its own.

--------------------------------------------------------------------------
SECTION A — MIT LICENSE
(APPLIES TO THE ENTIRE REPOSITORY EXCEPT FILES UNDER `.agents/` OR `.claude/`)
(APPLIES TO THE ENTIRE REPOSITORY EXCEPT FILES UNDER `skills/`,
`.agents/skills/`, OR `.claude/skills/`)
--------------------------------------------------------------------------

SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Expand All @@ -52,7 +56,7 @@ DEALINGS IN THE SOFTWARE.

--------------------------------------------------------------------------
SECTION B — AGENT LICENSE (CC-BY-4.0 AND Apache-2.0)
(APPLIES ONLY TO FILES UNDER `.agents/` AND `.claude/`)
(APPLIES ONLY TO FILES UNDER `skills/`, `.agents/skills/`, AND `.claude/skills/`)
--------------------------------------------------------------------------

Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Expand Down
37 changes: 37 additions & 0 deletions skills/adding-cutile-kernel/skill-card.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
## Description: <br>
Add a new cuTile GPU kernel operator to TileGym, covering dispatch registration in ops.py, cuTile backend implementation, __init__.py exports, test creation, and benchmark in tests/benchmark. <br>

This skill is ready for commercial/non-commercial use. <br>

## Owner: NVIDIA <br>

### License/Terms of Use: <br>
CC-BY-4.0 AND Apache-2.0 <br>
## Use Case: <br>
Developers and engineers use this skill to add new cuTile GPU kernel operators to the TileGym library, following the standardized workflow for dispatch registration, backend implementation, testing, and benchmarking. <br>

### Deployment Geography for Use: <br>
Global <br>

## Known Risks and Mitigations: <br>
Risk: Review before execution as proposals could introduce incorrect or misleading guidance into skills. <br>
Mitigation: Review and scan skill before deployment. <br>

## Reference(s): <br>
- [TileGym Repository](https://github.com/NVIDIA/TileGym) <br>


## Skill Output: <br>
**Output Type(s):** [Code, Files, Shell commands] <br>
**Output Format:** [Python source files and pytest/benchmark scripts] <br>
**Output Parameters:** [1D] <br>
**Other Properties Related to Output:** [None] <br>

## Skill Version(s): <br>
v1.3.0-13-g2385245 (source: git tag) <br>

## Ethical Considerations: <br>
NVIDIA believes Trustworthy AI is a shared responsibility and we have established policies and practices to enable development for a wide array of AI applications. When downloaded or used in accordance with our terms of service, developers should work with their internal team to ensure this skill meets requirements for the relevant industry and use case and addresses unforeseen product misuse. <br>

(For Release on NVIDIA Platforms Only) <br>
Please report quality, risk, security vulnerabilities or NVIDIA AI Concerns [here](https://app.intigriti.com/programs/nvidia/nvidiavdp/detail). <br>
1 change: 1 addition & 0 deletions skills/adding-cutile-kernel/skill.oms.sig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiYWRkaW5nLWN1dGlsZS1rZXJuZWwiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjhiNDAyYmY2MWM1NGEyYmRjMjRlZDhiYmU1ZDc3MTgwYTYzODIyZTFlYzY5MmFmOGYwOTU2M2Y4YzZhMjllYyIKICAgICAgfQogICAgfQogIF0sCiAgInByZWRpY2F0ZVR5cGUiOiAiaHR0cHM6Ly9tb2RlbF9zaWduaW5nL3NpZ25hdHVyZS92MS4wIiwKICAicHJlZGljYXRlIjogewogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJTS0lMTC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI2ZmUxODZlZDllNWNmOTc2ZGEyMmM4ZThlMGM1ODYzYTNkN2E3ZDA2MzczYjVjYjczZDFlNThjNDNkODQzNWU0IgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJkaWdlc3QiOiAiMDYxNDBiYjIyMDVjYWMxY2RlYjFkYzdhMWY1YjY1ODg2ZGU2MDRjM2ZjNDBjZTA3NzZmMWViMzUzZTQ4ODExZCIKICAgICAgfQogICAgXSwKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlLAogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGlnbm9yZSIsCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIiwKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXQiCiAgICAgIF0KICAgIH0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMFapGhY++LtZosIT7EtxG5wHSFuNA56Dx/vz9DmxzRxnVnHsU8bAmk2nGymc1oc/QwIwCFgbtbp6gfT7Op92jmEDLtU2XJH2WQrQ+Sq3ndIRkoUsRoh4gatHMEwFMHXADLOG","keyid":""}]}}
Loading
Loading