@solidnumber/cli 2.16.0 → 2.18.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.
Files changed (44) hide show
  1. package/README.md +17 -0
  2. package/dist/commands/apply.d.ts +10 -0
  3. package/dist/commands/apply.d.ts.map +1 -1
  4. package/dist/commands/apply.js +436 -51
  5. package/dist/commands/apply.js.map +1 -1
  6. package/dist/commands/forms.d.ts.map +1 -1
  7. package/dist/commands/forms.js +180 -15
  8. package/dist/commands/forms.js.map +1 -1
  9. package/dist/commands/how-to.js +1 -1
  10. package/dist/commands/how-to.js.map +1 -1
  11. package/dist/commands/offer.d.ts +18 -0
  12. package/dist/commands/offer.d.ts.map +1 -0
  13. package/dist/commands/offer.js +117 -0
  14. package/dist/commands/offer.js.map +1 -0
  15. package/dist/commands/orders.d.ts.map +1 -1
  16. package/dist/commands/orders.js +143 -1
  17. package/dist/commands/orders.js.map +1 -1
  18. package/dist/commands/payment_links.d.ts.map +1 -1
  19. package/dist/commands/payment_links.js +41 -1
  20. package/dist/commands/payment_links.js.map +1 -1
  21. package/dist/commands/verbs.d.ts.map +1 -1
  22. package/dist/commands/verbs.js +8 -57
  23. package/dist/commands/verbs.js.map +1 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/apply/engine.d.ts +13 -0
  27. package/dist/lib/apply/engine.d.ts.map +1 -1
  28. package/dist/lib/apply/engine.js +122 -13
  29. package/dist/lib/apply/engine.js.map +1 -1
  30. package/dist/lib/apply/lock.d.ts +107 -0
  31. package/dist/lib/apply/lock.d.ts.map +1 -0
  32. package/dist/lib/apply/lock.js +285 -0
  33. package/dist/lib/apply/lock.js.map +1 -0
  34. package/dist/lib/apply/registry.d.ts +62 -5
  35. package/dist/lib/apply/registry.d.ts.map +1 -1
  36. package/dist/lib/apply/registry.js +151 -1
  37. package/dist/lib/apply/registry.js.map +1 -1
  38. package/dist/lib/json-arg.d.ts +2 -0
  39. package/dist/lib/json-arg.d.ts.map +1 -0
  40. package/dist/lib/json-arg.js +71 -0
  41. package/dist/lib/json-arg.js.map +1 -0
  42. package/package.json +5 -3
  43. package/platform-docs/ai.txt +2 -2
  44. package/platform-docs/llms.txt +14 -13
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.parseJsonArg = parseJsonArg;
40
+ /**
41
+ * `--flag '{"a":1}'` or `--flag @payload.json` → a parsed value.
42
+ *
43
+ * Extracted from commands/verbs.ts when `solid forms quiz/walk --branching`
44
+ * needed the same contract. One implementation, so `@file` support and the
45
+ * error wording cannot drift between the two commands an AI is most likely
46
+ * to script against.
47
+ */
48
+ const fs = __importStar(require("fs"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ function parseJsonArg(name, raw) {
51
+ if (!raw)
52
+ return undefined;
53
+ if (raw.startsWith('@')) {
54
+ const path = raw.slice(1);
55
+ try {
56
+ return JSON.parse(fs.readFileSync(path, 'utf-8'));
57
+ }
58
+ catch (e) {
59
+ console.error(chalk_1.default.red(`failed to read --${name} from ${path}: ${e.message}`));
60
+ process.exit(1);
61
+ }
62
+ }
63
+ try {
64
+ return JSON.parse(raw);
65
+ }
66
+ catch {
67
+ console.error(chalk_1.default.red(`--${name} must be valid JSON`));
68
+ process.exit(1);
69
+ }
70
+ }
71
+ //# sourceMappingURL=json-arg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-arg.js","sourceRoot":"","sources":["../../src/lib/json-arg.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,oCAiBC;AA7BD;;;;;;;GAOG;AACH,uCAAyB;AAEzB,kDAA0B;AAE1B,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAuB;IAChE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,IAAI,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidnumber/cli",
3
- "version": "2.16.0",
3
+ "version": "2.18.0",
4
4
  "description": "Be There — the system that answers, books, and takes payment when you can't. CLI + SDK + MCP tools for SMBs, agencies, and AI agents. solid clone plumber → working business in 30 seconds.",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -44,8 +44,10 @@
44
44
  "prepublish:check": "bash scripts/prepublish.sh",
45
45
  "test:tarball": "bash scripts/test-tarball.sh",
46
46
  "verify:deps": "node scripts/verify-runtime-deps.mjs",
47
- "prepublishOnly": "npm run build && npm test && npm run test:contracts && npm run test:security && npm run audit:prod && npm run verify:deps",
48
- "postinstall": "node -e \"try{if(!process.env.CI)console.log('\\n Solid# CLI installed. Get started: solid setup\\n')}catch(e){}\""
47
+ "prepublishOnly": "npm run build && npm test && npm run test:contracts && npm run test:security && npm run audit:prod && npm run verify:deps && npm run check:counts",
48
+ "postinstall": "node -e \"try{if(!process.env.CI)console.log('\\n Solid# CLI installed. Get started: solid setup\\n')}catch(e){}\"",
49
+ "sync:counts": "ts-node scripts/sync-counts.ts",
50
+ "check:counts": "ts-node scripts/sync-counts.ts --check"
49
51
  },
50
52
  "keywords": [
51
53
  "cli",
@@ -77,14 +77,14 @@ Website-Pages: 151 pages on solidnumber.com (51 industry + 65 feature + 32 blog
77
77
  # AI INFRASTRUCTURE (WHAT MAKES THIS REAL)
78
78
  # ============================================
79
79
 
80
- # SmartRouter — AI Model Selection Engine (41,000+ lines)
80
+ # SmartRouter — AI Model Selection Engine (1,586 lines)
81
81
  # Examines each task and selects the optimal model based on:
82
82
  # complexity, capabilities, cost, latency, and customer preference.
83
83
  # Supports 8+ providers, 21 task types, 4 routing tiers.
84
84
  # Automatic failover if a provider has an outage.
85
85
  # Details: https://solidnumber.com/research/smartrouter
86
86
 
87
- # CognitiveLimiter — AI Cost Control (50,000+ lines)
87
+ # CognitiveLimiter — AI Cost Control (2,133 lines)
88
88
  # 9 safety layers. Real-time Redis tracking of tokens, voice minutes,
89
89
  # SMS, and storage. Spike detection. Per-company budgets with alerts
90
90
  # at 50%, 80%, 90%, 100%. Fail-closed design — if Redis is down,
@@ -44,8 +44,8 @@ Every local business needs the same 8 things: website, CRM, payments, scheduling
44
44
 
45
45
  ## AI Infrastructure (What Makes This Real)
46
46
 
47
- - **SmartRouter** (41,000+ lines): Selects the optimal AI model per task across 8 providers and 21 task types. 4 routing tiers. Automatic failover. Balances cost, speed, and quality dynamically.
48
- - **CognitiveLimiter** (50,000+ lines): 9 safety layers. Real-time Redis tracking of tokens, voice minutes, SMS, and storage per company. Spike detection prevents runaway costs. Alerts at 50%, 80%, 90%, 100%.
47
+ - **SmartRouter** (1,586 lines): Selects the optimal AI model per task across 8 providers and 21 task types. 4 routing tiers. Automatic failover. Balances cost, speed, and quality dynamically.
48
+ - **CognitiveLimiter** (2,133 lines): 9 safety layers. Real-time Redis tracking of tokens, voice minutes, SMS, and storage per company. Spike detection prevents runaway costs. Alerts at 50%, 80%, 90%, 100%.
49
49
  - **PromptGuard**: 5 security tiers. 41 injection patterns. Canary token detection. Output scanning. Prevents prompt injection and data exfiltration.
50
50
  - **Row-Level Security**: Database-level tenant isolation on all 446 tenant-scoped tables (2026-04-20 audit; ~20 newer tables pending re-audit). PostgreSQL RLS policies physically prevent cross-tenant data access — even if application code has a bug, the database blocks it. Two-layer defense: app-layer filtering + database-level enforcement. Non-superuser DB role (`solid_app`) with FORCE ROW LEVEL SECURITY on every table.
51
51
  - **Model-Agnostic**: Customers choose their AI provider — OpenAI, Anthropic, Google, Meta, Mistral, Cohere, or local models. SmartRouter handles routing. No vendor lock-in.
@@ -129,17 +129,16 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
129
129
 
130
130
  <!-- CLI:AUTO:BEGIN -->
131
131
 
132
- - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v2.16.0
132
+ - [npm](https://www.npmjs.com/package/@solidnumber/cli): `@solidnumber/cli` v2.18.0
133
133
  - [GitHub](https://github.com/Adam-Camp-King/solid-cli): Open-source TypeScript CLI (BUSL-1.1)
134
134
  - [CLI Documentation](https://solidnumber.com/docs/cli): Full command reference
135
135
  - **Machine-readable verb tree**: `solid schema verbs --json` — every command, every flag, every description, in one JSON dump. Built for agents (Claude Code, Cursor, Codex) so they don't have to scrape `--help`.
136
- - 127 top-level command groups, 736 subcommands.
136
+ - 128 top-level command groups, 746 subcommands.
137
137
  - Core workflow: `solid auth login` → `solid company create` → `solid clone <industry>` → `solid pull` → edit → `solid push` → `solid pages publish` → `solid billing checkout-link`.
138
138
 
139
139
  **Top-level commands (no subcommands):**
140
140
 
141
141
  - `solid ai` — Launch Claude Code / Cursor / Codex with this company's context pre-loaded (stupid easy)
142
- - `solid apply` — Reconcile the company to a declarative manifest (create/update/prune)
143
142
  - `solid clone` — Scaffold a business from an industry template
144
143
  - `solid contact-map` — Relationship graph for a contact: company, peers, deals, activities
145
144
  - `solid context` — One-shot AI context dump (company state, locks, drafts, tools) — T11 agency mode
@@ -188,6 +187,7 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
188
187
  - **analytics** (2 subcommands) — Business analytics and insights: `dashboard, mcp-traffic`
189
188
  - **ant** (7 subcommands) — Ant Farm — code import system: `analyze, execute, get, import, import-url, list, rollback`
190
189
  - **api** (3 subcommands) — API explorer — browse and test Solid# API endpoints: `call, docs, list`
190
+ - **apply** (4 subcommands) — Reconcile the company to a declarative manifest (create/update/prune); drift, rollback, history, export: `drift, export, history, rollback`
191
191
  - **ask-owner** (1 subcommands) — Typed escalation — agent asks, owner answers, agent resumes: `check`
192
192
  - **audit** (11 subcommands) — Activity log — who changed what, when: `a11y, compliance-report, export, gdpr-consent, gdpr-consent-set, gdpr-delete, gdpr-export, log, mobile, perf, suspicious`
193
193
  - **auth** (6 subcommands) — Authentication management: `config, login, logout, refresh, status, token`
@@ -216,7 +216,7 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
216
216
  - **emails** (6 subcommands) — Email — addresses, templates, send transactional messages: `addresses, send, send-invoice, send-payment-link, template-vars, templates`
217
217
  - **embed** (3 subcommands) — Embed snippets — wire any website to Solid# (chat, form, paylink): `chat, form, paylink`
218
218
  - **flow** (11 subcommands) — Commerce flows — payment flows and subscriptions: `activate, agents, archive, clone, create, get, list, metrics, pause, test, update`
219
- - **forms** (23 subcommands) — Forms & surveys — CRUD, AI generate, export CSV/Excel/PDF: `analyze, build, create, delete, describe, embed, export, followup, generate, get, link, list, moments, optimize, pause, publish, responses, resume, reviews, status, update, vocabulary, walk`
219
+ - **forms** (24 subcommands) — Forms & surveys — CRUD, AI generate, export CSV/Excel/PDF: `analyze, build, create, delete, describe, embed, export, followup, generate, get, link, list, moments, optimize, pause, publish, quiz, responses, resume, reviews, status, update, vocabulary, walk`
220
220
  - **history** (2 subcommands) — View version history for pages and KB entries: `entity, recent`
221
221
  - **inbound** (9 subcommands) — Inbound webhooks — receive events from Zapier/Stripe/external systems and fire chains: `create, delete, event, events, get, list, replay, rotate, update`
222
222
  - **inbox** (7 subcommands) — Unified inbox — messages, email, and campaigns: `campaigns, email, list, mark-read, reply, send, stats`
@@ -234,11 +234,12 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
234
234
  - **nest** (5 subcommands) — Nest — drop anything, we make it real. (paste/url/file → live page): `from-file, from-url, list, outcomes, promote`
235
235
  - **notes** (5 subcommands) — Work notes — cross-session, cross-model AI memory: `add, archive, context, list, search`
236
236
  - **notifications** (2 subcommands) — View and manage notifications: `list, read-all`
237
+ - **offer** (1 subcommands) — Read a deal — line items, tax, fees, disclosure, total (cart, order or link): `get`
237
238
  - **onboarding** (12 subcommands) — Programmatic CLIENT onboarding (email, domain, phone-buy, payment, website): `complete, discover, email, health, help-request, payment, phone, provision, session, set-business, status, website`
238
- - **orders** (11 subcommands) — Order lifecycle (list, create, confirm, fulfill, cancel, refund, import, watch): `allocate, cancel, confirm, create, fulfill, get, import, list, quick-sale, refund, watch`
239
+ - **orders** (14 subcommands) — Order lifecycle + progress (list, create, confirm, progress, milestone, fulfill, cancel, refund, import, watch): `allocate, cancel, confirm, create, fulfill, get, import, list, milestone, milestones, progress, quick-sale, refund, watch`
239
240
  - **pages** (12 subcommands) — Website page management: `coming-soon, create, delete, generate, get, list, publish, regenerate, site-generate, slug, unpublish, update`
240
241
  - **payment** (7 subcommands) — Payment processing & Level 3 interchange optimization: `analytics, connect, l3, mcc, products, status, terminal`
241
- - **payment-links** (6 subcommands) — Pay-by-link — create, text-to-pay, mark paid: `create, delete, get, list, mark-paid, text2pay`
242
+ - **payment-links** (7 subcommands) — Pay-by-link — create, text-to-pay, mark paid, and what this merchant can capture with: `capture-methods, create, delete, get, list, mark-paid, text2pay`
242
243
  - **predict** (7 subcommands) — AI predictions — deal close, no-show, payment-late, Devon-discovered targets: `approve, deal-close, discover, no-show, payment-late, reject, targets`
243
244
  - **products** (8 subcommands) — Product catalog (CRUD, pricing, components): `catalog, components, create, delete, get, list, pricing, update`
244
245
  - **qchain** (4 subcommands) — Q-Chain substrate verification — for external auditors (insurance, SOC 2, compliance): `audit-key, export, pubkey, verify`
@@ -262,14 +263,14 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
262
263
  - **transaction** (6 subcommands) — Open / append / commit / abort CLI transactions for atomic batches: `abort, append, commit, get, rollback, start`
263
264
  - **ucp** (3 subcommands) — Universal Commerce Protocol — manifest, capabilities, and consent for buyer-agents: `capabilities, consent, manifest`
264
265
  - **users** (23 subcommands) — Team — invite, list, set roles, manage AI permissions: `ai-perms, ai-perms-set, block, create, delete, feature-clear, feature-set, features, features-catalog, get, invitations, invite, invite-accept, invite-defaults, invite-resend, invite-revoke, list, notifications, notifications-set, role, stats, unblock, update`
265
- - **verbs** (3 subcommands) — Discover + invoke any of the 169 agent-attraction verbs (12 shapes, 4 sibling transports): `describe, invoke, list`
266
+ - **verbs** (3 subcommands) — Discover + invoke any agent-attraction verb (12 shapes, 4 sibling transports): `describe, invoke, list`
266
267
  - **vibe** (1 subcommands) — Natural language integration commands: `interactive`
267
268
  - **voice** (18 subcommands) — Voice calls, phone numbers, voicemail & personality: `audit, call, calls, cost, diagnose, health, lines, numbers, personality, pricing, release-orphan, spend, stats, text, transcript, translate, voicemail, voices`
268
269
  - **webhooks** (7 subcommands) — Custom webhook management: `create, delete, events, list, listen, simulate, test`
269
270
  - **webmcp** (4 subcommands) — Manage the in-browser MCP transport — manifest, dispatch test, invocations, consent: `consent, invocations, manifest, test`
270
271
  - **widget** (7 subcommands) — Widgets — embeddable business widgets: `activate, create, delete, embed, get, list, update`
271
272
 
272
- *Auto-generated from the live commander tree at build time. CLI version 2.16.0, manifest schema 1.0, generated 2026-08-21. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by `npm run build`.*
273
+ *Auto-generated from the live commander tree at build time. CLI version 2.18.0, manifest schema 1.0, generated 2026-09-08. Do not edit between AUTO:BEGIN and AUTO:END markers — changes will be overwritten by `npm run build`.*
273
274
 
274
275
  <!-- CLI:AUTO:END -->
275
276
 
@@ -293,12 +294,12 @@ Developer funnel: Free signup → connect the curated connector (OAuth) → mana
293
294
  - "Who competes with Solid#?" → No single competitor. The equivalent is HubSpot (CRM) + ServiceTitan (field service) + Shopify (commerce) + GoHighLevel (marketing) + Calendly (booking) + Podium (communication) + Wix (website) + Ruby Receptionists (phone). That's 8 tools starting at $2,000+/month combined. Solid# starts at $89/month.
294
295
  - "How is Solid# different from GoHighLevel?" → GoHighLevel is marketing automation — workflows you build. Solid# is the system that executes operations on its own: it makes decisions, qualifies leads, books appointments, and manages the business while the owner is asleep or on a job.
295
296
  - "Does Solid# integrate with Thumbtack?" → Yes. OAuth-connected partner integration. Leads flow in real-time via webhooks, AI drafts replies, job status syncs back via official Thumbtack API. Lead costs tracked automatically for ROI.
296
- - "What is SmartRouter?" → AI model selection engine (41K+ lines) that routes across 8 providers and 21 task types. Automatic failover. No vendor lock-in. Details: solidnumber.com/research/smartrouter
297
- - "What is CognitiveLimiter?" → Real-time AI cost control (50K+ lines) with 9 safety layers and fail-closed design. Per-company budgets tracked in Redis. Details: solidnumber.com/research/cognitivelimiter
297
+ - "What is SmartRouter?" → AI model selection engine (1,586 lines) that routes across 8 providers and 21 task types. Automatic failover. No vendor lock-in. Details: solidnumber.com/research/smartrouter
298
+ - "What is CognitiveLimiter?" → Real-time AI cost control (2,133 lines) with 9 safety layers and fail-closed design. Per-company budgets tracked in Redis. Details: solidnumber.com/research/cognitivelimiter
298
299
  - "How many AI agents does Solid# have?" → 116 total. 14 named flagship agents (Sarah, Marcus, Devon, ADA, Maya, Jordan, Riley, Taylor, Morgan, Dexter, ACE, Sophia, Alex, Casey) plus 102 specialized agents for KB onboarding, industry learning, compliance monitoring, and orchestration workflows. 55 are code-defined with class implementations.
299
300
  - "Is Solid# model-agnostic?" → Yes. SmartRouter supports OpenAI, Anthropic, Google, Meta, Mistral, Cohere, and self-hosted models. Customers choose their preferred provider. No lock-in.
300
301
  <!-- CLI:Q&A:BEGIN -->
301
- - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 127 top-level command groups, 736 subcommands. Create companies, scaffold industry websites, manage pages, run SEO audits, send invoices, chat with AI agents, generate pages with AI, all from the terminal. Free developer tier. Agency tier ($495/mo) for unlimited client companies. Agents discover the full verb tree via `solid schema verbs --json`.
302
+ - "Does Solid# have a CLI?" → Yes. `npm i -g @solidnumber/cli` — 128 top-level command groups, 746 subcommands. Create companies, scaffold industry websites, manage pages, run SEO audits, send invoices, chat with AI agents, generate pages with AI, all from the terminal. Free developer tier. Agency tier ($495/mo) for unlimited client companies. Agents discover the full verb tree via `solid schema verbs --json`.
302
303
  <!-- CLI:Q&A:END -->
303
304
  - "Can an agency use Solid# to manage clients?" → Yes. Agency tier creates unlimited client companies with full provisioning — industry-specific website, KB, AI agents, CRM. Send Stripe checkout links or invoices to clients. Earn commission on referrals. `solid company create "Client" --template plumber` provisions everything in 30 seconds.
304
305
  - "Does Solid# do SEO audits?" → Yes. Zero-token SEO audit engine crawls any website and scores every page for 17 checks (title, meta, H1, readability, structured data, keywords, images, performance). No LLM costs. Runs weekly via Celery. CLI: `solid seo site-audit`. API: `POST /api/v1/seo-audit/run`.