|
13 | 13 | KNOWN_BACKENDS, |
14 | 14 | ) |
15 | 15 | from kernels.cli.init import run_init, parse_kernel_name |
| 16 | +from kernels.cli.skills import add_skill |
16 | 17 | from kernels.cli.versions import print_kernel_versions |
17 | 18 | from kernels.cli.doc import generate_readme_for_kernel |
18 | 19 | from kernels.kernel_card_utils import ( |
@@ -98,6 +99,53 @@ def main(): |
98 | 99 | ) |
99 | 100 | upload_parser.set_defaults(func=upload_kernels) |
100 | 101 |
|
| 102 | + skills_parser = subparsers.add_parser( |
| 103 | + "skills", |
| 104 | + help="Install kernels specific skills for agents like Claude, Codex, and OpenCode", |
| 105 | + ) |
| 106 | + skills_subparsers = skills_parser.add_subparsers(required=True) |
| 107 | + skills_add_parser = skills_subparsers.add_parser( |
| 108 | + "add", |
| 109 | + help="Install the cuda-kernels skill for an AI assistant", |
| 110 | + ) |
| 111 | + skills_add_parser.add_argument( |
| 112 | + "--claude", |
| 113 | + action="store_true", |
| 114 | + help="Install for Claude.", |
| 115 | + ) |
| 116 | + skills_add_parser.add_argument( |
| 117 | + "--codex", |
| 118 | + action="store_true", |
| 119 | + help="Install for Codex.", |
| 120 | + ) |
| 121 | + skills_add_parser.add_argument( |
| 122 | + "--opencode", |
| 123 | + action="store_true", |
| 124 | + help="Install for OpenCode.", |
| 125 | + ) |
| 126 | + skills_add_parser.add_argument( |
| 127 | + "--global", |
| 128 | + "-g", |
| 129 | + dest="global_", |
| 130 | + action="store_true", |
| 131 | + help=( |
| 132 | + "Install globally (user-level) instead of in the current project " |
| 133 | + "directory." |
| 134 | + ), |
| 135 | + ) |
| 136 | + skills_add_parser.add_argument( |
| 137 | + "--dest", |
| 138 | + type=Path, |
| 139 | + default=None, |
| 140 | + help="Install into a custom destination (path to skills directory).", |
| 141 | + ) |
| 142 | + skills_add_parser.add_argument( |
| 143 | + "--force", |
| 144 | + action="store_true", |
| 145 | + help="Overwrite existing skills in the destination.", |
| 146 | + ) |
| 147 | + skills_add_parser.set_defaults(func=add_skill) |
| 148 | + |
101 | 149 | lock_parser = subparsers.add_parser("lock", help="Lock kernel revisions") |
102 | 150 | lock_parser.add_argument( |
103 | 151 | "project_dir", |
@@ -156,6 +204,17 @@ def main(): |
156 | 204 | ) |
157 | 205 | benchmark_parser.add_argument("--iterations", type=int, default=100) |
158 | 206 | benchmark_parser.add_argument("--warmup", type=int, default=10) |
| 207 | + benchmark_parser.add_argument( |
| 208 | + "--visual", |
| 209 | + type=str, |
| 210 | + default=None, |
| 211 | + help="Save visual outputs using this base path (e.g., --visual bench creates bench_light.svg and bench_dark.svg variants)", |
| 212 | + ) |
| 213 | + benchmark_parser.add_argument( |
| 214 | + "--rasterized", |
| 215 | + action="store_true", |
| 216 | + help="Output PNG and GIF formats instead of SVG", |
| 217 | + ) |
159 | 218 | benchmark_parser.set_defaults(func=run_benchmark) |
160 | 219 |
|
161 | 220 | init_parser = subparsers.add_parser( |
@@ -356,4 +415,6 @@ def run_benchmark(args): |
356 | 415 | warmup=args.warmup, |
357 | 416 | output=args.output, |
358 | 417 | print_json=args.json, |
| 418 | + visual=args.visual, |
| 419 | + rasterized=args.rasterized, |
359 | 420 | ) |
0 commit comments