chore: move skill into SKILL.md (#55)

* chore: move skill into SKILL.md By following the [skill spec](https://agentskills.io), and putting the skill definition in a SKILL.md file, the Colab skill will be installable via community tools, e.g. `npx skills install ...` and indices like https://skills.sh/ * chore: move SKILL.md into a skills/ dir * docs: added install instruction to SKILL.md

Mark McDonald committed Jun 18, 2026 at 02:02 UTC 0e22a02373807f08b0f11b560c5f552761ac0328
4 files changed +15 -5
pyproject.toml
+1 -1
@@ -61,7 +61,7 @@ packages = ["src/colab_cli"]
61
62 [tool.hatch.build.targets.wheel.force-include]
63 "README.md" = "colab_cli/README.md"
64 -"COLAB_SKILL.md" = "colab_cli/COLAB_SKILL.md"
64 +"skills/colab-operator/SKILL.md" = "colab_cli/SKILL.md"
65
66 [tool.uv]
67 package = true
skills/colab-operator/SKILL.md renamed
+10
@@ -1,7 +1,17 @@
1 +---
2 +name: colab-operator
3 +description: Operate Google Colab environments via the `colab` CLI. Use when asked to create or manage GPU/TPU sessions, run Python/shell on a remote Colab VM, sync files, automate environment setup (packages, auth, Drive), or export session history.
4 +---
5 +
6 # Skill: Colab Session Operator
7
8 Operate Google Colab environments via the `colab` CLI: provision GPU/TPU sessions, run Python/shell on the VM, sync files, and capture work as notebooks.
9
10 +## Installation
11 +
12 +If the user does not already have the `colab` tool installed, it can be acquired
13 +by running `uv tool install google-colab-cli` or `pip install google-colab-cli`.
14 +
15 ## When to activate
16 - Creating or managing TPU/GPU sessions.
17 - Running Python or shell on a remote Colab VM.
src/colab_cli/commands/utility.py
+2 -2
@@ -417,8 +417,8 @@ def readme():
417
418
419 def skill():
420 - """Print the bundled COLAB_SKILL.md file"""
421 - _print_resource("COLAB_SKILL.md")
420 + """Print the bundled SKILL.md file"""
421 + _print_resource("SKILL.md")
422
423
424 def register(app: typer.Typer):
tests/test_readme.py
+2 -2
@@ -52,7 +52,7 @@ def test_skill_from_resources(mock_resources):
52 mock_skill.read_text.return_value = "Fake SKILL content"
53
54 def joinpath_side_effect(name):
55 - if name == "COLAB_SKILL.md":
55 + if name == "SKILL.md":
56 return mock_skill
57 return MagicMock(is_file=MagicMock(return_value=False))
58
@@ -62,7 +62,7 @@ def test_skill_from_resources(mock_resources):
62 assert result.exit_code == 0
63 assert result.output.strip() == "Fake SKILL content"
64 mock_resources.assert_called_once_with("colab_cli")
65 - mock_resources.return_value.joinpath.assert_called_with("COLAB_SKILL.md")
65 + mock_resources.return_value.joinpath.assert_called_with("SKILL.md")
66
67
68 def test_readme_fallback_to_file(mock_resources):