everything-gemini 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,3 +40,10 @@ jobs:
40
40
  LICENSE
41
41
  README.md
42
42
  CHANGELOG.md
43
+
44
+ - name: Publish to NPM
45
+ if: env.NPM_TOKEN != ''
46
+ run: npm publish --access public
47
+ env:
48
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
49
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,8 @@
1
+ {
2
+ "recommendations": [
3
+ "redhat.vscode-yaml",
4
+ "timonwong.shellcheck",
5
+ "esbenp.prettier-vscode",
6
+ "yzhang.markdown-all-in-one"
7
+ ]
8
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python"
3
+ }
package/CHANGELOG.md CHANGED
@@ -4,6 +4,54 @@ All notable changes to **Everything Gemini (`everything-gemini`)** will be docum
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.2.0] - 2026-10-15
8
+
9
+ ### Added
10
+ - **30 Progressive Disclosure Skills Milestone**:
11
+ - **`agent-evals`**: Automated evaluation pipelines, LLM-as-a-judge rubrics, golden test datasets, and regression testing.
12
+ - **`docker-compose-orchestrator`**: Multi-container local environments (Postgres + pgvector, Redis), healthcheck dependency wiring, and persistent volumes.
13
+ - **`graphql-architect`**: Schema-first GraphQL APIs, DataLoader N+1 query batching, and Relay cursor-based pagination.
14
+ - **Enterprise Security Policy**: Added [`SECURITY.md`](SECURITY.md) establishing formal vulnerability disclosure workflows.
15
+ - **IDE Extensions**: Added [`.vscode/extensions.json`](.vscode/extensions.json) for developer workspace onboarding.
16
+
17
+ ---
18
+
19
+ ## [1.1.1] - 2026-10-15
20
+
21
+ ### Added
22
+ - **Social Media Preview Engine**: Rich Open Graph (`og:*`) and Twitter Card (`twitter:*`) metadata embedded in `docs/index.html` for rich link unfurling on social platforms.
23
+ - **Turnkey Launch & Marketing Kit**: Added [`docs/LAUNCH_KIT.md`](docs/LAUNCH_KIT.md) featuring viral launch tweets, a 4-part thread, Reddit discussions, and Hacker News (Show HN) copy.
24
+ - **Enhanced CLI Catalog Discovery**: `everything-gemini list` now dynamically scans and highlights namespaced skills packaged within domain plugins.
25
+ - **Automated NPM Release CI**: Integrated automated npm publishing within `.github/workflows/release.yml` with provenance.
26
+
27
+ ---
28
+
29
+ ## [1.1.0] - 2026-10-15
30
+
31
+ ### Added
32
+ - **27 Progressive Disclosure Skills Milestone**:
33
+ - **`github-ops`**: End-to-end GitHub automation, PR generation, code review triage, and semantic releases via `gh` CLI and GitHub MCP.
34
+ - **`ai-first-engineering`**: Requirement decomposition, executable acceptance criteria, and blast-radius containment.
35
+ - **`rag-architect`**: RAG engineering with `text-embedding-004`, hybrid search (dense + BM25), and Gemini re-ranking.
36
+ - **`gemini-function-calling`**: Production tool schemas, Pydantic output formatting, parallel execution, and error recovery envelopes.
37
+ - **Interactive Web Catalog Expansion**: Updated [https://salmandev.github.io/everything-gemini/](https://salmandev.github.io/everything-gemini/) to feature all 27 progressive skills with instant search and category filtering.
38
+ - **Enhanced CLI Commands**: Added `everything-gemini init` for quickstart setup, `everything-gemini remove <type> <name>` for component uninstallation, and `everything-gemini test-skill <name>` for validation.
39
+
40
+ ---
41
+
42
+ ## [1.0.2] - 2026-10-15
43
+
44
+ ### Added
45
+ - **Interactive Web Showcase**: Launched official documentation and interactive skill catalog at [https://salmandev.github.io/everything-gemini/](https://salmandev.github.io/everything-gemini/).
46
+ - **Component Granular Management**: Added `everything-gemini add <type> <name>` to install individual skills, agents, or plugins into any workspace on demand.
47
+ - **Skill Quality Gate**: Added `everything-gemini test-skill <name>` validating frontmatter boundary syntax, descriptions, and script execution bits.
48
+ - **Python SDK Multi-Agent Orchestration**: Complete runnable pipeline example in `examples/python-sdk/` showcasing programmatic leasing of Planner and Reviewer subagents with token streaming.
49
+ - **Frontier Cloud & AI Skills**: Integrated `cloudflare-workers`, `supabase-architect`, `stripe-integration`, and `kubernetes-operator`.
50
+
51
+ ### Changed
52
+ - CLI dynamically resolves package version from `package.json`.
53
+ - Updated comprehensive CLI documentation across README and repository references.
54
+
7
55
  ---
8
56
 
9
57
  ## [1.0.1] - 2026-10-15
package/README.md CHANGED
@@ -2,15 +2,19 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
+ <img src="assets/banner.jpg" alt="Everything Gemini Banner" width="100%" style="border-radius: 12px; margin-bottom: 16px;" />
6
+
7
+ [![Live Showcase](https://img.shields.io/badge/Live_Showcase-Visit_Catalog-00e5ff.svg)](https://salmandev.github.io/everything-gemini/)
8
+ [![npm version](https://img.shields.io/npm/v/everything-gemini.svg?color=cb3837)](https://www.npmjs.com/package/everything-gemini)
9
+ [![CI](https://github.com/salmandev/everything-gemini/actions/workflows/ci.yml/badge.svg)](https://github.com/salmandev/everything-gemini/actions/workflows/ci.yml)
5
10
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
6
11
  [![Antigravity](https://img.shields.io/badge/Google-Antigravity-4285F4.svg)](https://antigravity.google)
7
- [![Version](https://img.shields.io/badge/version-1.0.1-emerald.svg)](package.json)
8
12
  [![Status](https://img.shields.io/badge/status-active-success.svg)](https://github.com/salmandev/everything-gemini)
9
13
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
10
14
 
11
15
  **The open-source agent harness, multi-agent orchestrator, and performance ecosystem for Google Gemini & Antigravity.**
12
16
 
13
- [Quickstart](#-quickstart) • [What is everything-gemini?](#-what-is-everything-gemini) • [Architecture](#-architecture--internals) • [Customization Catalog](#-customization-catalog) • [Surfaces Guide](#-the-4-antigravity-surfaces) • [Contributing](CONTRIBUTING.md)
17
+ [Live Interactive Showcase](https://salmandev.github.io/everything-gemini/) • [Quickstart](#-quickstart) • [What is everything-gemini?](#-what-is-everything-gemini) • [Architecture](#-architecture--internals) • [Customization Catalog](#-customization-catalog) • [Surfaces Guide](#-the-4-antigravity-surfaces) • [Contributing](CONTRIBUTING.md)
14
18
 
15
19
  </div>
16
20
 
@@ -141,7 +145,7 @@ everything-gemini/
141
145
  ├── agents/ # Scoped subagent fleet (Planner, Reviewer, Architect, etc.)
142
146
  ├── scripts/ # Automated installers and harness validators
143
147
  ├── plugins/ # Reusable modular plugins (web-fullstack, python-ai, security)
144
- ├── skills/ # 21+ Progressive disclosure skills
148
+ ├── skills/ # 30 Progressive disclosure skills (28 core + 2 plugins)
145
149
  ├── rules/ # Contextual guidelines & standards
146
150
  ├── hooks/ # Event-driven lifecycle hooks (GeminiShield, Auto-lint)
147
151
  ├── mcp/ # Production-ready MCP server blueprints
@@ -171,9 +175,22 @@ Skills in Antigravity are lazy-loaded runbooks. Only their YAML frontmatter (`na
171
175
 
172
176
  - **[`gemini-multimodal`](skills/gemini-multimodal/SKILL.md)**: Native visual reasoning over mockups, diagrams, and automated WebP browser recordings.
173
177
  - **[`context-caching`](skills/context-caching/SKILL.md)**: 1M-2M token context optimization, static prefix caching, and repository indexing.
178
+ - **[`gemini-grounding`](skills/gemini-grounding/SKILL.md)**: Real-time Google Search grounding, live documentation retrieval, and fact-checking.
179
+ - **[`rag-architect`](skills/rag-architect/SKILL.md)**: RAG pipeline design, AST semantic chunking, hybrid vector-keyword retrieval, and Gemini re-ranking.
180
+ - **[`gemini-function-calling`](skills/gemini-function-calling/SKILL.md)**: Production function declarations, structured JSON output schemas (Pydantic), and parallel tool dispatch.
181
+ - **[`ai-first-engineering`](skills/ai-first-engineering/SKILL.md)**: Requirement decomposition, executable acceptance criteria (BDD), and blast-radius containment.
182
+ - **[`agent-evals`](skills/agent-evals/SKILL.md)**: Automated evaluation pipelines, LLM-as-a-judge scoring, golden test datasets, and prompt regression testing.
183
+ - **[`github-ops`](skills/github-ops/SKILL.md)**: GitHub workflow automation, PR generation, code review triage, and semantic releases with `gh` CLI & GitHub MCP.
174
184
  - **[`subagent-handoff`](skills/subagent-handoff/SKILL.md)**: Multi-agent task delegation protocol, scoped contexts, and report synthesis.
175
185
  - **[`api-craftsman`](skills/api-craftsman/SKILL.md)**: REST, OpenAPI 3.1 specifications, gRPC protos, and RFC 7807 error envelopes.
176
186
  - **[`database-architect`](skills/database-architect/SKILL.md)**: Zero-downtime migrations, concurrent indexing, and ACID schema modeling.
187
+ - **[`fullstack-nextjs`](skills/fullstack-nextjs/SKILL.md)**: Next.js App Router, React Server Components (RSC), hydration error diagnosis, and Server Actions.
188
+ - **[`graphql-architect`](skills/graphql-architect/SKILL.md)**: Schema-first GraphQL APIs, DataLoader N+1 query batching, and Relay cursor pagination.
189
+ - **[`supabase-architect`](skills/supabase-architect/SKILL.md)**: Row Level Security (RLS) policies, pgvector embeddings, and edge function workflows.
190
+ - **[`cloudflare-workers`](skills/cloudflare-workers/SKILL.md)**: Serverless edge functions, Wrangler v3, D1 SQL, and KV low-latency storage.
191
+ - **[`docker-compose-orchestrator`](skills/docker-compose-orchestrator/SKILL.md)**: Multi-container local environments (Postgres + pgvector, Redis) with healthchecks.
192
+ - **[`kubernetes-operator`](skills/kubernetes-operator/SKILL.md)**: Production k8s manifests, HPA autoscaling, zero-downtime rolling updates, and health probes.
193
+ - **[`stripe-integration`](skills/stripe-integration/SKILL.md)**: Webhook signature verification, idempotent payments, and customer portal session flows.
177
194
  - **[`devops-pipeline`](skills/devops-pipeline/SKILL.md)**: Multi-stage Dockerfiles and caching GitHub Actions CI/CD workflows.
178
195
  - **[`root-cause-debugger`](skills/root-cause-debugger/SKILL.md)**: Regression diagnosis using binary search (`git bisect`) and minimal reproduction harnesses.
179
196
  - **[`tdd-workflow`](skills/tdd-workflow/SKILL.md)**: Red-Green-Refactor loop with automated test runners.
@@ -183,11 +200,6 @@ Skills in Antigravity are lazy-loaded runbooks. Only their YAML frontmatter (`na
183
200
  - **[`git-craftsman`](skills/git-craftsman/SKILL.md)**: Enforces conventional commits, atomic diffs, and clean PR descriptions.
184
201
  - **[`security-audit`](skills/security-audit/SKILL.md)**: Scans for credentials in commit history and audits dependency risks.
185
202
  - **[`performance-profiler`](skills/performance-profiler/SKILL.md)**: Identifies CPU/memory bottlenecks, analyzes database queries, and critical paths.
186
- - **[`gemini-grounding`](skills/gemini-grounding/SKILL.md)**: Real-time Google Search grounding, live documentation retrieval, and fact-checking.
187
- - **[`supabase-architect`](skills/supabase-architect/SKILL.md)**: Row Level Security (RLS) policies, pgvector embeddings, and edge function workflows.
188
- - **[`cloudflare-workers`](skills/cloudflare-workers/SKILL.md)**: Serverless edge functions, Wrangler v3, D1 SQL, and KV low-latency storage.
189
- - **[`kubernetes-operator`](skills/kubernetes-operator/SKILL.md)**: Production k8s manifests, HPA autoscaling, zero-downtime rolling updates, and health probes.
190
- - **[`stripe-integration`](skills/stripe-integration/SKILL.md)**: Webhook signature verification, idempotent payments, and customer portal session flows.
191
203
  - **[`continuous-learning`](skills/continuous-learning/SKILL.md)**: Codifies corrections and developer feedback into enduring Knowledge Items.
192
204
 
193
205
  ### 2. Lifecycle Hooks (`hooks/`)
@@ -281,13 +293,31 @@ The zero-dependency `everything-gemini` CLI manages your configurations effortle
281
293
  # List all available skills, rules, hooks, and plugins
282
294
  ./bin/everything-gemini list
283
295
 
296
+ # Initialize everything-gemini in current workspace
297
+ ./bin/everything-gemini init
298
+
284
299
  # Add a specific skill to your active workspace
285
300
  ./bin/everything-gemini add skill tdd-workflow
286
301
 
302
+ # Remove a skill from your active workspace
303
+ ./bin/everything-gemini remove skill tdd-workflow
304
+
287
305
  # Add a specific plugin
288
306
  ./bin/everything-gemini add plugin web-fullstack
289
307
 
290
- # Validate all schemas and frontmatter
308
+ # Test and validate a specific skill's frontmatter and scripts
309
+ ./bin/everything-gemini test-skill gemini-multimodal
310
+
311
+ # View detailed playbook overview and triggers for a skill
312
+ ./bin/everything-gemini info agent-evals
313
+
314
+ # Scaffold a new progressive-disclosure skill
315
+ ./bin/everything-gemini new-skill my-custom-skill
316
+
317
+ # Scaffold a new scoped subagent
318
+ ./bin/everything-gemini new-agent my-worker-agent
319
+
320
+ # Validate all schemas, hooks, and frontmatter
291
321
  ./bin/everything-gemini validate
292
322
  ```
293
323
 
package/SECURITY.md ADDED
@@ -0,0 +1,38 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We actively provide security patches and dependency updates for the following versions:
6
+
7
+ | Version | Supported |
8
+ | :--- | :--- |
9
+ | 1.x | :white_check_mark: |
10
+ | < 1.0 | :x: |
11
+
12
+ ---
13
+
14
+ ## Reporting a Vulnerability
15
+
16
+ The Everything Gemini team takes the security of agent systems, lifecycle hooks, and model interactions seriously.
17
+
18
+ If you discover a security vulnerability, prompt injection bypass in safety gates, or credential exposure vector:
19
+
20
+ 1. **Do NOT open a public GitHub issue.**
21
+ 2. Report the vulnerability privately via **GitHub Security Advisories** on the repository:
22
+ - Go to [https://github.com/salmandev/everything-gemini/security/advisories](https://github.com/salmandev/everything-gemini/security/advisories)
23
+ - Click **"Report a vulnerability"**
24
+ 3. Alternatively, email the maintainer directly at `salman@salmandev.com` with the subject:
25
+ `[SECURITY] Everything Gemini Vulnerability Report`.
26
+
27
+ Please include:
28
+ - A clear description of the vulnerability and attack vector.
29
+ - Minimal reproduction steps, sample prompts, or script commands.
30
+ - Potential impact on agent runtimes or host filesystem integrity.
31
+
32
+ ---
33
+
34
+ ## Response Timeline
35
+
36
+ - **Initial Acknowledgment**: Within 48 hours of receipt.
37
+ - **Triage & Assessment**: Within 5 business days.
38
+ - **Remediation & Patch**: Published as an expedited patch release (`v1.x.y`).
Binary file
@@ -15,6 +15,11 @@ const GLOBAL_CONFIG_DIR = path.join(os.homedir(), '.gemini', 'config');
15
15
  const WORKSPACE_DIR = process.cwd();
16
16
  const AGENTS_DIR = path.join(WORKSPACE_DIR, '.agents');
17
17
 
18
+ let VERSION = '1.0.1';
19
+ try {
20
+ VERSION = require(path.join(REPO_ROOT, 'package.json')).version || '1.0.1';
21
+ } catch (_) {}
22
+
18
23
  // ANSI Colors
19
24
  const RESET = '\x1b[0m';
20
25
  const BOLD = '\x1b[1m';
@@ -27,7 +32,7 @@ const GRAY = '\x1b[90m';
27
32
 
28
33
  function printBanner() {
29
34
  console.log(`
30
- ${CYAN}${BOLD}🪐 Everything Gemini (${GREEN}everything-gemini${CYAN}) v1.0.1${RESET}
35
+ ${CYAN}${BOLD}🪐 Everything Gemini (${GREEN}everything-gemini${CYAN}) v${VERSION}${RESET}
31
36
  ${GRAY}The open-source agent harness & multi-agent orchestrator for Google Gemini & Antigravity${RESET}
32
37
  `);
33
38
  }
@@ -39,10 +44,14 @@ function printHelp() {
39
44
  console.log(`${BOLD}COMMANDS:${RESET}`);
40
45
  console.log(` ${GREEN}doctor${RESET} Inspect system, AGY surfaces, and configuration health`);
41
46
  console.log(` ${GREEN}install${RESET} [options] Install everything-gemini profiles into workspace or globally`);
47
+ console.log(` ${GREEN}init${RESET} [options] Initialize everything-gemini in current workspace`);
42
48
  console.log(` ${GREEN}list${RESET} Show all available skills, rules, hooks, and plugins`);
43
49
  console.log(` ${GREEN}new-skill${RESET} <name> Scaffold a new progressive-disclosure skill`);
44
50
  console.log(` ${GREEN}new-agent${RESET} <name> Scaffold a new scoped subagent specification`);
45
- console.log(` ${GREEN}add${RESET} <type> <name> Add a specific skill, rule, or plugin to workspace`);
51
+ console.log(` ${GREEN}add${RESET} <type> <name> Add a specific skill, agent, or plugin to workspace`);
52
+ console.log(` ${GREEN}remove${RESET} <type> <name> Remove a specific skill, agent, or plugin from workspace`);
53
+ console.log(` ${GREEN}test-skill${RESET} <name> Validate a specific skill frontmatter & scripts`);
54
+ console.log(` ${GREEN}info${RESET} <skill-name> Display detailed instructions and trigger for a skill`);
46
55
  console.log(` ${GREEN}validate${RESET} Run self-test on frontmatter, JSON schemas & hooks`);
47
56
  console.log(` ${GREEN}help${RESET} Show this help message\n`);
48
57
  console.log(`${BOLD}OPTIONS for 'install':${RESET}`);
@@ -141,7 +150,33 @@ function listComponents() {
141
150
  const match = content.match(/description:\s*>?-?\s*([^\n\r]+)/);
142
151
  if (match) desc = match[1].trim();
143
152
  }
144
- console.log(` ${BOLD}${skill.padEnd(24)}${RESET} ${GRAY}${desc}${RESET}`);
153
+ console.log(` ${BOLD}${skill.padEnd(28)}${RESET} ${GRAY}${desc}${RESET}`);
154
+ }
155
+ }
156
+
157
+ // Also scan plugin skills
158
+ const pluginsDirForSkills = path.join(REPO_ROOT, 'plugins');
159
+ if (fs.existsSync(pluginsDirForSkills)) {
160
+ const plugins = fs.readdirSync(pluginsDirForSkills, { withFileTypes: true })
161
+ .filter(d => d.isDirectory())
162
+ .map(d => d.name);
163
+ for (const plugin of plugins) {
164
+ const pSkillsDir = path.join(pluginsDirForSkills, plugin, 'skills');
165
+ if (fs.existsSync(pSkillsDir)) {
166
+ const pSkills = fs.readdirSync(pSkillsDir, { withFileTypes: true })
167
+ .filter(d => d.isDirectory())
168
+ .map(d => d.name);
169
+ for (const skill of pSkills) {
170
+ const skillMd = path.join(pSkillsDir, skill, 'SKILL.md');
171
+ let desc = 'No description';
172
+ if (fs.existsSync(skillMd)) {
173
+ const content = fs.readFileSync(skillMd, 'utf8');
174
+ const match = content.match(/description:\s*>?-?\s*([^\n\r]+)/);
175
+ if (match) desc = match[1].trim();
176
+ }
177
+ console.log(` ${BOLD}${skill.padEnd(28)}${RESET} ${CYAN}[${plugin}]${RESET} ${GRAY}${desc}${RESET}`);
178
+ }
179
+ }
145
180
  }
146
181
  }
147
182
 
@@ -472,6 +507,217 @@ Return structured report to parent agent:
472
507
  console.log(` 📄 ${targetFile}\n`);
473
508
  }
474
509
 
510
+ function addComponent(type, name) {
511
+ if (!type || !name) {
512
+ console.error(`${RED}Usage: everything-gemini add <skill|agent|plugin> <name>${RESET}`);
513
+ process.exit(1);
514
+ }
515
+
516
+ const cleanName = name.trim().toLowerCase();
517
+ const targetWorkspace = path.join(WORKSPACE_DIR, '.agents');
518
+ if (!fs.existsSync(targetWorkspace)) {
519
+ fs.mkdirSync(targetWorkspace, { recursive: true });
520
+ }
521
+
522
+ if (type === 'skill') {
523
+ const src = path.join(REPO_ROOT, 'skills', cleanName);
524
+ if (!fs.existsSync(src)) {
525
+ console.error(`${RED}Skill '${cleanName}' not found in catalog.${RESET}`);
526
+ process.exit(1);
527
+ }
528
+ const dest = path.join(targetWorkspace, 'skills', cleanName);
529
+ copyRecursiveSync(src, dest);
530
+ console.log(`${GREEN}✔ Added skill '${cleanName}' to ${dest}${RESET}`);
531
+ } else if (type === 'agent') {
532
+ const src = path.join(REPO_ROOT, 'agents', `${cleanName}.md`);
533
+ if (!fs.existsSync(src)) {
534
+ console.error(`${RED}Agent '${cleanName}' not found in catalog.${RESET}`);
535
+ process.exit(1);
536
+ }
537
+ const destDir = path.join(targetWorkspace, 'agents');
538
+ fs.mkdirSync(destDir, { recursive: true });
539
+ fs.copyFileSync(src, path.join(destDir, `${cleanName}.md`));
540
+ console.log(`${GREEN}✔ Added agent '${cleanName}' to ${destDir}${RESET}`);
541
+ } else if (type === 'plugin') {
542
+ const src = path.join(REPO_ROOT, 'plugins', cleanName);
543
+ if (!fs.existsSync(src)) {
544
+ console.error(`${RED}Plugin '${cleanName}' not found in catalog.${RESET}`);
545
+ process.exit(1);
546
+ }
547
+ const dest = path.join(targetWorkspace, 'plugins', cleanName);
548
+ copyRecursiveSync(src, dest);
549
+ console.log(`${GREEN}✔ Added plugin '${cleanName}' to ${dest}${RESET}`);
550
+ } else {
551
+ console.error(`${RED}Unknown type '${type}'. Use: skill, agent, or plugin.${RESET}`);
552
+ process.exit(1);
553
+ }
554
+ }
555
+
556
+ function removeComponent(type, name) {
557
+ if (!type || !name) {
558
+ console.error(`${RED}Usage: everything-gemini remove <skill|agent|plugin> <name>${RESET}`);
559
+ process.exit(1);
560
+ }
561
+
562
+ const cleanName = name.trim().toLowerCase();
563
+ const targetWorkspace = path.join(WORKSPACE_DIR, '.agents');
564
+
565
+ if (type === 'skill') {
566
+ const dest = path.join(targetWorkspace, 'skills', cleanName);
567
+ if (!fs.existsSync(dest)) {
568
+ console.log(`${YELLOW}Skill '${cleanName}' is not installed in ${dest}${RESET}`);
569
+ return;
570
+ }
571
+ fs.rmSync(dest, { recursive: true, force: true });
572
+ console.log(`${GREEN}✔ Removed skill '${cleanName}' from workspace.${RESET}`);
573
+ } else if (type === 'agent') {
574
+ const dest = path.join(targetWorkspace, 'agents', `${cleanName}.md`);
575
+ if (!fs.existsSync(dest)) {
576
+ console.log(`${YELLOW}Agent '${cleanName}' is not installed in ${dest}${RESET}`);
577
+ return;
578
+ }
579
+ fs.unlinkSync(dest);
580
+ console.log(`${GREEN}✔ Removed agent '${cleanName}' from workspace.${RESET}`);
581
+ } else if (type === 'plugin') {
582
+ const dest = path.join(targetWorkspace, 'plugins', cleanName);
583
+ if (!fs.existsSync(dest)) {
584
+ console.log(`${YELLOW}Plugin '${cleanName}' is not installed in ${dest}${RESET}`);
585
+ return;
586
+ }
587
+ fs.rmSync(dest, { recursive: true, force: true });
588
+ console.log(`${GREEN}✔ Removed plugin '${cleanName}' from workspace.${RESET}`);
589
+ } else {
590
+ console.error(`${RED}Unknown type '${type}'. Use: skill, agent, or plugin.${RESET}`);
591
+ process.exit(1);
592
+ }
593
+ }
594
+
595
+ function testSkill(name) {
596
+ if (!name) {
597
+ console.error(`${RED}Usage: everything-gemini test-skill <skill-name>${RESET}`);
598
+ process.exit(1);
599
+ }
600
+ const cleanName = name.trim().toLowerCase();
601
+ const skillDir = path.join(REPO_ROOT, 'skills', cleanName);
602
+ const skillMd = path.join(skillDir, 'SKILL.md');
603
+
604
+ if (!fs.existsSync(skillMd)) {
605
+ console.error(`${RED}✖ SKILL.md not found for skill '${cleanName}' at ${skillDir}${RESET}`);
606
+ process.exit(1);
607
+ }
608
+
609
+ const content = fs.readFileSync(skillMd, 'utf8');
610
+ console.log(`${BOLD}🔍 Validating skill: [${CYAN}${cleanName}${RESET}${BOLD}]...${RESET}`);
611
+
612
+ if (!content.startsWith('---')) {
613
+ console.error(` ${RED}✖ Missing YAML frontmatter start (---)${RESET}`);
614
+ process.exit(1);
615
+ }
616
+
617
+ const parts = content.split('---');
618
+ if (parts.length < 3) {
619
+ console.error(` ${RED}✖ Malformed YAML frontmatter boundary${RESET}`);
620
+ process.exit(1);
621
+ }
622
+
623
+ const frontmatter = parts[1];
624
+ const nameMatch = frontmatter.match(/name:\s*([^\n\r]+)/);
625
+ const descMatch = frontmatter.match(/description:\s*>?-?\s*([^\n\r]+)/);
626
+
627
+ if (!nameMatch) {
628
+ console.error(` ${RED}✖ Missing 'name' field in frontmatter${RESET}`);
629
+ process.exit(1);
630
+ }
631
+ console.log(` ${GREEN}✔${RESET} Name field: ${BOLD}${nameMatch[1].trim()}${RESET}`);
632
+
633
+ if (!descMatch) {
634
+ console.error(` ${RED}✖ Missing 'description' field in frontmatter${RESET}`);
635
+ process.exit(1);
636
+ }
637
+ console.log(` ${GREEN}✔${RESET} Description trigger: ${GRAY}${descMatch[1].trim()}${RESET}`);
638
+
639
+ const scriptsDir = path.join(skillDir, 'scripts');
640
+ if (fs.existsSync(scriptsDir)) {
641
+ const scripts = fs.readdirSync(scriptsDir).filter(f => f.endsWith('.sh'));
642
+ for (const s of scripts) {
643
+ const fullPath = path.join(scriptsDir, s);
644
+ const stat = fs.statSync(fullPath);
645
+ const isExec = (stat.mode & 0o111) !== 0;
646
+ if (!isExec) {
647
+ console.error(` ${RED}✖ Script ${s} is not executable. Run chmod +x${RESET}`);
648
+ process.exit(1);
649
+ }
650
+ console.log(` ${GREEN}✔${RESET} Script executable: ${s}`);
651
+ }
652
+ }
653
+
654
+ console.log(`\n${GREEN}${BOLD}✨ Skill '${cleanName}' passed all validation checks!${RESET}\n`);
655
+ }
656
+
657
+ function showSkillInfo(skillName) {
658
+ if (!skillName) {
659
+ console.error(`\n${RED}Error: Please specify a skill name.${RESET}`);
660
+ console.log(`Usage: everything-gemini info <skill-name>\n`);
661
+ process.exit(1);
662
+ }
663
+
664
+ const cleanName = skillName.trim().replace(/^skills\//, '');
665
+ let skillDir = path.join(REPO_ROOT, 'skills', cleanName);
666
+ let pluginName = null;
667
+
668
+ if (!fs.existsSync(skillDir)) {
669
+ const pluginsDir = path.join(REPO_ROOT, 'plugins');
670
+ if (fs.existsSync(pluginsDir)) {
671
+ const plugins = fs.readdirSync(pluginsDir, { withFileTypes: true })
672
+ .filter(d => d.isDirectory())
673
+ .map(d => d.name);
674
+ for (const p of plugins) {
675
+ const candidate = path.join(pluginsDir, p, 'skills', cleanName);
676
+ if (fs.existsSync(candidate)) {
677
+ skillDir = candidate;
678
+ pluginName = p;
679
+ break;
680
+ }
681
+ }
682
+ }
683
+ }
684
+
685
+ const skillMd = path.join(skillDir, 'SKILL.md');
686
+ if (!fs.existsSync(skillMd)) {
687
+ console.error(`\n${RED}Error: Skill '${cleanName}' not found in catalog.${RESET}\n`);
688
+ process.exit(1);
689
+ }
690
+
691
+ printBanner();
692
+ console.log(`${BOLD}📖 Skill Overview: ${CYAN}${cleanName}${RESET}`);
693
+ if (pluginName) {
694
+ console.log(`Source Plugin: ${YELLOW}${pluginName}${RESET}`);
695
+ }
696
+ console.log(`Path: ${GRAY}${skillMd}${RESET}\n`);
697
+
698
+ const content = fs.readFileSync(skillMd, 'utf8');
699
+ const parts = content.split('---');
700
+ if (parts.length >= 3) {
701
+ const frontmatter = parts[1];
702
+ const descMatch = frontmatter.match(/description:\s*>?-?\s*([^\n\r]+)/);
703
+ if (descMatch) {
704
+ console.log(`${BOLD}🎯 Trigger Description:${RESET}`);
705
+ console.log(` ${descMatch[1].trim()}\n`);
706
+ }
707
+
708
+ const body = parts.slice(2).join('---').trim();
709
+ const lines = body.split('\n').slice(0, 22);
710
+ console.log(`${BOLD}📋 Playbook Preview:${RESET}`);
711
+ console.log(lines.join('\n'));
712
+ if (body.split('\n').length > 22) {
713
+ console.log(`\n${GRAY}... (${body.split('\n').length - 22} more lines in ${skillMd})${RESET}`);
714
+ }
715
+ } else {
716
+ console.log(content.split('\n').slice(0, 25).join('\n'));
717
+ }
718
+ console.log('');
719
+ }
720
+
475
721
  // CLI Argument Parsing
476
722
  const args = process.argv.slice(2);
477
723
  const command = args[0] || 'help';
@@ -489,6 +735,20 @@ switch (command) {
489
735
  case 'new-agent':
490
736
  scaffoldAgent(args[1]);
491
737
  break;
738
+ case 'add':
739
+ addComponent(args[1], args[2]);
740
+ break;
741
+ case 'remove':
742
+ removeComponent(args[1], args[2]);
743
+ break;
744
+ case 'test-skill':
745
+ testSkill(args[1]);
746
+ break;
747
+ case 'info':
748
+ case 'show':
749
+ showSkillInfo(args[1]);
750
+ break;
751
+ case 'init':
492
752
  case 'install': {
493
753
  let profile = 'developer';
494
754
  let isGlobal = false;