egeo 2.0.0__tar.gz
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.
- egeo-2.0.0/LICENSE +21 -0
- egeo-2.0.0/PKG-INFO +662 -0
- egeo-2.0.0/README.md +645 -0
- egeo-2.0.0/egeo/__init__.py +35 -0
- egeo-2.0.0/egeo/__main__.py +7 -0
- egeo-2.0.0/egeo/agents.py +322 -0
- egeo-2.0.0/egeo/cli.py +228 -0
- egeo-2.0.0/egeo/decide.py +434 -0
- egeo-2.0.0/egeo/loop.py +534 -0
- egeo-2.0.0/egeo/pipeline.py +287 -0
- egeo-2.0.0/egeo/runtimes.py +241 -0
- egeo-2.0.0/egeo/substrate_lint.py +337 -0
- egeo-2.0.0/egeo/workspace.py +572 -0
- egeo-2.0.0/egeo.egg-info/PKG-INFO +662 -0
- egeo-2.0.0/egeo.egg-info/SOURCES.txt +24 -0
- egeo-2.0.0/egeo.egg-info/dependency_links.txt +1 -0
- egeo-2.0.0/egeo.egg-info/entry_points.txt +2 -0
- egeo-2.0.0/egeo.egg-info/requires.txt +2 -0
- egeo-2.0.0/egeo.egg-info/top_level.txt +3 -0
- egeo-2.0.0/geo_eval.py +503 -0
- egeo-2.0.0/llm_client.py +235 -0
- egeo-2.0.0/pyproject.toml +34 -0
- egeo-2.0.0/setup.cfg +4 -0
- egeo-2.0.0/tests/test_cli.py +36 -0
- egeo-2.0.0/tests/test_decide.py +170 -0
- egeo-2.0.0/tests/test_project_config.py +76 -0
egeo-2.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Vera Badias
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
egeo-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,662 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: egeo
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: E-GEO: runtime-agnostic Generative Engine Optimization toolkit and CLI.
|
|
5
|
+
Author: Vera Badias
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://egeoagents.com
|
|
8
|
+
Project-URL: Repository, https://github.com/mverab/eGEOagents
|
|
9
|
+
Project-URL: Documentation, https://egeoagents.com/docs/getting-started/
|
|
10
|
+
Keywords: geo,generative-engine-optimization,ai-search,llm,cli
|
|
11
|
+
Requires-Python: >=3.9
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: pyyaml>=6.0
|
|
15
|
+
Requires-Dist: jsonschema>=4.0
|
|
16
|
+
Dynamic: license-file
|
|
17
|
+
|
|
18
|
+
<div align="center">
|
|
19
|
+
|
|
20
|
+
<!-- HERO BANNER -->
|
|
21
|
+
<img src="assets/hero-banner.png" alt="E-GEO: Rank #1 in AI Search Engines" width="100%" />
|
|
22
|
+
|
|
23
|
+
<br />
|
|
24
|
+
|
|
25
|
+
# ๐ E-GEO
|
|
26
|
+
|
|
27
|
+
### **Generative Engine Optimization (GEO)** & **Answer Engine Optimization (AEO)** for AI-Powered Search
|
|
28
|
+
|
|
29
|
+
<p>
|
|
30
|
+
<a href="https://github.com/mverab/eGEOagents/actions/workflows/ci.yml"><img src="https://github.com/mverab/eGEOagents/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
31
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License" /></a>
|
|
32
|
+
<a href="https://github.com/mverab/eGEOagents/stargazers"><img src="https://img.shields.io/github/stars/mverab/eGEOagents?style=social" alt="GitHub Stars" /></a>
|
|
33
|
+
<a href="https://github.com/mverab/eGEOagents/network/members"><img src="https://img.shields.io/github/forks/mverab/eGEOagents?style=social" alt="GitHub Forks" /></a>
|
|
34
|
+
<a href="https://github.com/mverab/eGEOagents/issues"><img src="https://img.shields.io/github/issues/mverab/eGEOagents" alt="Issues" /></a>
|
|
35
|
+
<a href="https://arxiv.org/abs/2511.20867"><img src="https://img.shields.io/badge/arXiv-2511.20867-b31b1b.svg" alt="Research Paper" /></a>
|
|
36
|
+
</p>
|
|
37
|
+
|
|
38
|
+
<p>
|
|
39
|
+
<a href="https://claude.com/claude-code"><img src="https://img.shields.io/badge/Built%20with-Claude%20Code-8B5CF6?logo=anthropic" alt="Built with Claude Code" /></a>
|
|
40
|
+
<a href="CONTRIBUTING.md#ai-transparency"><img src="https://img.shields.io/badge/๐ค-AI--Assisted-blueviolet" alt="AI-Assisted" /></a>
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<br />
|
|
44
|
+
|
|
45
|
+
> **๐ One command. Premium results.**<br />
|
|
46
|
+
> Rank higher in **ChatGPT**, **Perplexity**, **Claude**, and **Gemini**.
|
|
47
|
+
|
|
48
|
+
<br />
|
|
49
|
+
|
|
50
|
+
[**๐ Docs**](docs/getting-started.md) โข [**๐ Issues**](https://github.com/mverab/eGEOagents/issues) โข [**๐ฌ Discussions**](https://github.com/mverab/eGEOagents/discussions) โข [**๐ Research Paper**](https://arxiv.org/abs/2511.20867)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- AI TRANSPARENCY BADGE -->
|
|
57
|
+
<p align="center">
|
|
58
|
+
<sub>๐ค <strong>AI-Assisted Development</strong> โ <a href="CONTRIBUTING.md#ai-transparency">See what's AI-generated vs human-authored</a></sub>
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## โจ What is E-GEO?
|
|
64
|
+
|
|
65
|
+
<table>
|
|
66
|
+
<tr>
|
|
67
|
+
<td width="60%">
|
|
68
|
+
|
|
69
|
+
**E-GEO** is an open-source **Generative Engine Optimization (GEO)** and **Answer Engine Optimization (AEO)** toolkit that transforms your website content to rank higher in AI-powered search engines โ including **ChatGPT**, **Perplexity**, **Google AI Overviews**, **Claude**, and **Gemini**.
|
|
70
|
+
|
|
71
|
+
Also known as **AI SEO** or **LLM SEO**, GEO is the practice of optimizing content so that generative AI engines can crawl, understand, cite, and recommend it. E-GEO automates this entire process.
|
|
72
|
+
|
|
73
|
+
Based on the [E-GEO research preprint](https://arxiv.org/abs/2511.20867) (arXiv:2511.20867), it applies **10 research-derived features** โ including competitive framing, citation optimization, structured data, and semantic density improvements โ as documented in the paper's experiments.
|
|
74
|
+
|
|
75
|
+
- โ
**No learning curve** โ One command to optimize
|
|
76
|
+
- โ
**Research-backed** โ Based on published GEO research
|
|
77
|
+
- โ
**Production-ready** โ Copy-paste optimized content
|
|
78
|
+
- โ
**Multi-engine** โ Optimizes for ChatGPT, Perplexity, Gemini, Claude & Google AI Overviews
|
|
79
|
+
- โ
**Full pipeline** โ Analyze โ Rank โ Rewrite โ Schema in one command
|
|
80
|
+
|
|
81
|
+
</td>
|
|
82
|
+
<td width="40%">
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
/geo https://yoursite.com/pricing
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
โ
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
geo-output/
|
|
92
|
+
โโโ report.md
|
|
93
|
+
โโโ optimized/
|
|
94
|
+
โ โโโ pricing.md
|
|
95
|
+
โโโ schema/
|
|
96
|
+
โโโ pricing.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
</td>
|
|
100
|
+
</tr>
|
|
101
|
+
</table>
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## ๐ Why AI Visibility Matters in 2026
|
|
106
|
+
|
|
107
|
+
AI search engines give one synthesized answer and cite a handful of sources. If your site isn't one of them, you're invisible โ even if you rank #1 on Google.
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
User asks ChatGPT: "What's the best GEO tool?"
|
|
111
|
+
|
|
112
|
+
ChatGPT: "According to [Competitor], the best tool is..."
|
|
113
|
+
โ They get cited. You don't.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
- **ChatGPT serves 900M+ weekly users** โ a growing share of sessions that used to be Google searches.
|
|
117
|
+
- **28.3% of ChatGPT's most-cited pages have *zero* organic visibility on Google** (Ahrefs) โ AI engines reward different signals than classic SEO.
|
|
118
|
+
- **Proper JSON-LD schema lifts LLM extraction accuracy from 16% to 54%** (Semrush study on GPT-4).
|
|
119
|
+
- **844,000+ sites** already ship an `llms.txt`. Is yours one of them?
|
|
120
|
+
|
|
121
|
+
Traditional SEO optimizes for blue links. **GEO optimizes for citations in AI-generated answers.** E-GEO is the open-source tool that bridges this gap.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## ๐ Quick Start (3 Steps)
|
|
126
|
+
|
|
127
|
+
### 1. Install
|
|
128
|
+
|
|
129
|
+
Copy the `.claude/` folder to your project:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
cp -r /path/to/eGEOagents/.claude .
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 2. Activate
|
|
136
|
+
|
|
137
|
+
In Claude Code, switch to GEO mode:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
/output-style geo-optimizer
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 3. Optimize
|
|
144
|
+
|
|
145
|
+
Run your first optimization:
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
/geo https://yoursite.com
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## ๐งฉ Install as Skills (skills.sh)
|
|
154
|
+
|
|
155
|
+
Install the complete skill collection:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npx skills add https://github.com/mverab/eGEOagents
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Install one skill only:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
npx skills add https://github.com/mverab/eGEOagents --skill competitive-analysis
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Validate parser discovery before shipping updates:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
npx skills add https://github.com/mverab/eGEOagents --list
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Verify indexing pages:
|
|
174
|
+
|
|
175
|
+
- Collection: [skills.sh/mverab/egeoagents](https://skills.sh/mverab/egeoagents)
|
|
176
|
+
- Owner: [skills.sh/mverab](https://skills.sh/mverab)
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## ๐ Commands
|
|
181
|
+
|
|
182
|
+
| Command | What it does |
|
|
183
|
+
|---------|--------------|
|
|
184
|
+
| `/geo <url>` | **Full pipeline** - Analyze, rank, rewrite, schema |
|
|
185
|
+
| `/geo:audit <url>` | Analysis only, no changes |
|
|
186
|
+
| `/geo:optimize <file>` | Optimize local content file |
|
|
187
|
+
| `/geo:batch <folder>` | Process entire folder |
|
|
188
|
+
| `/geo:report` | Generate executive report |
|
|
189
|
+
| `/geo:compete <query>` | Competitive analysis |
|
|
190
|
+
| `/geo:loop <domain>` | One bounded [loop-mode](#-loop-mode-continuous-geo) iteration over a workspace domain |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## ๐ What You Get
|
|
195
|
+
|
|
196
|
+
After running `/geo`:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
geo-output/
|
|
200
|
+
โโโ report.md # Executive summary + scores
|
|
201
|
+
โโโ analysis.json # Raw analysis data
|
|
202
|
+
โโโ optimized/
|
|
203
|
+
โ โโโ pricing.md # Rewritten content (ready to use)
|
|
204
|
+
โโโ schema/
|
|
205
|
+
โ โโโ pricing.json # JSON-LD markup (copy to site)
|
|
206
|
+
โโโ checklist.md # Step-by-step implementation
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## ๐ฏ Results: Backed by Research
|
|
212
|
+
|
|
213
|
+
E-GEO is grounded in the research described in the [E-GEO preprint](https://arxiv.org/abs/2511.20867) (arXiv:2511.20867), building on foundational work by [Aggarwal et al. (Princeton, KDD 2024)](https://arxiv.org/abs/2311.09735) โ the original study that defined Generative Engine Optimization as a discipline.
|
|
214
|
+
|
|
215
|
+
The E-GEO paper reports that:
|
|
216
|
+
|
|
217
|
+
1. **Competitive framing** produces the strongest immediate ranking lift among all GEO strategies tested.
|
|
218
|
+
2. A **universal optimization strategy** (applying all 10 features together) outperforms individual heuristics by a wide margin.
|
|
219
|
+
3. The **10 GEO features** (ranking emphasis, user intent matching, competitive edge, social proof, authority signals, scannability, citation density, structured data, factual language, and freshness) consistently appear in higher-ranking content across ChatGPT, Perplexity, and Gemini.
|
|
220
|
+
|
|
221
|
+
| Feature | What E-GEO Does |
|
|
222
|
+
|---------|-----------------|
|
|
223
|
+
| **Ranking Emphasis** | Positions your content as the top choice |
|
|
224
|
+
| **User Intent** | Directly answers what users are looking for |
|
|
225
|
+
| **Competitive Edge** | Highlights your unique advantages |
|
|
226
|
+
| **Social Proof** | Integrates trust signals and testimonials |
|
|
227
|
+
| **Authority** | Establishes expert, confident tone |
|
|
228
|
+
| **Scannability** | Structures for easy AI parsing |
|
|
229
|
+
|
|
230
|
+
Results vary by content quality and competition. See the paper for full methodology and findings: [arXiv:2511.20867](https://arxiv.org/abs/2511.20867).
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## ๐งช Reproducible Results
|
|
235
|
+
|
|
236
|
+
E-GEO ships an evaluation harness so you can measure prompt quality yourself โ
|
|
237
|
+
no trust required. It scores whether the GEO rewriter moves a target item *up*
|
|
238
|
+
in an LLM-simulated ranking.
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
pip install pyyaml jsonschema
|
|
242
|
+
|
|
243
|
+
# Deterministic, offline smoke run (no API key needed)
|
|
244
|
+
GEO_EVAL_MOCK=1 python geo_eval.py evaluate \
|
|
245
|
+
--dataset eval/datasets/geo_smoke.jsonl --limit 5 --verbose
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
This is the exact check that runs in [CI](.github/workflows/ci.yml) on every
|
|
249
|
+
pull request. Reported metrics: `avg_rank_improvement`, `win_rate`, and
|
|
250
|
+
`stderr_rank_improvement`.
|
|
251
|
+
|
|
252
|
+
> **Honest scope:** these numbers are a **proxy** produced by an LLM-ranker, not
|
|
253
|
+
> a measurement of real ChatGPT/Perplexity rankings. See
|
|
254
|
+
> **[docs/evaluation.md](docs/evaluation.md)** for the full methodology,
|
|
255
|
+
> metric definitions, and limitations.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## ๐ฅ๏ธ Standalone CLI (`egeo`)
|
|
260
|
+
|
|
261
|
+
Beyond Claude Code, E-GEO ships a **runtime-agnostic command line** so the same
|
|
262
|
+
GEO engine runs anywhere Python runs โ local shells, notebooks, Docker, or CI.
|
|
263
|
+
The CLI is a thin wrapper around the **exact same** `geo_eval.py` and
|
|
264
|
+
`llm_client.py` modules used by the Claude Code agents, so there is **no
|
|
265
|
+
duplicated optimization logic** โ both runtimes share one source of truth.
|
|
266
|
+
|
|
267
|
+
### Install
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# From the repo root โ installs the `egeo` console script + deps
|
|
271
|
+
pip install -e .
|
|
272
|
+
|
|
273
|
+
# ...or run without installing (deps: pip install pyyaml jsonschema)
|
|
274
|
+
python -m egeo --help
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Commands
|
|
278
|
+
|
|
279
|
+
| Command | What it does |
|
|
280
|
+
|---------|--------------|
|
|
281
|
+
| `egeo optimize <file>` | **Full pipeline** โ analyze โ rank โ rewrite โ schema, writes `report.md`, `optimized/*.md`, `schema/*.json`, `analysis.json` |
|
|
282
|
+
| `egeo evaluate` | Run the evaluation harness (reuses `geo_eval.py`, identical metrics) |
|
|
283
|
+
| `egeo optimize-prompts` | Meta-optimize the rewriter prompt (non-destructive by default) |
|
|
284
|
+
| `egeo runtimes` | List available runtime adapters and their status |
|
|
285
|
+
| `egeo loop <run\|collect\|doctor>` | [Loop mode](#-loop-mode-continuous-geo) โ plan a run, run a collector, or check the workspace |
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
# Optimize a local content file (output dir defaults to ./geo-output)
|
|
289
|
+
egeo optimize examples/sample-input.md --out-dir ./geo-output
|
|
290
|
+
|
|
291
|
+
# Score prompt quality on a dataset
|
|
292
|
+
egeo evaluate --dataset eval/datasets/geo_smoke.jsonl --limit 5
|
|
293
|
+
|
|
294
|
+
# Inspect the runtime adapters
|
|
295
|
+
egeo runtimes
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Offline / deterministic mode
|
|
299
|
+
|
|
300
|
+
Every command honors `GEO_EVAL_MOCK=1`, which swaps in a deterministic mock LLM
|
|
301
|
+
client โ **no API key required**. This is exactly how the CLI is exercised in
|
|
302
|
+
[CI](.github/workflows/ci.yml):
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
GEO_EVAL_MOCK=1 egeo optimize examples/sample-input.md --out-dir /tmp/egeo
|
|
306
|
+
GEO_EVAL_MOCK=1 egeo evaluate --dataset eval/datasets/geo_smoke.jsonl --limit 3
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Supported Runtimes
|
|
310
|
+
|
|
311
|
+
E-GEO exposes a small **runtime adapter** layer so the same agents (Analyzer,
|
|
312
|
+
Ranker, Rewriter, Indexer) can be driven by different execution hosts:
|
|
313
|
+
|
|
314
|
+
| Runtime | Aliases | Mode | Status | Description |
|
|
315
|
+
|---------|---------|------|:------:|-------------|
|
|
316
|
+
| **`python`** | `cli`, `local` | in-process | โ
Available | Pure-Python runtime behind the `egeo` CLI. Runs the full pipeline in-process and honors `GEO_EVAL_MOCK` for offline, deterministic runs. |
|
|
317
|
+
| **`claude-code`** | `claude` | host-executed | โ
Available | Executes the `.claude/` agents through Claude Code `/geo` slash commands on the host. Auto-detected when a `.claude/` directory is present. |
|
|
318
|
+
|
|
319
|
+
> Run `egeo runtimes` to print the live status of each adapter in your
|
|
320
|
+
> environment. Additional hosts (Cursor, Codex, Windsurf, โฆ) can be added by
|
|
321
|
+
> implementing the `RuntimeAdapter` interface in
|
|
322
|
+
> [`egeo/runtimes.py`](egeo/runtimes.py).
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## ๐ Loop Mode (continuous GEO)
|
|
327
|
+
|
|
328
|
+
One-shot GEO answers *"how is this page doing today?"*. **Loop mode** answers
|
|
329
|
+
*"what changed, and what should I do about it?"* โ week after week, without you
|
|
330
|
+
asking. It is fully **opt-in**: `/geo <url>` and `egeo optimize` behave exactly
|
|
331
|
+
as before and never need a workspace.
|
|
332
|
+
|
|
333
|
+
### The workspace (`$EGEO_HOME`)
|
|
334
|
+
|
|
335
|
+
All loop state lives **outside the repo**, in the workspace resolved from
|
|
336
|
+
`$EGEO_HOME` (default `~/.egeo/`), so `git pull` never touches your data:
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
$EGEO_HOME/
|
|
340
|
+
โโโ LOG.md # append-only activity feed (one line per event)
|
|
341
|
+
โโโ config.yaml # cadence, models, budgets, scaling weights
|
|
342
|
+
โโโ project.yaml # portable project identity, targets, guardrails
|
|
343
|
+
โโโ SUBSTRATE.md # the contract, vendored on bootstrap
|
|
344
|
+
โโโ signals/<slug>.md # evidence โ deduped, frequency-counted
|
|
345
|
+
โโโ docs/<slug>.md # durable knowledge โ analyses, decisions
|
|
346
|
+
โโโ data/<collector>/*.jsonl # raw collector output (not artifacts)
|
|
347
|
+
โโโ domains/<loop>/README.md # charter: focus, backlog, run Timeline
|
|
348
|
+
โโโ prompts/ # optimized prompts (repo prompts/ stay pristine)
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
The layout and the artifact rules are defined by [`SUBSTRATE.md`](SUBSTRATE.md)
|
|
352
|
+
and mechanically enforced by `python -m egeo.substrate_lint`.
|
|
353
|
+
|
|
354
|
+
`project.yaml` is optional during migration. When present, it is the validated
|
|
355
|
+
source for the active project's canonical domain, tracked queries, tracked
|
|
356
|
+
pages, and anti-spam/canibalization guardrails. `config.yaml` remains the
|
|
357
|
+
machine-facing loop configuration. If `project.yaml` is absent, collectors use
|
|
358
|
+
the legacy `config.yaml` fields and `egeo loop doctor` reports that fallback.
|
|
359
|
+
See [`examples/project.yaml`](examples/project.yaml) for the portable contract.
|
|
360
|
+
|
|
361
|
+
### Commands
|
|
362
|
+
|
|
363
|
+
| Command | What it does |
|
|
364
|
+
|---------|--------------|
|
|
365
|
+
| `egeo loop doctor` | Bootstrap the workspace if missing, then health-check it (layout, config, budgets, substrate lint) |
|
|
366
|
+
| `egeo loop decide` | Rank exactly one next action from collector JSONL + the outcome ledger (LLM-free; never publishes) |
|
|
367
|
+
| `egeo loop collect serp` | Record a search-result snapshot (Brave API) into `data/serp/*.jsonl` |
|
|
368
|
+
| `egeo loop collect page` | Record a page snapshot (hash, title, meta, JSON-LD types, word count) into `data/page/*.jsonl` |
|
|
369
|
+
| `egeo loop run <domain>` | Resolve and print the run plan โ current focus, fresh collector deltas, candidate signals |
|
|
370
|
+
| `/geo:loop <domain>` | Execute one bounded loop iteration in Claude Code (the agent does the interpretive work) |
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
# 1. Create the workspace
|
|
374
|
+
egeo loop doctor
|
|
375
|
+
|
|
376
|
+
# 2. Describe what you want watched: $EGEO_HOME/domains/example-com/README.md
|
|
377
|
+
# (## Charter, ## Cadence, ## Current focus, ## Backlog, ## Timeline)
|
|
378
|
+
|
|
379
|
+
# 3. Collect ground truth
|
|
380
|
+
export BRAVE_API_KEY=...
|
|
381
|
+
egeo loop collect serp --query "best geo tool" --target-domain example.com
|
|
382
|
+
egeo loop collect page --url https://example.com/pricing
|
|
383
|
+
|
|
384
|
+
# 4. See what a run would do โ writes nothing
|
|
385
|
+
egeo loop run example-com --dry-run
|
|
386
|
+
|
|
387
|
+
# 5. Do the run (Claude Code, or headless)
|
|
388
|
+
claude -p "/geo:loop example-com"
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
`egeo loop run` is **LLM-free by design**: it is the trigger seam that prepares
|
|
392
|
+
and validates the plan. The reasoning happens in
|
|
393
|
+
[`.claude/skills/geo-loop/SKILL.md`](.claude/skills/geo-loop/SKILL.md), which
|
|
394
|
+
enforces the run contract: **one** unit of work, **one** Timeline entry ending in
|
|
395
|
+
`Outcome: success|partial|failure|no-op`, **one** `LOG.md` line, verified before
|
|
396
|
+
exit.
|
|
397
|
+
|
|
398
|
+
### Collectors
|
|
399
|
+
|
|
400
|
+
Collectors are the loop's senses: deterministic, LLM-free, budget-aware, and
|
|
401
|
+
append-only. Every collector honours the same 10-point contract
|
|
402
|
+
([`collectors/README.md`](collectors/README.md)) โ in short: write JSONL to
|
|
403
|
+
`$EGEO_HOME/data/<name>/`, one record per observation with a `schema_version`,
|
|
404
|
+
respect the daily budget in `config.yaml`, append exactly one `LOG.md` line per
|
|
405
|
+
pass, and **fail loudly** instead of writing a partial or fabricated record.
|
|
406
|
+
|
|
407
|
+
| Collector | Needs | Output |
|
|
408
|
+
|-----------|-------|--------|
|
|
409
|
+
| `serp` | `BRAVE_API_KEY` | Top-10 results per query + your target's position |
|
|
410
|
+
| `page` | nothing | `content_hash`, title, meta description, JSON-LD types, word count |
|
|
411
|
+
|
|
412
|
+
Both accept `--fixture` for offline, deterministic runs โ that is how they are
|
|
413
|
+
tested without touching the network.
|
|
414
|
+
|
|
415
|
+
### Scheduling (Hermes cron reference)
|
|
416
|
+
|
|
417
|
+
Any scheduler drives the same commands. Pin **provider and model per job**, and
|
|
418
|
+
for anything more frequent than weekly deliver **locally** and let a weekly
|
|
419
|
+
digest do the notifying:
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
# hourly โ local delivery only (JSONL + LOG line, no notification)
|
|
423
|
+
0 * * * * provider=anthropic model=claude-sonnet-4-5 deliver=local \
|
|
424
|
+
egeo loop collect page --url https://example.com/pricing
|
|
425
|
+
|
|
426
|
+
# daily โ one bounded loop run
|
|
427
|
+
30 6 * * * provider=anthropic model=claude-sonnet-4-5 deliver=local \
|
|
428
|
+
claude -p "/geo:loop example-com"
|
|
429
|
+
|
|
430
|
+
# weekly โ the only job that pings you
|
|
431
|
+
0 9 * * 1 provider=anthropic model=claude-opus-4-1 deliver=notify \
|
|
432
|
+
claude -p "Summarize $EGEO_HOME/LOG.md for the past 7 days"
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## ๐ E-GEO vs Other GEO Tools
|
|
438
|
+
|
|
439
|
+
| Feature | E-GEO | GEO Optimizer | GEO-optim/GEO | Awesome GEO | Traditional SEO |
|
|
440
|
+
|---------|-------|---------------|---------------|-------------|----------------|
|
|
441
|
+
| **Type** | CLI + Claude Code | CLI + MCP | Research repo | Curated list | โ |
|
|
442
|
+
| **Content Rewriting** | โ
Full pipeline | โ ๏ธ Audit only | โ | โ | โ No |
|
|
443
|
+
| **AI-Ranking Simulation** | โ
LLM-based | โ | โ | โ | โ No |
|
|
444
|
+
| **Schema Generation** | โ
Auto JSON-LD | โ ๏ธ Partial | โ | โ | โ Manual |
|
|
445
|
+
| **Competitive Analysis** | โ
Built-in | โ | โ | โ | โ No |
|
|
446
|
+
| **Academic Foundation** | โ
[arXiv:2511.20867](https://arxiv.org/abs/2511.20867) | โ
KDD 2024 | โ
Original GEO paper | โ | โ Heuristics |
|
|
447
|
+
| **Multi-Runtime** | โ
Python + Claude Code | โ
Python + MCP | โ | โ | โ |
|
|
448
|
+
| **llms.txt Support** | โ
| โ
| โ | ๐ Listed | โ |
|
|
449
|
+
| **Cost** | Free / MIT | Free / MIT | Free | Free | Expensive |
|
|
450
|
+
|
|
451
|
+
> **E-GEO is the only open-source GEO tool that combines content rewriting, ranking simulation, and schema generation in a single pipeline.** Others focus on auditing or listing โ E-GEO does the full optimization.
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## ๐ Premium Output
|
|
456
|
+
|
|
457
|
+
E-GEO delivers outputs that look like they came from a $100M company:
|
|
458
|
+
|
|
459
|
+
```
|
|
460
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
461
|
+
โ ๐ฏ GEO AUDIT REPORT โ
|
|
462
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
463
|
+
โ URL: yoursite.com/pricing โ
|
|
464
|
+
โ Score: 78/100 โ
|
|
465
|
+
โ Ranking Potential: โโโโโโโโโโ 78% โ
|
|
466
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
467
|
+
โ โ
|
|
468
|
+
โ โ
STRENGTHS โ
|
|
469
|
+
โ โข Clear value proposition โ
|
|
470
|
+
โ โข Good content structure โ
|
|
471
|
+
โ โ
|
|
472
|
+
โ โ ๏ธ GAPS โ
|
|
473
|
+
โ โข Missing social proof โ Add customer count โ
|
|
474
|
+
โ โข No urgency signals โ Add limited-time offer โ
|
|
475
|
+
โ โ
|
|
476
|
+
โ ๐ PRIORITY ACTIONS โ
|
|
477
|
+
โ 1. Add testimonials (+15 points) โ
|
|
478
|
+
โ 2. Include pricing comparison (+10 points) โ
|
|
479
|
+
โ 3. Add schema markup (+5 points) โ
|
|
480
|
+
โ โ
|
|
481
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
---
|
|
485
|
+
|
|
486
|
+
## ๐ค How It Works
|
|
487
|
+
|
|
488
|
+
<div align="center">
|
|
489
|
+
|
|
490
|
+
<!-- SYSTEM DIAGRAM -->
|
|
491
|
+
<img src="assets/egeo-agents.png" alt="E-GEO Multi-Agent System" width="600" />
|
|
492
|
+
|
|
493
|
+
</div>
|
|
494
|
+
|
|
495
|
+
<br />
|
|
496
|
+
|
|
497
|
+
E-GEO uses **4 specialized AI agents** orchestrated by Claude Code:
|
|
498
|
+
|
|
499
|
+
| Agent | What it does | Output |
|
|
500
|
+
|:------|:-------------|:-------|
|
|
501
|
+
| ๐ **Analyzer** | Extracts content, scores GEO signals, identifies gaps | `analysis.json` |
|
|
502
|
+
| ๐ **Ranker** | Simulates AI-engine ranking, predicts positions | Baseline score |
|
|
503
|
+
| โ๏ธ **Rewriter** | Optimizes content while preserving brand voice | `optimized/*.md` |
|
|
504
|
+
| ๐๏ธ **Indexer** | Generates schema markup and technical assets | `schema/*.json` |
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## ๐ What's Included
|
|
509
|
+
|
|
510
|
+
```
|
|
511
|
+
.claude/
|
|
512
|
+
โโโ CLAUDE.md # System knowledge base
|
|
513
|
+
โโโ output-styles/
|
|
514
|
+
โ โโโ geo-optimizer.md # Premium formatting mode
|
|
515
|
+
โโโ agents/
|
|
516
|
+
โ โโโ geo-analyzer.md # Content analysis
|
|
517
|
+
โ โโโ geo-rewriter.md # Content optimization
|
|
518
|
+
โ โโโ geo-ranker.md # Ranking simulation
|
|
519
|
+
โ โโโ geo-indexer.md # Schema generation
|
|
520
|
+
โโโ skills/
|
|
521
|
+
โ โโโ competitive-analysis/ # Auto-triggered competitor analysis
|
|
522
|
+
โ โโโ content-scoring/ # Auto-triggered scoring
|
|
523
|
+
โ โโโ schema-generator/ # Auto-triggered schema
|
|
524
|
+
โ โโโ geo-loop/ # Loop-mode run contract
|
|
525
|
+
โโโ commands/
|
|
526
|
+
โโโ geo.md # Main command
|
|
527
|
+
โโโ geo-audit.md
|
|
528
|
+
โโโ geo-optimize.md
|
|
529
|
+
โโโ geo-batch.md
|
|
530
|
+
โโโ geo-report.md
|
|
531
|
+
โโโ geo-compete.md
|
|
532
|
+
โโโ geo-loop.md
|
|
533
|
+
|
|
534
|
+
egeo/ # Standalone CLI package
|
|
535
|
+
โโโ cli.py # `egeo` entrypoint
|
|
536
|
+
โโโ loop.py # `egeo loop run|collect|doctor`
|
|
537
|
+
โโโ workspace.py # $EGEO_HOME resolution + bootstrap
|
|
538
|
+
โโโ substrate_lint.py # SUBSTRATE.md enforcement
|
|
539
|
+
|
|
540
|
+
collectors/ # Deterministic, LLM-free senses
|
|
541
|
+
โโโ README.md # The collector contract
|
|
542
|
+
โโโ serp.py # Brave search snapshots
|
|
543
|
+
โโโ page.py # Page snapshots
|
|
544
|
+
โโโ fixtures/ # Offline test data
|
|
545
|
+
|
|
546
|
+
SUBSTRATE.md # Workspace/artifact contract
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
## ๐ Perfect For
|
|
552
|
+
|
|
553
|
+
<table>
|
|
554
|
+
<tr>
|
|
555
|
+
<td align="center" width="20%">
|
|
556
|
+
๐<br /><strong>SaaS Founders</strong><br /><sub>AI-engine traffic</sub>
|
|
557
|
+
</td>
|
|
558
|
+
<td align="center" width="20%">
|
|
559
|
+
๐ผ<br /><strong>B2B Marketers</strong><br /><sub>Landing pages</sub>
|
|
560
|
+
</td>
|
|
561
|
+
<td align="center" width="20%">
|
|
562
|
+
๐๏ธ<br /><strong>E-commerce</strong><br /><sub>Product descriptions</sub>
|
|
563
|
+
</td>
|
|
564
|
+
<td align="center" width="20%">
|
|
565
|
+
โ๏ธ<br /><strong>Content Creators</strong><br /><sub>AI discoverability</sub>
|
|
566
|
+
</td>
|
|
567
|
+
<td align="center" width="20%">
|
|
568
|
+
๐ข<br /><strong>Agencies</strong><br /><sub>GEO services</sub>
|
|
569
|
+
</td>
|
|
570
|
+
</tr>
|
|
571
|
+
</table>
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## ๐ Documentation
|
|
576
|
+
|
|
577
|
+
| Resource | Description |
|
|
578
|
+
|:---------|:------------|
|
|
579
|
+
| ๐ **[Getting Started](docs/getting-started.md)** | Step-by-step tutorial |
|
|
580
|
+
| โ๏ธ **[How It Works](docs/how-it-works.md)** | Technical deep dive |
|
|
581
|
+
| โ **[FAQ](docs/faq.md)** | Common questions answered |
|
|
582
|
+
| ๐งฉ **[skills.sh Playbook](docs/skills-sh-playbook.md)** | Listing, ranking, and metadata checklist |
|
|
583
|
+
| ๐งช **[Evaluation Harness](docs/evaluation.md)** | Dataset format, commands, metrics, and honest limitations |
|
|
584
|
+
| ๐ **[Usage Guide](USAGE.md)** | Complete command reference |
|
|
585
|
+
| ๐ **[Research Paper](https://arxiv.org/abs/2511.20867)** | The science behind E-GEO |
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## ๐ค Contributing
|
|
590
|
+
|
|
591
|
+
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
592
|
+
|
|
593
|
+
**Quick ways to contribute:**
|
|
594
|
+
- Report bugs via [issues](https://github.com/mverab/eGEOagents/issues)
|
|
595
|
+
- Submit pull requests for features
|
|
596
|
+
- Improve documentation
|
|
597
|
+
- Share your GEO results
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
## ๐ SEO & AI Search Glossary
|
|
602
|
+
|
|
603
|
+
E-GEO covers the full spectrum of AI search optimization. If you're searching for any of these, you're in the right place:
|
|
604
|
+
|
|
605
|
+
| Term | What it means |
|
|
606
|
+
|------|---------------|
|
|
607
|
+
| **GEO** (Generative Engine Optimization) | Optimizing content for AI answer engines like ChatGPT, Perplexity, Gemini |
|
|
608
|
+
| **AEO** (Answer Engine Optimization) | Structuring content so AI engines can parse and cite it |
|
|
609
|
+
| **AI SEO** | Adapting traditional SEO for AI-powered search |
|
|
610
|
+
| **LLM SEO** | Optimization specifically for large language model responses |
|
|
611
|
+
| **AI Visibility** | How often and how well your brand appears in AI-generated answers |
|
|
612
|
+
| **Citation Tracking** | Monitoring whether AI engines cite your site as a source |
|
|
613
|
+
| **llms.txt** | A standard file (like robots.txt) that tells AI crawlers what content to prioritize |
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## ๐ License
|
|
618
|
+
|
|
619
|
+
MIT License - use it, modify it, sell with it. See [LICENSE](LICENSE) for details.
|
|
620
|
+
|
|
621
|
+
---
|
|
622
|
+
|
|
623
|
+
## ๐ Support & Community
|
|
624
|
+
|
|
625
|
+
- **Issues:** [GitHub Issues](https://github.com/mverab/eGEOagents/issues)
|
|
626
|
+
- **Discussions:** [GitHub Discussions](https://github.com/mverab/eGEOagents/discussions)
|
|
627
|
+
- **Research:** [E-GEO Paper (arXiv:2511.20867)](https://arxiv.org/abs/2511.20867)
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## ๐ Ready to Rank Higher?
|
|
632
|
+
|
|
633
|
+
<div align="center">
|
|
634
|
+
|
|
635
|
+
```bash
|
|
636
|
+
# Install
|
|
637
|
+
cp -r eGEOagents/.claude .
|
|
638
|
+
|
|
639
|
+
# Activate (in Claude Code)
|
|
640
|
+
/output-style geo-optimizer
|
|
641
|
+
|
|
642
|
+
# Optimize your first page
|
|
643
|
+
/geo https://yoursite.com
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
<br />
|
|
647
|
+
|
|
648
|
+
<a href="https://github.com/mverab/eGEOagents">
|
|
649
|
+
<img src="https://img.shields.io/badge/โญ-Star%20on%20GitHub-yellow?style=for-the-badge&logo=github" alt="Star on GitHub" />
|
|
650
|
+
</a>
|
|
651
|
+
|
|
652
|
+
<br /><br />
|
|
653
|
+
|
|
654
|
+
---
|
|
655
|
+
|
|
656
|
+
**Built for the AI-first web โ optimize your content for ChatGPT, Perplexity, Claude, and Gemini with E-GEO, the open-source GEO tool.** ๐
|
|
657
|
+
|
|
658
|
+
<sub>Made with โค๏ธ by <a href="https://verabadias.gumroad.com/">Vera Badias</a> โข Based on research from <a href="https://arxiv.org/abs/2511.20867">arXiv:2511.20867</a></sub>
|
|
659
|
+
|
|
660
|
+
<sub>๐ค This project is AI-assisted. See <a href="CONTRIBUTING.md#ai-transparency">AI Transparency</a> for details.</sub>
|
|
661
|
+
|
|
662
|
+
</div>
|