githubinferredactive
primr
provenance:github:blisspixel/primr
Turn any company URL into a strategic intelligence brief. Adaptive scraping + AI-powered research and synthesis.
README
# Primr [](https://github.com/blisspixel/primr/actions/workflows/ci.yml) [](https://opensource.org/licenses/MIT) [](https://www.python.org/downloads/) **Turn any company or organization URL into deep strategic analysis that gets a consultant maximally up to speed.** Primr extracts primary-source data from company and organization websites using adaptive, org-aware scraping that handles modern site architectures, then synthesizes external research into long-form strategic analysis using AI-powered research and synthesis (Grok 4.1 by default, or Gemini Deep Research via `--premium`). Runs as a CLI, an MCP server, an OpenClaw integration, and a Claude Skill. ``` primr "ExampleCo" https://example.co ``` About 35-45 minutes later: a deep strategic analysis covering competitive positioning, technology stack, strategic initiatives, likely constraints, and consultant-grade hypotheses, with dense references consolidated at the end. ~$0.55 in API costs. ## Why This Exists Company research is tedious. You visit the website, click around, search the company, read articles, synthesize it all, write it up. That process easily takes 1-2 hours per company and the output is usually unstructured notes. Primr does that entire workflow autonomously in about 35-45 minutes for about $0.55 in API costs. The output is deep, structured strategic analysis, competitive positioning, technology stack, strategic initiatives, financial profile, external validation, and a consultant-ready view of what matters most to validate in conversation. Whether you're researching a potential employer, evaluating an investment, preparing for a partnership, doing competitive analysis, or running due diligence, a single run replaces hours of manual work. ## What Makes It Different - **Adaptive scraping**: 8 retrieval methods from browser rendering to TLS fingerprinting to screenshot+vision extraction, with per-host optimization. Starts with full browser rendering (what works on 95%+ of modern sites) and falls back through increasingly specialized methods. - **Org-aware site selection**: Link discovery and prioritization now adapt for commercial companies, government sites, nonprofits, education, and healthcare organizations instead of assuming every site looks like a SaaS company. - **Fail-fast scrape quality gate**: Full/scrape modes now abort when site extraction is too thin, while still preserving short structured pages like contact, leadership, and org-chart references when they carry useful signal (override with `--skip-scrape-validation`). - **Autonomous external research**: Gemini Deep Research for comprehensive analysis, Grok 4.1 for fast turnaround — both plan queries, follow leads, cross-validate sources, and synthesize findings. - **Cost controls built in**: `--dry-run` estimates, usage tracking, and governance hooks for budget limits. - **Agent-native interfaces**: CLI, MCP server, OpenClaw integration, and Claude Skills, all first-class. Manual research takes hours. Primr typically runs in about 35-45 minutes and costs about $0.55 in API usage (varies by depth and site complexity). The output is long-form, strategically interpretive, cited where it matters, and readable enough to use before a real client conversation. ## Modes | Mode | What it does | Time | Cost | |------|--------------|------|------| | Default | Grok 4.20 hybrid: 4.20 reasoning + 4.1 writing + AI Strategy | ~35-45 min | ~$0.67 | | Default + multi-vendor | Add `--cloud-vendor aws azure` | ~45-55 min | ~$0.80 | | Default + strategy type | Add `--strategy-type customer_experience` | ~35-45 min | ~$0.75 | | `--grok-tier fast` | Grok 4.1 everywhere (cheaper, slightly lower quality) | ~35-45 min | ~$0.47 | | `--grok-tier max` | Grok 4.20 everywhere (diminishing returns on writing) | ~35-45 min | ~$4.29 | | `--premium` | Gemini + Deep Research + AI Strategy | 50-75 min | ~$5 | | `--premium` + multi-vendor | Add `--cloud-vendor aws azure` | 75-120 min | $6-9 | | `--premium --lite` | Pro model instead of DR for AI Strategy | 50-80 min | ~$4 | | `--mode scrape` | Crawl site + extract insights only | 5-10 min | $0.10 | | `--mode deep` | Gemini Deep Research on external sources only | 10-15 min | $2.50 | The default `primr` command auto-detects: when `XAI_API_KEY` is set, it uses the Grok 4.20 hybrid pipeline (4.20 for reasoning-heavy stages like gap analysis, workbook, and cross-validation; 4.1 for bulk writing). This delivers near-premium analytical quality at ~$0.67/run. Use `--grok-tier fast` for cheaper runs at slightly lower quality, or `--premium` for the Gemini + Deep Research pipeline for maximum depth. Naming note: historical references to "fast mode" in logs/code refer to this standard Grok pipeline. A separate true quick mode target (under 5 minutes) is planned as a future profile. **Strategy types** (use `primr --list-strategies` for details): `ai` (default), `customer_experience`, `modern_security_compliance`, `data_fabric_strategy`. Strategy types are defined by YAML configs in `src/primr/prompts/strategies/` and auto-discovered at runtime. The standard Grok pipeline includes research deepening (gap analysis + targeted search), cross-validation (weak section detection + re-generation), trust-polish, citation normalization, and constrained-evidence reasoning for sparse-company sections. Strategy documents get the same treatment plus pre-ship artifact repair when budgets, citations, or source inventories conflict. Dense references are kept primarily in the final Sources appendix so the narrative stays readable. Produces reports with 40-55 sources. DDG searches are free. Use `--dry-run` for accurate estimates based on your usage history. ## Versioned Model Evaluation (Quality vs Cost) When a new model or profile is released (for example, a new Pro/Flash/Grok variant), evaluate it with a repeatable run ID so decisions are data-driven. ### 1) Pick an eval version and fixed corpus - Example eval ID: `eval-2026-02-r1` - Use 5-10 representative companies (keep this set stable across model tests) - Save runs under a dedicated folder per profile: ```bash primr "ExampleCo A" https://example-a.com --mode full --output-dir output/evals/eval-2026-02-r1/full primr "ExampleCo A" https://example-a.com --mode full --lite --output-dir output/evals/eval-2026-02-r1/lite primr "ExampleCo A" https://example-a.com --fast --output-dir output/evals/eval-2026-02-r1/fast ``` Offline comparison (no API spend): ```bash primr --eval --eval-id eval-2026-02-r1 primr --eval --eval-id eval-2026-02-r1 --eval-company "ExampleCo" ``` By default, `--eval` auto-stages matching existing reports from `output/` into `output/evals/<eval-id>/<profile>/` and writes `staging_manifest.json` for reproducibility. Optional controlled fill-in for missing profile/company pairs (explicit spend caps required): ```bash primr --eval --eval-id eval-2026-02-r1 --eval-run-missing --eval-manifest eval_companies.csv --eval-max-new-runs 2 --eval-max-estimated-cost 12 ``` Optional LLM-judge overlays on staged reports: ```bash # Cloud judge (requires spend cap) primr --eval --eval-id eval-2026-02-r1 --eval-llm-judge --eval-judge-provider grok --eval-judge-model grok-4-1-fast-reasoning --eval-judge-max-cost 0.25 # Local judge against an Ollama/OpenAI-compatible endpoint primr --eval --eval-id eval-2026-03-local --eval-llm-judge --eval-judge-provider local --eval-judge-model qwen3:30b --eval-judge-base-url http://localhost:11434/v1 # Local multi-model sweep on the same staged company/profile pairs primr --eval --eval-id eval-2026-03-local-sweep --eval-llm-judge --eval-judge-provider local --eval-judge-models qwen3:30b qwen2.5-coder:32b-instruct-q5_K_M qwen2.5:14b --eval-judge-base-url http://localhost:11434/v1 # Local sweep from a ma [truncated…]
PUBLIC HISTORY
First discoveredMar 21, 2026
IDENTITY
inferred
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it →METADATA
platformgithub
first seenDec 17, 2025
last updatedMar 21, 2026
last crawled5 days ago
version—
README BADGE
Add to your README:
