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
Expand Up @@ -8,7 +8,7 @@
{
"name": "opendirectory-gtm-skills",
"source": "./",
"description": "A collection of 57 agent skills for founders who hate marketing"
"description": "A collection of 61 agent skills for founders who hate marketing"
}
]
}
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "opendirectory-gtm-skills",
"version": "1.0.1",
"description": "A collection of 57 agent skills for founders who hate marketing",
"description": "A collection of 61 agent skills for founders who hate marketing",
"author": {
"name": "Varnan"
},
Expand Down
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
<br />

<div align="center">
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=20&duration=3000&pause=800&color=58A6FF&center=true&vCenter=true&width=620&height=50&lines=60+Agent+Skills;Works+with+Claude%2C+Codex%2C+Gemini+CLI%2C+Manus+AI;Agent+Skills+for+Founders+Who+Hate+Marketing;Install+in+seconds.+No+setup+required." alt="Typing SVG" />
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=20&duration=3000&pause=800&color=58A6FF&center=true&vCenter=true&width=620&height=50&lines=61+Agent+Skills;Works+with+Claude%2C+Codex%2C+Gemini+CLI%2C+Manus+AI;Agent+Skills+for+Founders+Who+Hate+Marketing;Install+in+seconds.+No+setup+required." alt="Typing SVG" />
</div>

<br />

<div align="center">

