Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"description": "Vstack portable workflows and engineering principles for Claude Code.",
"description": "Evidence-led engineering workflows to plan, build, review, and ship software, with shared thinking, orchestration, and collaboration principles.",
"name": "vllnt-stack",
"owner": {
"name": "vllnt"
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Unreleased

## 0.1.0-canary.2

- Add a Claude plugin icon owned by this repository (`assets/claude-icon.svg`) and a clearer shared plugin and Claude marketplace description, both through the generator.

- Record Claude Code installation of `0.1.0-canary.1` from the public GitHub marketplace source; skill invocation behavior remains unverified.

## 0.1.0-canary.1
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Then start a new chat and invoke a namespaced skill such as `/vstack:plan-work`.
| `upstream.lock.json` | Trusted upstream repository and immutable commit |
| `VERSION` | Shared distribution version |
| `scripts/sync.py` | Standard-library generator and read-only drift check |
| `assets/claude-icon.svg` | Claude plugin icon, copied into the Claude package as `.claude-plugin/icon.svg` |
| `plugins/claude/` | Generated Claude Code native plugin |
| `plugins/codex/` | Generated portable Agent Plugin for Codex |
| `plugins/cursor/` | Generated Cursor native plugin and principles rule |
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.0-canary.1
0.1.0-canary.2
10 changes: 10 additions & 0 deletions assets/claude-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions plugins/claude/.claude-plugin/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions plugins/claude/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"author": {
"name": "vllnt"
},
"description": "Vstack portable workflows and engineering principles.",
"description": "Evidence-led engineering workflows to plan, build, review, and ship software, with shared thinking, orchestration, and collaboration principles.",
"homepage": "https://github.com/vllnt/stack",
"keywords": [
"workflows",
Expand All @@ -13,5 +13,5 @@
"license": "MIT",
"name": "vstack",
"repository": "https://github.com/vllnt/stack",
"version": "0.1.0-canary.1"
"version": "0.1.0-canary.2"
}
3 changes: 2 additions & 1 deletion plugins/claude/SOURCE.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"files": {
".claude-plugin/plugin.json": "029df1dbf5659bdedbc95b13a5c14c41957984dfee6b77b86e6b54cb742a2de1",
".claude-plugin/icon.svg": "dc3b420724330eed1296c63c5c6d3290fa031d0eceb39180a2258f6992c76108",
".claude-plugin/plugin.json": "0919a260d3a18cb7ff5af325773db6fe870ca9530707d40321c440e4405ee147",
"LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559",
"skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8",
"skills/build-landing-page/SKILL.md": "b08e4963d6149f3647b28a0d9dccdc8793812abab95a1d081d93699e142de0f0",
Expand Down
2 changes: 1 addition & 1 deletion plugins/codex/SOURCE.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"files": {
"LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559",
"plugin.json": "01f8bb9782de6474631228eaff7938845536ec3e87b5d8ec8fe3008dea678448",
"plugin.json": "49d516ebfeb52c9e1822809a2a3297383049163540f5bcf22f025238ce3adb32",
"skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8",
"skills/build-landing-page/SKILL.md": "b08e4963d6149f3647b28a0d9dccdc8793812abab95a1d081d93699e142de0f0",
"skills/build-landing-page/references/copywriting-formulas.md": "6d19f6166e1badcfdda0af4f8b303160e94ee6e6149321157e12849654cc013e",
Expand Down
4 changes: 2 additions & 2 deletions plugins/codex/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
"author": {
"name": "vllnt"
},
"description": "Vstack portable workflows and engineering principles.",
"description": "Evidence-led engineering workflows to plan, build, review, and ship software, with shared thinking, orchestration, and collaboration principles.",
"license": "MIT",
"name": "vstack",
"version": "0.1.0-canary.1"
"version": "0.1.0-canary.2"
}
4 changes: 2 additions & 2 deletions plugins/cursor/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"author": {
"name": "vllnt"
},
"description": "Vstack portable workflows and engineering principles.",
"description": "Evidence-led engineering workflows to plan, build, review, and ship software, with shared thinking, orchestration, and collaboration principles.",
"license": "MIT",
"name": "vstack",
"version": "0.1.0-canary.1"
"version": "0.1.0-canary.2"
}
2 changes: 1 addition & 1 deletion plugins/cursor/SOURCE.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"files": {
".cursor-plugin/plugin.json": "04856abc090a6a763556b93285974a550c3018ade4002f656c91b0e5623f1068",
".cursor-plugin/plugin.json": "1cc6f42293e41b85702cc04ca4aa89022eb0783f9a543af886f04f4f952b8f4f",
"LICENSE": "24ba061a4603738ddd5105ef4abc198eeded5ac7efce23b360561816f4dd6559",
"rules/vstack-principles.mdc": "5234bc0506e0a328d6163cd83785d2f37dd1fc23ef84287d71e03b92459e064a",
"skills/build-landing-page/README.md": "46a280eadac8962180cf3f0c42eb0e845a3b0156a644569182d932881e1d51f8",
Expand Down
9 changes: 7 additions & 2 deletions scripts/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
ROOT = Path(__file__).resolve().parents[1]
UPSTREAM = "https://github.com/vllnt/skills.git"
REPOSITORY = "https://github.com/vllnt/stack"
DESCRIPTION = ("Evidence-led engineering workflows to plan, build, review, and ship software, "
"with shared thinking, orchestration, and collaboration principles.")
CLAUDE_ICON = ROOT / "assets" / "claude-icon.svg"
HOSTS = ("claude", "codex", "cursor")
PRINCIPLES = tuple(f"vllnt-{name}-principles" for name in ("thinking", "orchestration", "collaboration"))
MAX_ARCHIVE = 32 * 1024 * 1024
Expand Down Expand Up @@ -220,7 +223,7 @@ def build(files: dict[str, bytes], lock: dict, version: str) -> dict[str, bytes]
output = {}
for host in HOSTS:
manifest = {"name": "vstack", "version": version,
"description": "Vstack portable workflows and engineering principles.",
"description": DESCRIPTION,
"author": {"name": "vllnt"}, "license": "MIT"}
if host == "claude":
manifest.update({"homepage": REPOSITORY, "repository": REPOSITORY,
Expand All @@ -230,6 +233,8 @@ def build(files: dict[str, bytes], lock: dict, version: str) -> dict[str, bytes]
manifest_path = {"claude": ".claude-plugin/plugin.json", "codex": "plugin.json",
"cursor": ".cursor-plugin/plugin.json"}[host]
package = {**skills, "LICENSE": files["LICENSE"], manifest_path: encoded(manifest)}
if host == "claude":
package[".claude-plugin/icon.svg"] = CLAUDE_ICON.read_bytes()
if host == "cursor":
package["rules/vstack-principles.mdc"] = rule
package["SOURCE.json"] = encoded({"upstream": lock, "files": {
Expand All @@ -239,7 +244,7 @@ def build(files: dict[str, bytes], lock: dict, version: str) -> dict[str, bytes]
catalog = {"name": "vllnt-stack", "owner": {"name": "vllnt"},
"plugins": [{"name": "vstack", "source": f"./plugins/{host}"}]}
if host == "claude":
catalog["description"] = "Vstack portable workflows and engineering principles for Claude Code."
catalog["description"] = DESCRIPTION
output[f".{host}-plugin/marketplace.json"] = encoded(catalog)
output[".agents/plugins/marketplace.json"] = encoded({
"name": "vllnt-stack", "interface": {"displayName": "Vstack"},
Expand Down
1 change: 1 addition & 0 deletions tests/test_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def test_deterministic_standalone_packages_and_provenance(self):
self.assertEqual(package["skills/test-work/SKILL.md"], files["workflows/test-work/SKILL.md"])
self.assertEqual("rules/vstack-principles.mdc" in package, host == "cursor")
self.assertEqual(package["LICENSE"], files["LICENSE"])
self.assertEqual(".claude-plugin/icon.svg" in package, host == "claude")
claude = json.loads(first[".claude-plugin/marketplace.json"])
codex = json.loads(first[".agents/plugins/marketplace.json"])
cursor = json.loads(first[".cursor-plugin/marketplace.json"])
Expand Down
Loading