Skip to content

Commit 320465e

Browse files
authored
Docs: AEO Tier 2 — canonical answer pages (what-is, comparisons, FAQ, no-code guide) (#96)
* Docs: AEO Tier 2 canonical answer pages (what-is, comparisons, FAQ, etc.) Adds the eight canonical answer pages from AEO_PLAN.md Tier 2 so the docs own the high-intent queries an evaluator asks an AI assistant about Squadron. Every page has a query-shaped H1 and a definition-first opening paragraph so answer engines can extract a clean response. New pages: - /what-is-squadron — definition-first, with a competitor table - /compare/{langgraph,crewai,autogen,n8n} — honest head-to-head with side-by-side code, "when to pick X" sections, and migration notes - /no-code-multi-agent-workflow — full walkthrough building a scheduled daily-brief mission, HCL-vs-Python angle throughout - /declarative-ai-agent-framework — category-defining page with the imperative-vs-declarative analysis and nine evaluation properties - /faq — 20 questions covering price, license, providers, on-prem, MCP, resume, plugins, comparisons. FAQPage JSON-LD inlined with all 20 entries for answer-engine consumption. Nav: docs/content/_meta.js gets the new top-level entries and a "Compare" section. compare/_meta.js orders the four comparisons. Generator improvements (docs/scripts/generate-llms.mjs): - Strips MDX-only syntax ({/* */} comments and inline <script> / self-closing <script ... /> blocks) before parsing summaries and writing raw .md mirrors. This keeps llms.txt summaries clean even on pages that inline JSON-LD payloads. AEO_PLAN.md: Tier 2 boxes checked. * Docs/compare: expand plugin treatment — Go/Python plugins are the primary extension primitive, MCP is complementary Each comparison page now has a dedicated "Extension model" section that treats Squadron plugins as the first-class extension primitive they actually are: standalone Go or Python programs that the runtime spawns as subprocesses over gRPC (hashicorp/go-plugin), auto-built from local source with content-hash caching, stateful across tasks, and distributable via GitHub releases. MCP is positioned as complementary — good for integrations someone else already built, while plugins cover the integrations you build yourself. Updates: - compare/langgraph.mdx — contrasts plugin subprocess isolation with LangGraph tools as Python functions in the same process - compare/crewai.mdx — contrasts language choice and auto-build vs CrewAI's Python BaseTool class model - compare/autogen.mdx — contrasts cross-task plugin state and process isolation with AutoGen's in-process Python function tools - compare/n8n.mdx — contrasts plugin authoring effort (single Go or Python file, auto-built) with n8n's TypeScript community-node SDK, while acknowledging n8n's strength in pre-built SaaS coverage Also updates each TL;DR table's tool-ecosystem row to be more accurate. * Docs: reorganize nav with Learn/Build/Reference/Evaluate separators The Tier 2 AEO pages were grafted onto the existing nav and the seams showed: Introduction and "What is Squadron?" duplicated, "Advanced" was a one-page section, and the new evaluator pages (Compare, FAQ, No-Code Guide, Declarative Framework) sat in a grab-bag at the bottom. This commit reorganizes the nav into four funnel-stage groups using Nextra v4 separator entries, without changing any AEO-critical URL. Changes: - Top-level docs/content/_meta.js now uses { type: 'separator', title } entries to group sidebar items as Learn / Build / Reference / Evaluate. - index.mdx is now a short docs home (~50 lines): one-paragraph definition, one code example, three labeled CTA blocks routing new visitors / builders / evaluators to the right next page. Long-form definitional content stays at /what-is-squadron where it belongs. - docs/content/advanced/distributing-plugins.mdx → docs/content/guides/distributing-plugins.mdx - docs/content/no-code-multi-agent-workflow.mdx → docs/content/guides/no-code-multi-agent-workflow.mdx - docs/content/advanced/ removed (no other pages there). - docs/content/guides/_meta.js created with two entries. - Internal link in config/plugins.mdx updated to the new guides/ path. Generator improvements (docs/scripts/generate-llms.mjs): - Treat { type: 'separator', title } _meta.js entries as section headers in llms.txt, so the new Learn/Build/Reference/Evaluate groupings show up there too. - Prune stale .md mirrors from public/ when a content file is moved or removed. Without this, renaming a page leaves a ghost mirror that ships to production until someone notices. URL preservation: every page from PR #95 (Tier 1 AEO plumbing) keeps its current URL. The only moved URLs are /no-code-multi-agent-workflow and /advanced/distributing-plugins, both of which were added in the still-open Tier 2 PR and never deployed. DOCS_NAV_PLAN.md captures the design and execution. * Docs: merge What is Squadron? into Introduction The two pages had too much crossover — same definition, same code example, same "that's the whole workflow" line. Maintaining both was duplicate effort and confusing in the nav. This commit consolidates everything onto the docs root (/). The merged page is substantially what /what-is-squadron was: definition, problem framing, two-tier execution model, what's included, when to use it / when not, comparison table, and three labeled CTA blocks at the end (new visitors, builders, evaluators). Changes: - docs/content/index.mdx absorbs the long-form content of what-is-squadron.mdx and keeps the CTA structure. - docs/content/what-is-squadron.mdx deleted. - docs/content/_meta.js drops the what-is-squadron entry. - All internal references to /what-is-squadron updated to / across: faq.mdx, declarative-ai-agent-framework.mdx, compare/*.mdx, and guides/no-code-multi-agent-workflow.mdx. The /what-is-squadron URL was added in this unmerged PR and never deployed, so no external link breaks. The home page now serves the same content the URL was promising. AEO impact: minimal. The "what is squadron" query is now answered by the docs root, which carries the entire site's authority and is the URL most likely to be linked externally. The page's H1 "Squadron" plus the prominent "What problem does Squadron solve?" H2 give answer engines a strong signal that this is the canonical definition page. * Docs: rename "Declarative AI Agent Framework" → "Declarative Agent Framework" Tightens the category name. "AI agent framework" is redundant — agent frameworks in this category are AI agent frameworks by definition. Changes: - File: declarative-ai-agent-framework.mdx → declarative-agent-framework.mdx - URL : /declarative-ai-agent-framework → /declarative-agent-framework - Title and H1 in the page itself - Body text using the phrase as a category name - Generic phrase "Most AI agent frameworks today are imperative" → "Most agent frameworks today are imperative" for consistency - Internal links updated in _meta.js, index.mdx, and guides/no-code-multi-agent-workflow.mdx Unchanged: literal example values like topic = "AI agent frameworks" inside HCL code blocks (those are placeholder topic strings, not category names).
1 parent 9d4cf33 commit 320465e

16 files changed

Lines changed: 1324 additions & 57 deletions

AEO_PLAN.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ Ordered by impact-per-effort. Tier 1 first.
1818

1919
Title + H1 must echo the query verbatim. Answer engines extract the first paragraph when the H1 matches.
2020

21-
- [ ] **6. "What is Squadron?"**one-paragraph definition first, then features.
22-
- [ ] **7. Comparison pages**: "Squadron vs LangGraph", "Squadron vs CrewAI", "Squadron vs AutoGen", "Squadron vs n8n". Honest comparison tables.
23-
- [ ] **8. "How to build a multi-agent workflow without writing code"**long-form, HCL-vs-Python angle.
24-
- [ ] **9. "Declarative AI agent framework"**own the category name.
25-
- [ ] **10. FAQ page** with 15–20 high-intent questions (pricing, license, providers, on-prem, resume, state model, MCP, plugin languages). Each Q as `<h3>` in natural phrasing.
21+
- [x] **6. "What is Squadron?"**[`docs/content/what-is-squadron.mdx`](docs/content/what-is-squadron.mdx). Definition-first, includes feature summary and competitor comparison table.
22+
- [x] **7. Comparison pages**: [`compare/langgraph`](docs/content/compare/langgraph.mdx), [`crewai`](docs/content/compare/crewai.mdx), [`autogen`](docs/content/compare/autogen.mdx), [`n8n`](docs/content/compare/n8n.mdx). Honest tradeoffs, side-by-side code, "when to pick X" sections.
23+
- [x] **8. "How to build a multi-agent workflow without writing code"**[`docs/content/no-code-multi-agent-workflow.mdx`](docs/content/no-code-multi-agent-workflow.mdx). Full walkthrough of a daily-brief mission, HCL-vs-Python angle throughout.
24+
- [x] **9. "Declarative AI agent framework"**[`docs/content/declarative-ai-agent-framework.mdx`](docs/content/declarative-ai-agent-framework.mdx). Category-defining page with imperative-vs-declarative analysis.
25+
- [x] **10. FAQ page** [`docs/content/faq.mdx`](docs/content/faq.mdx). 20 questions covering pricing, license, providers, on-prem, MCP, resume, plugins, comparisons. FAQPage JSON-LD inlined for answer engines.
2626

2727
## Tier 3 — Off-site signal
2828

DOCS_NAV_PLAN.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# Docs Reorganization Plan (executed)
2+
3+
**Status:** Shipped on the same branch as Tier 2 (PR #96). All bullets below describe the executed end state — see commits on `claude/aeo-tier-2-content`.
4+
5+
---
6+
7+
8+
9+
The Tier 2 AEO pages were grafted onto the existing nav and the seams show. This plan reorganizes the docs so visitors find a coherent path, without breaking any AEO-critical URLs.
10+
11+
---
12+
13+
## What's wrong now
14+
15+
Current top-level nav (after Tier 2):
16+
17+
```
18+
Introduction
19+
What is Squadron?
20+
Getting Started
21+
CLI Commands
22+
Configuration
23+
Missions
24+
Advanced
25+
Compare
26+
No-Code Guide
27+
Declarative Framework
28+
FAQ
29+
```
30+
31+
Problems:
32+
33+
1. **Introduction and What is Squadron? duplicate.** Both define the product. A first-time visitor doesn't know which to read; both have a definitional opening.
34+
2. **AEO landing pages are interleaved with reference docs.** "No-Code Guide" lives between "Compare" and "Declarative Framework", which sits next to "FAQ". Each is good on its own, but as a list they read as a grab-bag.
35+
3. **"Advanced" is one page.** It currently holds only [Distributing Plugins](docs/content/advanced/distributing-plugins.mdx). A single-page section is noise in the nav.
36+
4. **No funnel-stage groupings.** Someone evaluating Squadron (Compare, FAQ) is reading the same nav as someone deep in build mode (Configuration, Missions). The nav doesn't signal which sections to read in which order.
37+
5. **The Harness page is buried in Missions.** [`missions/harness`](docs/content/missions/harness.mdx) is a conceptual explainer about the runtime model — closer in kind to "What is Squadron?" than to "Tasks" or "Routing". Its current placement makes it easy to miss for evaluators.
38+
39+
## Goals
40+
41+
- Visitors land on a coherent first page. No duplicate "what is this" pages staring at each other in the nav.
42+
- Evaluator content (what-is, comparisons, FAQ, declarative-framework) is grouped together and discoverable, but not interleaved with reference docs.
43+
- Builder content (missions, config, CLI, guides) is grouped together.
44+
- **No AEO-critical URLs change.** Pages already in [llms.txt](docs/public/llms.txt), [sitemap.xml](docs/public/sitemap.xml), and the [Tier 2 PR description](https://github.com/mlund01/squadron/pull/96) must keep their current paths. Any reorg happens through `_meta.js`, not file moves.
45+
- Nav uses **section separators** so groupings are visible without nesting URLs (which would change paths).
46+
47+
## Proposed top-level nav
48+
49+
Nextra v4 supports separator entries in `_meta.js` of the form `{ type: 'separator', title: '...' }`. Use them to create visual section headings in the sidebar without altering URLs.
50+
51+
```
52+
LEARN
53+
├── Introduction # short docs home — routes to evaluator + builder paths
54+
├── What is Squadron? # canonical definitional answer page
55+
├── Declarative Framework # category-defining conceptual page
56+
└── Getting Started/ # install, quickstart, docker
57+
58+
BUILD
59+
├── Missions/ # overview, harness, tasks, routing, iteration, datasets, folders, schedules, budgets, internal-tools
60+
├── Configuration/ # variables, models, agents, skills, tools, functions, plugins, mcp, gateways, command_center
61+
└── Guides
62+
├── No-Code Multi-Agent Workflow # currently /no-code-multi-agent-workflow
63+
└── Distributing Plugins # currently /advanced/distributing-plugins
64+
65+
REFERENCE
66+
└── CLI Reference/ # rename "CLI Commands"
67+
68+
EVALUATE
69+
├── Compare/ # 4 vs pages
70+
└── FAQ
71+
```
72+
73+
### What changes mechanically
74+
75+
| Concern | Action |
76+
|---|---|
77+
| Section headings | Add `{ type: 'separator', title: 'Learn' }`-style entries to top-level `_meta.js`. |
78+
| Rename "CLI Commands" → "CLI Reference" | Label change in `_meta.js` only. URL `/cli/...` unchanged. |
79+
| Fold "Advanced" into Guides | Move `distributing-plugins.mdx` from `content/advanced/` into a new `content/guides/` directory. **This changes its URL** — see URL-preservation section. |
80+
| Promote "The Harness" | Add a top-level alias to it from the Learn section in nav, or rewrite the Introduction page so it links prominently. Don't move the file. |
81+
| Group `no-code-multi-agent-workflow` and the moved-`distributing-plugins` into a new "Guides" bucket | Either (a) leave file at top level and have nav say "Guides" as a separator that contains the single page link, or (b) move into `content/guides/` directory. Option (b) is cleaner but changes the URL. |
82+
| De-duplicate Introduction and What is Squadron? | Rewrite `index.mdx` to be a short docs home (3 paragraphs + 4 CTA cards). All definitional content lives at `/what-is-squadron`. |
83+
84+
### URL preservation
85+
86+
These URLs must NOT change (they're in `llms.txt`, `sitemap.xml`, the FAQPage JSON-LD, internal cross-links, and the merged PR #95):
87+
88+
- `/`
89+
- `/what-is-squadron`
90+
- `/declarative-ai-agent-framework`
91+
- `/no-code-multi-agent-workflow`
92+
- `/faq`
93+
- `/compare/{langgraph,crewai,autogen,n8n}`
94+
- `/getting-started/{installation,quickstart,docker}`
95+
- `/cli/{quickstart,engage,disengage,verify,chat,mission,vars,upgrade}`
96+
- `/config/*` (all current files)
97+
- `/missions/*` (all current files)
98+
99+
URLs we **could** change (recent, not yet externally shared):
100+
101+
- `/advanced/distributing-plugins` — only one inbound external link risk; safe to move
102+
103+
Recommendation: leave **all** AEO and reference URLs alone. Use `_meta.js` separators for the nav structure. The one optional move is `advanced/distributing-plugins``guides/distributing-plugins`, which we can ship with a Next.js redirect to keep the old URL alive.
104+
105+
### Content changes (no URL impact)
106+
107+
1. **Rewrite [`index.mdx`](docs/content/index.mdx) as a short docs home.** Target: ~25 lines. One opening paragraph, four CTA cards (What is Squadron? / Quick Start / Missions / Compare), and a single short code example. Move the long-form "what is / how it works / what's in the box" content into [`what-is-squadron.mdx`](docs/content/what-is-squadron.mdx), which already has most of it.
108+
2. **Promote [`The Harness`](docs/content/missions/harness.mdx) into the Learn section** without moving the file — add it to top-level `_meta.js` (Nextra supports this; a key like `'missions/harness'` in the parent meta references the nested file). If that's not possible, link to it prominently from `what-is-squadron.mdx`.
109+
3. **Add a short paragraph cross-reference** at the top of [`declarative-ai-agent-framework.mdx`](docs/content/declarative-ai-agent-framework.mdx) and [`what-is-squadron.mdx`](docs/content/what-is-squadron.mdx) pointing to each other and to the FAQ, so the three landing pages function as a cohesive set.
110+
4. **Move [`advanced/distributing-plugins.mdx`](docs/content/advanced/distributing-plugins.mdx) to `guides/`** and add a redirect from `/advanced/distributing-plugins` to `/guides/distributing-plugins`. Delete the empty `advanced/` directory.
111+
112+
## Final proposed `docs/content/_meta.js`
113+
114+
```js
115+
export default {
116+
'__learn': { type: 'separator', title: 'Learn' },
117+
index: 'Introduction',
118+
'what-is-squadron': 'What is Squadron?',
119+
'declarative-ai-agent-framework': 'Declarative Framework',
120+
'getting-started': 'Getting Started',
121+
122+
'__build': { type: 'separator', title: 'Build' },
123+
missions: 'Missions',
124+
config: 'Configuration',
125+
guides: 'Guides',
126+
127+
'__reference': { type: 'separator', title: 'Reference' },
128+
cli: 'CLI Reference',
129+
130+
'__evaluate': { type: 'separator', title: 'Evaluate' },
131+
compare: 'Compare',
132+
faq: 'FAQ',
133+
134+
// The 'no-code-multi-agent-workflow' page becomes guides/no-code-multi-agent-workflow.mdx
135+
// (folded into the Guides directory). Its URL changes; add a redirect from the old path.
136+
// Alternatively keep top-level and remove from guides/ — see open decision below.
137+
}
138+
```
139+
140+
## Open decisions
141+
142+
1. **Should `no-code-multi-agent-workflow` keep its top-level URL or move under `/guides/`?** Top-level is better for AEO (shorter URL, "guides" prefix is forgettable). But then Guides is a one-item directory (only distributing-plugins). Recommendation: **keep at top level, list in nav under the Guides separator without nesting the URL**. This requires referencing the file from a parent `_meta.js` — Nextra supports cross-directory references in `_meta.js` via the same key syntax used for nested directories.
143+
2. **Do we want a `/concepts/` directory?** Folding what-is-squadron, declarative-ai-agent-framework, and the harness under `/concepts/` would be conceptually clean — but it changes URLs. **Recommendation: no, keep all at top level.** Use the Learn separator for nav grouping only.
144+
3. **How short should the new Introduction page be?** Recommendation: 25–40 lines. Definition + 4 CTA cards + one example. All long-form content lives at `/what-is-squadron`.
145+
4. **Do we keep "Advanced" as an empty bucket for future use?** Recommendation: **no, delete it.** It signals nothing meaningful. Re-introduce later if we have ≥3 advanced pages.
146+
147+
## Migration sequence
148+
149+
1. Verify Nextra v4 separator syntax in this codebase (one quick test in a feature branch).
150+
2. Rewrite `index.mdx` to be a short docs home — move detail into `what-is-squadron.mdx` where it already lives.
151+
3. Move `advanced/distributing-plugins.mdx``guides/distributing-plugins.mdx`. Add Next.js redirect for the old URL.
152+
4. Update `docs/content/_meta.js` with the new separator-based structure.
153+
5. Add cross-references between the three Learn-section landing pages.
154+
6. Regenerate `llms.txt` (the generator already picks up the file moves automatically).
155+
7. Build, click through every section heading, verify all URLs in the URL-preservation list still resolve.
156+
8. Open PR with screenshots of before/after nav.
157+
158+
## What this does *not* do
159+
160+
- Doesn't change page content beyond `index.mdx` shortening and small cross-reference links.
161+
- Doesn't add new AEO pages (those continue in Tier 3+).
162+
- Doesn't reorganize per-section `_meta.js` within Configuration or Missions — those are well-ordered already.
163+
- Doesn't break any URL that appears in `llms.txt`, `sitemap.xml`, the FAQPage JSON-LD, or external references.

docs/content/_meta.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
export default {
2+
'__learn': { type: 'separator', title: 'Learn' },
23
index: 'Introduction',
4+
'declarative-agent-framework': 'Declarative Framework',
35
'getting-started': 'Getting Started',
4-
cli: 'CLI Commands',
5-
config: 'Configuration',
6+
7+
'__build': { type: 'separator', title: 'Build' },
68
missions: 'Missions',
7-
advanced: 'Advanced',
9+
config: 'Configuration',
10+
guides: 'Guides',
11+
12+
'__reference': { type: 'separator', title: 'Reference' },
13+
cli: 'CLI Reference',
14+
15+
'__evaluate': { type: 'separator', title: 'Evaluate' },
16+
compare: 'Compare',
17+
faq: 'FAQ',
818
}

docs/content/compare/_meta.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export default {
2+
langgraph: 'vs LangGraph',
3+
crewai: 'vs CrewAI',
4+
autogen: 'vs AutoGen',
5+
n8n: 'vs n8n',
6+
}

0 commit comments

Comments
 (0)