[![npm version](https://img.shields.io/npm/v/@opendirectory.dev/skills.svg?style=flat-square)](https://www.npmjs.com/package/@opendirectory.dev/skills)
[![Skills](https://img.shields.io/badge/skills-60-blue.svg?style=flat-square)](skills/)
[![Skills](https://img.shields.io/badge/skills-61-blue.svg?style=flat-square)](skills/)
[![Stars](https://img.shields.io/github/stars/Varnan-Tech/opendirectory?style=flat-square&color=yellow)](https://github.com/Varnan-Tech/opendirectory/stargazers)
[![Contributors](https://img.shields.io/github/contributors/Varnan-Tech/opendirectory?style=flat-square&color=orange)](https://github.com/Varnan-Tech/opendirectory/graphs/contributors)
[![Agents](https://img.shields.io/badge/agents-8-blueviolet.svg?style=flat-square)](#quick-start)
Expand All @@ -44,7 +44,7 @@ Or list all skills:
```bash
npx "@opendirectory.dev/skills" list
```
*60 specialized skills across GTM, growth, and developer tooling*
*61 specialized skills across GTM, growth, and developer tooling*

### 2. Pick your agent
```bash
Expand Down Expand Up @@ -248,7 +248,7 @@ Manus AI users can import a skill directly from its OpenDirectory skill page. Th

## All Skills

60 skills across GTM, growth automation, technical marketing, and developer tooling.
61 skills across GTM, growth automation, technical marketing, and developer tooling.

<!-- SKILLS_LIST_START -->

Expand Down Expand Up @@ -401,6 +401,11 @@ Manus AI users can import a skill directly from its OpenDirectory skill page. Th
<td>Give it your product URL. It finds your top 5 competitors, researches every press mention, podcast appearance, and community post across all of them, and tells you exactly which channels to pitch -- with the journalist's name, the angle that got your competitors featured, and a ready-to-send cold pitch for your product.</td>
<td><code>0.0.1</code></td>
</tr>
<tr>
<td><a href="skills/geo-gap-fixer"><code>geo-gap-fixer</code></a></td>
<td>Audit how often LLMs recommend your brand vs. competitors — then get a concrete action plan to fix the gaps.</td>
<td><code>1.0.0</code></td>
</tr>
<tr>
<td><a href="skills/gh-issue-to-demand-signal"><code>gh-issue-to-demand-signal</code></a></td>
<td>Give the skill a competitor's public GitHub repo URL. It fetches their open issues, filters noise locally, clusters into 6 demand categories using the AI already running the skill, scores by real engagement (reactions), detects ignored demand (high reactions + no response = your opportunity), and outputs a ranked demand gap report with a GTM messaging brief.</td>
Expand Down
11 changes: 11 additions & 0 deletions packages/cli/registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,17 @@
"version": "1.0.0",
"path": "skills/explain-this-pr"
},
{
"name": "geo-gap-fixer",
"description": "Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.",
"tags": [
"Branding",
"AI"
],
"author": "ajaycodesitbetter",
"version": "1.0.0",
"path": "skills/geo-gap-fixer"
},
{
"name": "gh-issue-to-demand-signal",
"description": "Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 deman...",
Expand Down
14 changes: 14 additions & 0 deletions skills/geo-gap-fixer/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# At least 2 of 4 API keys required.
# Missing keys are skipped gracefully — the script never crashes.

# OpenAI (gpt-4o)
OPENAI_API_KEY=sk-...

# Anthropic (claude-sonnet-4-6)
ANTHROPIC_API_KEY=sk-ant-...

# Google Gemini (gemini-2.5-flash)
GOOGLE_API_KEY=AI...

# Perplexity (sonar-pro)
PERPLEXITY_API_KEY=pplx-...
18 changes: 18 additions & 0 deletions skills/geo-gap-fixer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Runtime outputs — regenerated by the scripts
data/
report/

# User config (contains brand-specific info)
config.json

# Environment variables
.env

# Python
__pycache__/
*.pyc
*.pyo

# OS
.DS_Store
Thumbs.db
177 changes: 177 additions & 0 deletions skills/geo-gap-fixer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# geo-gap-fixer

**Audit how often LLMs recommend your brand vs. competitors — then get a concrete action plan to fix the gaps.**

## Why this skill exists
In 2026, buyers discover tools by asking ChatGPT, Claude, Gemini, and Perplexity *"what's the best X for Y?"* — not by Googling. If LLMs consistently recommend a competitor instead of you, your traditional SEO rank is irrelevant.

**geo-gap-fixer** is a free, open-source agent skill for GTM Intelligence that audits your Generative Engine Optimization (GEO) share-of-voice. It probes the LLMs, analyzes who gets recommended, and outputs a prioritized content backlog to fix the gaps.

> One skill run replaces a $200/month AI-monitoring SaaS subscription.

<!-- OPENDIRECTORY_INSTALL_START -->
## Install

### Option A: npx CLI (Recommended)

No global install. Always runs the latest version.

```bash
npx "@opendirectory.dev/skills" install geo-gap-fixer --target claude
```

### Option B: Claude Desktop App

<video src="https://github.com/user-attachments/assets/cea8b565-2002-4a87-8857-d902bfcfdc1c" controls width="100%"></video>

**Step 1: Download the skill from GitHub**

1. Copy the URL of this specific skill folder from your browser's address bar.
2. Go to [download-directory.github.io](https://download-directory.github.io/).
3. Paste the URL and click **Enter** to download.

**Step 2: Install in Claude**

1. Open your **Claude desktop app**.
2. Go to the sidebar on the left side and click on the **Customize** section.
3. Click on the **Skills** tab, then click on the **+** button to create a new skill.
4. Choose **Upload a skill**, then drag and drop the `.zip` file or extracted folder.

> **Note:** For some skills, the `SKILL.md` file might be located inside a subfolder. Always upload the specific folder that contains the `SKILL.md` file.

### Option C: Claude Code Native

Run these commands inside Claude Code:

```bash
/plugin marketplace add Varnan-Tech/opendirectory
/plugin install opendirectory-gtm-skills@opendirectory-marketplace
```

### Option D: Manus AI

<video src="https://github.com/user-attachments/assets/17cbee2a-9e17-4bd4-ac46-68e0e92ffab4" controls width="100%"></video>

[**Install in Manus AI**](https://manus.im/import-skills?githubUrl=https%3A%2F%2Fgithub.com%2FVarnan-Tech%2Fopendirectory%2Ftree%2Fmain%2Fskills%2Fgeo-gap-fixer&utm_source=opendirectory)

Manus AI users can import a skill directly from its OpenDirectory skill page. This is the easiest path when you want Manus to pull the skill from GitHub for you.

1. Open the skill you want from the [opendirectory homepage](https://opendirectory.dev).
2. In the install panel, select the **Manus AI** tab.
3. Click **Install in Manus AI** - this opens Manus with the skill GitHub URL already attached.
4. Confirm the import inside Manus AI.

> If your Manus workspace prefers file uploads, use the **Download** tab instead and upload the downloaded `.skill.zip` file inside Manus.
<!-- OPENDIRECTORY_INSTALL_END -->

---

## Sample Report Output

```markdown
### 1. Share of Voice (LLM Mention Rate)
| Brand | Mention Rate | Avg Rank | Win Rate | Assessment |
|-------|-------------|----------|----------|------------|
| **Linear** | **18.4%** | **4.2** | **5.3%** | 🔴 Critical: Brand is rarely recommended |
| Jira | 94.7% | 1.4 | 82.1% | 🟢 Dominant: Default recommendation |

### 5. GEO Action Plan
🔴 **Critical Priority: Fix Mention Rate (<30%)**
- Create dedicated "Best <Category> Tools in 2026" comparison content.
- Ensure your homepage explicitly answers: "Why use Linear for <Category>?"
```

---

## What You Get

| # | Output Section | Description |
|---|---------------|-------------|
| 1 | **Share-of-Voice Table** | Brand mention rate per LLM (% of prompts where you're mentioned), ranked |
| 2 | **Prompt-Level Loss Log** | Which exact prompts your brand lost and to whom |
| 3 | **Competitor Language Patterns** | What framing/keywords LLMs use for competitors that they don't use for you |
| 4 | **Citation Gap List** | Which domains get cited by LLMs instead of your site |
| 5 | **GEO Action Plan** | Prioritized fixes: FAQ pages, comparison pages, alternative pages, schema improvements, authority targets |

---

## Prerequisites

- **Python 3.10+**
- **At least 2 of 4 API keys** (missing providers are skipped gracefully)
- Dependencies: `pip install openai anthropic google-genai`

| Provider | Package | Model | Env Variable |
|----------|---------|-------|-------------|
| OpenAI | `openai` | gpt-4o | `OPENAI_API_KEY` |
| Anthropic | `anthropic` | claude-sonnet-4-6 | `ANTHROPIC_API_KEY` |
| Google | `google-genai` | gemini-2.5-flash | `GOOGLE_API_KEY` |
| Perplexity | `openai` (reused) | sonar-pro | `PERPLEXITY_API_KEY` |

> **Note**: Perplexity uses the OpenAI SDK with a different base URL, so only 3 packages are needed.

---

## Configuration (`config.json`)

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `brand_name` | string | ✅ | Your brand name (e.g., "Linear") |
| `competitors` | list | ✅ | 1–10 competitor brand names |
| `category` | string | ✅ | Product category (e.g., "project management tool for developers") |
| `buyer_intent_prompts` | list | ❌ | Custom prompts. Empty = auto-generate from templates |
| `target_llms` | list | ❌ | Which LLMs to probe. Default: all 4 |
| `website_url` | string | ❌ | Your website for citation gap analysis |

---

## Limitations (What this skill does NOT do)

- **Not a continuous monitor**: This is a point-in-time audit. Run it monthly to track progress.
- **Not for traditional SEO**: It does not track Google Blue Link rankings, domain authority, or keyword search volume.
- **Not deep NLP sentiment analysis**: Sentiment uses keyword proximity, not complex NLP models.
- **Not free to run**: While the tool is free, you pay the LLM API providers directly (typically ~$0.50–$2.00 per audit).

---

## Error Handling

All scripts are designed to fail clearly, not silently:

| Scenario | Behavior |
|----------|----------|
| Invalid JSON config | Exits with parse error and line number |
| Missing required fields | Exits listing exactly which fields are missing |
| No API keys set | Exits listing all 4 env variable names |
| Transient API failure | Retries with exponential backoff (2 attempts, 2s → 4s) |
| Persistent API failure | Skips that provider, continues with others |
| Zero responses collected | Exits non-zero after saving empty results |
| Missing upstream data file | Exits with instructions to run the previous script |

---

## File Structure

```
geo-gap-fixer/
├── README.md ← You are here
├── SKILL.md ← Agent instruction flow
├── .env.example ← API key template
├── .gitignore ← Excludes data/, report/, config.json
├── package.json ← OpenDirectory metadata
├── config.example.json ← Sample configuration
├── scripts/
│ ├── probe_llms.py ← Send prompts to LLM APIs
│ ├── analyze_results.py ← Extract mentions, rank, sentiment, citations
│ └── build_report.py ← Assemble the 5-section report
├── references/
│ ├── prompt_templates.md ← 20 default buyer-intent prompts
│ ├── scoring_rubric.md ← How metrics are calculated
│ └── output_format.md ← Sample report with realistic data
├── data/ ← Generated at runtime (gitignored)
│ ├── raw_responses.json
│ └── analysis.json
└── report/ ← Generated at runtime (gitignored)
├── geo_audit_report.md
└── geo_audit_report.json
```
91 changes: 91 additions & 0 deletions skills/geo-gap-fixer/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
name: geo-gap-fixer
description: "Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan."
category: "GTM Intelligence"
version: "1.0.0"
---

# GEO Gap Fixer

> Agent skill that audits LLM brand visibility and converts gaps into a
> concrete GEO content action plan.

---

## When to Use

Use this skill when a user wants to audit their Generative Engine Optimization (GEO) share-of-voice to know which LLM prompts their brand is losing, understand why competitors are recommended instead, and get a specific content fix plan.

**Do NOT use this skill for**: general SEO audits, paid ad optimization, or continuous social media monitoring. This is a point-in-time LLM visibility audit.

---

## Step 1: Inputs

To run the audit, the user must provide API keys and a configuration file. Ensure the following are set up:

1. **API Keys**: At least 2 of 4 keys must be set in the environment or `.env` file (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, `PERPLEXITY_API_KEY`).
2. **Dependencies**: `pip install openai anthropic google-genai`
3. **Config File**: `config.json` (copied from `config.example.json`) must contain:
- `brand_name` (string, required)
- `competitors` (list of strings, required, 1-10 entries)
- `category` (string, required)
- `buyer_intent_prompts` (list of strings, optional. If empty, 20 prompts are auto-generated)
- `target_llms` (list of strings, optional)
- `website_url` (string, optional)

---

## Step 2: Execution Pipeline

Run the following scripts in order. Stop and ask for clarification if any script fails.

1. **`python scripts/probe_llms.py`** (Optional: append `--dry-run` to test config without API calls)
- Sends buyer-intent prompts to the configured LLM APIs.
- Saves responses to `data/raw_responses.json`.

2. **`python scripts/analyze_results.py`**
- Analyzes raw responses for brand mentions, ranking, sentiment, and cited domains.
- Saves structured analysis to `data/analysis.json`.

3. **`python scripts/build_report.py`**
- Assembles the final 5-section GEO audit report.
- Saves to `report/geo_audit_report.md` and `report/geo_audit_report.json`.

---

## Step 3: Outputs & Interpretation

The primary output is `report/geo_audit_report.md`. Present its findings to the user.

**Key Sections to Interpret:**
1. **Share-of-Voice Table**: A mention rate below 30% is critical. Mention rate is the % of prompts where the brand is recommended.
2. **Prompt-Level Loss Log**: Which exact prompts the brand lost and to whom.
3. **Competitor Language Patterns**: The specific adjectives LLMs use for competitors.
4. **Citation Gap List**: Domains LLMs cite that the brand is missing from.
5. **GEO Action Plan**: Prioritized fixes (🔴 Critical, 🟡 High Priority, 🟢 Growth Plays).

Direct the user to the **GEO Action Plan** first, as it contains the concrete steps to fix the gaps identified in the audit.

---

## Step 4: Error Handling

If you encounter issues while executing the pipeline, follow these rules:

| Condition | Agent Action |
|-----------|--------------|
| Missing `config.json` | Tell the user to copy `config.example.json` and fill it out. |
| Invalid JSON in config | Notify the user of the parse error location and ask them to fix it. |
| Missing required fields | List the exact missing fields (`brand_name`, `competitors`, `category`). |
| No API keys set | Ask the user to export at least 2 of the 4 supported API keys. |
| 1 API key only | Warn the user that results are less reliable, but proceed with the run. |
| Transient API failure | The script auto-retries. If it fails completely, it skips the provider. |
| Persistent API failure | The script skips the provider gracefully. Continue the pipeline. |
| Zero responses | The script exits non-zero. Notify the user to check API keys or config. |
| Missing upstream data file | Re-run the preceding script in the pipeline (e.g., probe before analyze). |

**Limitations to keep in mind**:
- This is a point-in-time audit, not a background monitor.
- Sentiment analysis uses keyword proximity, not deep NLP.
- API costs apply for each run (typically ~$0.50–$2.00).
8 changes: 8 additions & 0 deletions skills/geo-gap-fixer/config.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"brand_name": "Linear",
"competitors": ["Jira", "Asana", "Height", "Monday"],
"category": "project management tool for developers",
"buyer_intent_prompts": [],
"target_llms": ["openai", "anthropic", "google", "perplexity"],
"website_url": "https://linear.app"
}
Loading
Loading