chore: remove hello-world demo plugin

No longer needed — kyberforge plugin-create provides a bundled template that
serves as the canonical scaffold reference. Remove hello-world from marketplace
manifests and update docs accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 18:57:52 +00:00
parent 5dac52680f
commit d245807cae
15 changed files with 0 additions and 352 deletions

View File

@@ -4,11 +4,6 @@
"description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.", "description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.",
"version": "0.1.0", "version": "0.1.0",
"plugins": [ "plugins": [
{
"name": "hello-world",
"description": "A minimal example plugin to validate marketplace scaffolding.",
"source": "./plugins/hello-world"
},
{ {
"name": "kyberforge", "name": "kyberforge",
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.",

View File

@@ -4,11 +4,6 @@
"description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.", "description": "AI development skills for Claude Code and GitHub Copilot CLI — factory, design, implement, review, and cross-cutting workflows.",
"version": "0.1.0", "version": "0.1.0",
"plugins": [ "plugins": [
{
"name": "hello-world",
"description": "A minimal example plugin to validate marketplace scaffolding.",
"source": "./plugins/hello-world"
},
{ {
"name": "kyberforge", "name": "kyberforge",
"description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.", "description": "Skills and agents for creating, maintaining, and managing a Claude Code / Copilot CLI plugin marketplace.",

View File

@@ -17,7 +17,6 @@ A parallel workstream (not a numbered chunk) establishing the plugin distributio
**Phase 1 — marketplace scaffold and kyberforge plugin** ✅ complete (2026-06-20) **Phase 1 — marketplace scaffold and kyberforge plugin** ✅ complete (2026-06-20)
- `.claude-plugin/marketplace.json` and `.github/plugin/marketplace.json` — dual-path marketplace manifest (Claude Code + Copilot CLI) - `.claude-plugin/marketplace.json` and `.github/plugin/marketplace.json` — dual-path marketplace manifest (Claude Code + Copilot CLI)
- `plugins/hello-world/` — demo plugin validating scaffolding
- `plugins/kyberforge/` — marketplace management toolkit: `create-plugin`, `marketplace-architect`, `write-skill`, `write-eval` skills, bundled template (`assets/plugin-template/`), reference docs, scripts, and evals - `plugins/kyberforge/` — marketplace management toolkit: `create-plugin`, `marketplace-architect`, `write-skill`, `write-eval` skills, bundled template (`assets/plugin-template/`), reference docs, scripts, and evals
- `templates/plugin/` removed — bundled into `kyberforge` plugin; `docs/research/plugin-marketplace-architecture.md` moved into `plugins/kyberforge/docs/` - `templates/plugin/` removed — bundled into `kyberforge` plugin; `docs/research/plugin-marketplace-architecture.md` moved into `plugins/kyberforge/docs/`
- Skills `write-eval`, `write-skill`, `create-plugin`, `marketplace-architect` removed from `.agents/skills/` — now only available via `kyberforge` plugin install - Skills `write-eval`, `write-skill`, `create-plugin`, `marketplace-architect` removed from `.agents/skills/` — now only available via `kyberforge` plugin install

View File

@@ -31,7 +31,6 @@ ai-development/
├── .github/plugin/ ├── .github/plugin/
│ └── marketplace.json # Mirror of .claude-plugin/marketplace.json for Copilot CLI canonical path │ └── marketplace.json # Mirror of .claude-plugin/marketplace.json for Copilot CLI canonical path
├── plugins/ # Installable plugin units (each is a self-contained deployable) ├── plugins/ # Installable plugin units (each is a self-contained deployable)
│ ├── hello-world/ # Demo plugin validating marketplace scaffolding
│ └── kyberforge/ # Marketplace management toolkit (create-plugin, marketplace-architect, write-skill, write-eval) │ └── kyberforge/ # Marketplace management toolkit (create-plugin, marketplace-architect, write-skill, write-eval)
├── core/ # Provider-agnostic source of truth ├── core/ # Provider-agnostic source of truth
│ ├── AGENTS.md # Global always-on rules (Communication + Behavior); deployed to ~/.agents/AGENTS.md │ ├── AGENTS.md # Global always-on rules (Communication + Behavior); deployed to ~/.agents/AGENTS.md

View File

@@ -1,9 +0,0 @@
{
"name": "hello-world",
"displayName": "Hello World",
"description": "A complete scaffold demonstrating every cross-compatible plugin feature for the holocron marketplace.",
"author": { "name": "Your Name", "url": "https://github.com/your-org/ai-development" },
"homepage": "https://github.com/your-org/ai-development",
"license": "MIT",
"keywords": ["scaffold", "example", "holocron"]
}

View File

@@ -1,9 +0,0 @@
{
"mcpServers": {
"hello-world": {
"type": "stdio",
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/bin/mcp-server.js"]
}
}
}

View File

@@ -1,77 +0,0 @@
# hello-world
Complete scaffold plugin for the **holocron** marketplace. Every cross-compatible component
is included with a working stub. Copy this directory, rename it, and replace the stubs with
your actual content.
## Directory layout
```
hello-world/
├── plugin.json # Copilot CLI manifest — declares component paths
├── .claude-plugin/
│ └── plugin.json # Claude Code manifest — no component paths (uses defaults)
├── skills/
│ └── hello-world/
│ └── SKILL.md # ✅ identical for both tools
├── agents/
│ ├── hello-world.md # Claude Code agent (no frontmatter)
│ └── hello-world.agent.md # Copilot CLI agent (YAML frontmatter + tools:)
├── hooks/
│ └── hooks.json # Claude Code hooks (PostToolUse / PreToolUse events)
├── hooks.json # Copilot CLI hooks (session_start / session_end events)
├── .mcp.json # ✅ MCP server config — identical for both tools
└── README.md
```
## Cross-compatibility notes
| Component | Claude Code path | Copilot CLI path | Portable? |
|---|---|---|---|
| Plugin manifest | `.claude-plugin/plugin.json` | `plugin.json` at root | Ship both |
| Skills | `skills/<name>/SKILL.md` | `skills/<name>/SKILL.md` | ✅ Identical |
| Agents | `agents/<name>.md` | `agents/<name>.agent.md` | Ship both |
| Hooks | `hooks/hooks.json` | `hooks.json` at root | Ship both |
| MCP servers | `.mcp.json` at root | `.mcp.json` at root | ✅ Identical |
## Install via marketplace
```bash
# Claude Code
claude plugin marketplace add <owner>/ai-development
claude plugin install hello-world@holocron
# GitHub Copilot CLI
copilot plugin marketplace add <owner>/ai-development
copilot plugin install hello-world
```
## Local dev install
```bash
# Claude Code
claude --plugin-dir ./plugins/hello-world
# GitHub Copilot CLI
copilot plugin install ./plugins/hello-world
```
## Validate (Claude Code)
```bash
claude plugin validate ./plugins/hello-world
```
Copilot CLI has no validate command — run `copilot plugin install ./plugins/hello-world`
and check that `/skills list` and `/agent` surface the expected entries.
## Creating a new plugin from this scaffold
1. Copy `plugins/hello-world/` → `plugins/<your-plugin-name>/`
2. Update `name` in both `plugin.json` files
3. Replace `skills/hello-world/SKILL.md` with your skill(s)
4. Replace or remove `agents/` files — only include if your plugin ships an agent
5. Replace or remove `hooks/` files — only include if your plugin reacts to events
6. Replace or remove `.mcp.json` — only include if your plugin ships an MCP server
7. Add the new plugin to `.claude-plugin/marketplace.json`
8. Run `claude plugin validate ./plugins/<your-plugin-name>`

View File

@@ -1,13 +0,0 @@
---
name: hello-world
description: A demonstration agent for the holocron marketplace scaffold. Confirms agent loading works in GitHub Copilot CLI.
tools:
- read_file
- list_directory
---
You are a demonstration agent included in the `hello-world` scaffold plugin for the **holocron** marketplace.
When invoked, greet the user, confirm the agent is loaded, and list the components available in this plugin: skills (`skills/`), agents (`agents/`), hooks (`hooks.json`), and MCP servers (`.mcp.json`).
Replace this file with your agent's actual system prompt and instructions.

View File

@@ -1,10 +0,0 @@
---
name: hello-world
description: A demonstration agent for the holocron marketplace scaffold. Confirms agent loading works in Claude Code.
---
You are a demonstration agent included in the `hello-world` scaffold plugin for the **holocron** marketplace.
When invoked, greet the user, confirm the agent is loaded, and list the components available in this plugin: skills (`skills/`), agents (`agents/`), hooks (`hooks/hooks.json`), and MCP servers (`.mcp.json`).
Replace this file with your agent's actual system prompt and instructions.

View File

@@ -1,69 +0,0 @@
#!/usr/bin/env node
'use strict';
// Minimal MCP server — JSON-RPC 2.0 over stdio, no external dependencies.
// Exposes one tool: `say_hello`. Replace with your actual tools.
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin, terminal: false });
function send(obj) {
process.stdout.write(JSON.stringify(obj) + '\n');
}
const TOOLS = [
{
name: 'say_hello',
description: 'Say hello from the holocron marketplace hello-world plugin.',
inputSchema: {
type: 'object',
properties: {
name: { type: 'string', description: 'Name to greet (optional)' }
}
}
}
];
rl.on('line', (line) => {
let msg;
try { msg = JSON.parse(line); } catch { return; }
const { method, id, params } = msg;
if (method === 'initialize') {
send({
jsonrpc: '2.0', id,
result: {
protocolVersion: '2024-11-05',
capabilities: { tools: {} },
serverInfo: { name: 'hello-world', version: '1.0.0' }
}
});
} else if (method === 'notifications/initialized') {
// no response required
} else if (method === 'tools/list') {
send({ jsonrpc: '2.0', id, result: { tools: TOOLS } });
} else if (method === 'tools/call') {
const toolName = params?.name;
const args = params?.arguments ?? {};
if (toolName === 'say_hello') {
const greeting = args.name
? `Hello, ${args.name}! The holocron marketplace hello-world plugin is working.`
: 'Hello from the holocron marketplace hello-world plugin!';
send({ jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: greeting }] } });
} else {
send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${toolName}` } });
}
} else if (id !== undefined) {
send({ jsonrpc: '2.0', id, error: { code: -32601, message: 'Method not found' } });
}
});
process.on('SIGINT', () => process.exit(0));
process.on('SIGTERM', () => process.exit(0));

View File

@@ -1,8 +0,0 @@
{
"hooks": [
{
"event": "session_start",
"command": "echo '[hello-world] session started'"
}
]
}

View File

@@ -1,15 +0,0 @@
{
"hooks": {
"PostToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "echo '[hello-world] PostToolUse fired'"
}
]
}
]
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "hello-world",
"description": "A complete scaffold demonstrating every cross-compatible plugin feature for the holocron marketplace.",
"author": { "name": "Your Name", "email": "you@example.com" },
"license": "MIT",
"keywords": ["scaffold", "example", "holocron"],
"agents": "agents/",
"skills": ["skills/"],
"hooks": "hooks.json",
"mcpServers": ".mcp.json"
}

View File

@@ -1,13 +0,0 @@
---
name: hello-world
description: Prove the holocron marketplace plugin is installed and working. Use when the user says "/hello-world", "test plugin install", or "is the holocron marketplace working". Do NOT use for any real task.
metadata:
category: cross-cutting
---
Respond with exactly:
> Hello from the **holocron** marketplace! The `hello-world` plugin is installed and working.
> Run `claude plugin list` to see all installed plugins.
Nothing else.

View File

@@ -1,106 +0,0 @@
#!/usr/bin/env bash
# Tests for plugins/hello-world/bin/mcp-server.js
# Protocol: JSON-RPC 2.0 over stdio. Tests send input lines and assert on stdout.
set -euo pipefail
SERVER="$(cd "$(dirname "$0")/../bin" && pwd)/mcp-server.js"
PASS=0; FAIL=0
# ── helpers ──────────────────────────────────────────────────────────────────
assert_contains() {
local label="$1" expected="$2" actual="$3"
if echo "$actual" | grep -qF -- "$expected"; then
echo " PASS: $label"
PASS=$((PASS+1))
else
echo " FAIL: $label"
echo " expected to contain: $expected"
echo " got: $actual"
FAIL=$((FAIL+1))
fi
}
assert_not_contains() {
local label="$1" unexpected="$2" actual="$3"
if echo "$actual" | grep -qF -- "$unexpected"; then
echo " FAIL: $label"
echo " expected NOT to contain: $unexpected"
echo " got: $actual"
FAIL=$((FAIL+1))
else
echo " PASS: $label"
PASS=$((PASS+1))
fi
}
# Send newline-separated JSON lines to the server, capture stdout
run_server() {
printf '%s\n' "$@" | node "$SERVER" 2>/dev/null
}
# ── tests ────────────────────────────────────────────────────────────────────
echo "initialize"
OUT=$(run_server '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}},"id":1}')
assert_contains "returns protocolVersion" '"protocolVersion":"2024-11-05"' "$OUT"
assert_contains "returns capabilities" '"capabilities"' "$OUT"
assert_contains "returns serverInfo name" '"name":"hello-world"' "$OUT"
assert_contains "returns serverInfo version" '"version":"1.0.0"' "$OUT"
assert_contains "echoes id" '"id":1' "$OUT"
echo "notifications/initialized"
OUT=$(run_server '{"jsonrpc":"2.0","method":"notifications/initialized"}')
assert_not_contains "no response for notification" '"jsonrpc"' "$OUT"
echo "tools/list"
OUT=$(run_server \
'{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \
'{"jsonrpc":"2.0","method":"tools/list","id":2}')
assert_contains "lists say_hello tool" '"name":"say_hello"' "$OUT"
assert_contains "tool has description" '"description"' "$OUT"
assert_contains "tool has inputSchema" '"inputSchema"' "$OUT"
assert_contains "schema has name property" '"name"' "$OUT"
assert_contains "echoes id 2" '"id":2' "$OUT"
echo "tools/call say_hello — no args"
OUT=$(run_server \
'{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \
'{"jsonrpc":"2.0","method":"tools/call","params":{"name":"say_hello","arguments":{}},"id":3}')
assert_contains "generic greeting content" 'Hello from the holocron' "$OUT"
assert_contains "response has content array" '"content"' "$OUT"
assert_contains "content type is text" '"type":"text"' "$OUT"
echo "tools/call say_hello — with name"
OUT=$(run_server \
'{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \
'{"jsonrpc":"2.0","method":"tools/call","params":{"name":"say_hello","arguments":{"name":"Obi-Wan"}},"id":4}')
assert_contains "personalised greeting" 'Hello, Obi-Wan!' "$OUT"
assert_not_contains "not generic greeting" 'Hello from the holocron' "$OUT"
echo "tools/call — unknown tool"
OUT=$(run_server \
'{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' \
'{"jsonrpc":"2.0","method":"tools/call","params":{"name":"does_not_exist","arguments":{}},"id":5}')
assert_contains "error code -32601" '"code":-32601' "$OUT"
assert_contains "error field present" '"error"' "$OUT"
echo "unknown method with id"
OUT=$(run_server \
'{"jsonrpc":"2.0","method":"no_such_method","id":6}')
assert_contains "error returned" '"error"' "$OUT"
assert_contains "method not found code" '"code":-32601' "$OUT"
assert_contains "echoes id 6" '"id":6' "$OUT"
echo "invalid JSON — no crash, process continues"
OUT=$(run_server \
'this is not json' \
'{"jsonrpc":"2.0","method":"tools/list","id":7}')
assert_contains "valid request after bad input succeeds" '"id":7' "$OUT"
assert_not_contains "no error for bad json line" '"error"' "$OUT"
# ── summary ──────────────────────────────────────────────────────────────────
echo ""
echo "Results: $PASS passed, $FAIL failed"
[[ $FAIL -eq 0 ]] && exit 0 || exit 1