Knowledge / Office / Research Matrix (S2 — v2 capability-based)
Scenario S2. Strongest coverage in the current ecosystem: search, reference management, notes, synthesis, documents, and diagrams all have first-party harnesses; Python/native fallbacks fill the rest.
Schema: docs/cli-matrix/matrix_registry.schema.md. Matrix plan: docs/cli-matrix/cli-matrix-plan.md.
Install
cli-hub matrix install knowledge-research
cli-hub matrix info knowledge-research
cli-hub matrix preflight knowledge-research --json
Provider selection constraints
- Use preflight as an availability report, not as a provider selector.
- Treat provider order as documentation order only.
- Choose from user requirements, output quality bar, offline needs, credential state, install cost, and provider notes.
- Escalate to paid or metered APIs only when credentials are already present or the user explicitly consents.
Offline context? Filter to offline: true providers.
Preflight
Run cli-hub matrix preflight knowledge-research --json first. Use the manual block below for extra probes or older cli-hub versions.
cli-hub list --json
python - <<'PY'
import importlib.util
for m in ("pyzotero","bibtexparser","trafilatura","readability","httpx","playwright",
"python_docx","openpyxl","pptx","reportlab","pypdf","pdfplumber","weasyprint",
"langchain","llama_index","haystack"):
print(m, importlib.util.find_spec(m) is not None)
PY
for b in pandoc qpdf pdftk exiftool latexmk tex dot mermaid plantuml hugo mkdocs jekyll; do
command -v "$b" >/dev/null && echo "$b: yes" || echo "$b: no"
done
for e in OPENAI_API_KEY ANTHROPIC_API_KEY GOOGLE_API_KEY PERPLEXITY_API_KEY TAVILY_API_KEY \
SERPAPI_API_KEY BRAVE_API_KEY FIRECRAWL_API_KEY \
NOTION_API_KEY SEMANTIC_SCHOLAR_API_KEY WORDPRESS_TOKEN GHOST_ADMIN_KEY; do
[ -n "${!e}" ] && echo "$e: set" || echo "$e: unset"
done
Suggest-to-user template
To enable <capability> via <provider>, please set <ENV_VAR>.
Cost: <cost notes>
Quality: <quality tier>
Reply 'skip' to fall back to <next provider>.
Example: To enable live Notion sync via the Notion API, please set NOTION_API_KEY. Cost: free tier suffices for most users. Quality: sota (round-trips block/page IDs). Reply 'skip' to fall back to local Obsidian vault + manual paste.
Capabilities
research.search — web / literature search
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-exa |
harness-cli |
EXA_API_KEY |
metered |
sota |
no |
cli-anything-browser / safari / clibrowser |
harness-cli |
browser installed |
free |
high |
no |
duckduckgo-search |
python |
pkg |
free |
good |
no |
googlesearch-python |
python |
pkg |
free |
good |
no |
| Perplexity API |
api |
PERPLEXITY_API_KEY |
paid |
sota |
no |
| Tavily |
api |
TAVILY_API_KEY |
metered |
high |
no |
| Brave Search |
api |
BRAVE_API_KEY |
metered |
good |
no |
| Google Custom Search |
api |
GOOGLE_API_KEY |
metered |
high |
no |
research.retrieve — fetch article text / scrape pages
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-browser / safari / clibrowser |
harness-cli |
harness installed |
free |
high |
no |
trafilatura |
python |
pkg |
free |
high |
yes |
readability-lxml |
python |
pkg |
free |
good |
yes |
httpx + manual parse |
python |
pkg |
free |
basic |
yes |
playwright |
python |
pkg + browsers |
free |
sota |
no |
| Firecrawl |
api |
FIRECRAWL_API_KEY |
metered |
sota |
no |
| ScrapingBee |
api |
SCRAPINGBEE_API_KEY |
paid |
high |
no |
research.reference — citations, BibTeX, references
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-zotero |
harness-cli |
Zotero installed |
free |
sota |
yes |
pyzotero |
python |
pkg + Zotero key |
free |
high |
no |
habanero (Crossref) |
python |
pkg |
free |
high |
no |
bibtexparser |
python |
pkg |
free |
good |
yes |
| Crossref REST |
api |
none |
free |
high |
no |
| Semantic Scholar |
api |
SEMANTIC_SCHOLAR_API_KEY (optional) |
free |
high |
no |
knowledge.note — note-taking / PKM
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-obsidian |
harness-cli |
Obsidian installed |
free |
sota |
yes |
cli-anything-mubu |
harness-cli |
Mubu installed |
free |
high |
no |
obsidian-cli |
public-cli |
bin + vault path |
free |
high |
yes |
raw markdown + git |
native |
git |
free |
good |
yes |
mdformat |
python |
pkg |
free |
good |
yes |
| Notion API |
api |
NOTION_API_KEY |
free |
sota |
no |
| Roam / Logseq sync |
— |
— |
— |
— |
— |
knowledge.outline — outlining
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-mubu |
harness-cli |
Mubu installed |
free |
high |
no |
OPML via lxml |
python |
pkg |
free |
good |
yes |
YAML outlines + yq |
native |
binary |
free |
good |
yes |
knowledge.synthesize — multi-doc synthesis / summarization
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-notebooklm |
harness-cli |
harness installed |
metered |
sota |
no |
cli-anything-intelwatch |
harness-cli |
harness installed |
free-metered |
high |
partial |
langchain / llama_index + local LLM |
python |
pkg + ollama |
free |
high |
yes |
haystack |
python |
pkg |
free |
good |
partial |
| Claude / OpenAI / Gemini (long context) |
api |
model key |
metered |
sota |
no |
document.author — write docs (DOCX, XLSX, PPTX, PDF)
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-libreoffice |
harness-cli |
LibreOffice installed |
free |
high |
yes |
cli-anything-anygen |
harness-cli |
harness installed |
free |
high |
yes |
python-docx / openpyxl / python-pptx / reportlab |
python |
pkg |
free |
good |
yes |
| Google Docs API |
api |
OAuth token |
metered |
sota |
no |
| Microsoft Graph |
api |
Azure app + token |
metered |
sota |
no |
document.format — convert / reformat
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
pandoc |
native |
binary |
free |
sota |
yes |
cli-anything-libreoffice (headless convert) |
harness-cli |
LibreOffice |
free |
high |
yes |
docx2pdf |
python |
pkg + Word/LO |
free |
good |
yes |
weasyprint |
python |
pkg |
free |
high |
yes |
| CloudConvert |
api |
CLOUDCONVERT_API_KEY |
metered |
sota |
no |
document.pdf — manipulate PDFs (split, merge, OCR, extract)
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
qpdf / pdftk |
native |
binary |
free |
sota |
yes |
pypdf |
python |
pkg |
free |
high |
yes |
pdfplumber |
python |
pkg |
free |
high |
yes |
pdf2image |
python |
pkg + poppler |
free |
good |
yes |
ocrmypdf |
native |
binary + tesseract |
free |
high |
yes |
| Adobe PDF Services |
api |
Adobe creds |
paid |
sota |
no |
diagram.create — diagrams, flowcharts, architecture
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-drawio |
harness-cli |
drawio installed |
free |
sota |
yes |
cli-anything-mermaid |
harness-cli |
mermaid-cli |
free |
high |
yes |
graphviz (dot) |
native |
binary |
free |
high |
yes |
plantuml |
native |
binary |
free |
high |
yes |
publish.web — publish articles / blog posts
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
contentful |
public-cli |
bin + space token |
metered |
high |
no |
sanity |
public-cli |
bin + project token |
metered |
high |
no |
hugo / mkdocs / jekyll / pelican |
native/python |
binary/pkg |
free |
high |
yes |
| WordPress REST |
api |
app password |
free |
high |
no |
| Ghost Admin |
api |
GHOST_ADMIN_KEY |
free |
high |
no |
| Medium (legacy) |
api |
token |
free |
good |
no |
publish.latex — build PDFs from LaTeX
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
latexmk + texlive |
native |
binaries |
free |
sota |
yes |
pylatex |
python |
pkg + texlive |
free |
high |
yes |
| Overleaf API |
api |
OVERLEAF_API_KEY |
paid |
sota |
no |
| Tectonic |
native |
binary |
free |
high |
yes |
Recipes
literature-review — survey a topic, extract key papers, synthesize.
Uses: research.search, research.retrieve, research.reference, knowledge.synthesize, document.author.
meeting-to-doc — turn a recorded meeting into a structured document.
Uses: text.transcribe (via S1 matrix), knowledge.synthesize, document.author, document.format.
blog-post — research → write → publish.
Uses: research.search, research.retrieve, knowledge.synthesize, document.author, publish.web.
paper-draft — research + citations + LaTeX.
Uses: research.reference, knowledge.synthesize, document.author, publish.latex.
competitive-brief — fetch competitor pages, extract positioning, produce a briefing deck.
Uses: research.retrieve, knowledge.synthesize, document.author (PPTX).
pdf-book-digest — ingest a PDF book, OCR if needed, produce chapter summaries + quote file.
Uses: document.pdf, knowledge.synthesize, knowledge.note.
Known gaps
- Notion — Notion API exists as an escalation, but there is no harness for local-first Notion workflows. Recurs in S11 (team comms).
- Google Docs / Microsoft 365 live editing — API path only.
- LaTeX harness —
latexmk + Tectonic cover the native path, but no agent-native wrapper yet.
- Translation — no first-party CLI; Python fallback and APIs only.
Agent guidance
- Run preflight once per session. Many capabilities have strong Python or native paths that bypass the need to install anything.
- Prefer local for sensitive docs (legal, health, internal): use Obsidian + local LLM +
whisper rather than cloud APIs.
- Citations are load-bearing — for academic work always route through
research.reference so bibliographies stay consistent.
- Chain
document.format at the end, not the middle: author in the richest source format (markdown or LaTeX) and convert last.
- Workspace discipline — one directory per project; keep
refs.bib, source markdown, figures, and output PDFs colocated.
1---2name: cli-hub-matrix-knowledge-research3description: Capability-based multi-tool matrix for research, note-taking, document authoring, and publishing. Agents compose providers (CLI-Anything harnesses, public CLIs, Python libs, native binaries, cloud APIs) per capability.4---5
6# Knowledge / Office / Research Matrix (S2 — v2 capability-based)
7
8Scenario **S2**. Strongest coverage in the current ecosystem: search, reference management, notes, synthesis, documents, and diagrams all have first-party harnesses; Python/native fallbacks fill the rest.
9
10Schema: [`docs/cli-matrix/matrix_registry.schema.md`](../../docs/cli-matrix/matrix_registry.schema.md). Matrix plan: [`docs/cli-matrix/cli-matrix-plan.md`](../../docs/cli-matrix/cli-matrix-plan.md).
11
12## Install
13
14```bash
15cli-hub matrix install knowledge-research
16cli-hub matrix info knowledge-research
17cli-hub matrix preflight knowledge-research --json
18```
19
20---
21
22## Provider selection constraints
23
241. Use preflight as an availability report, not as a provider selector.
252. Treat provider order as documentation order only.
263. Choose from user requirements, output quality bar, offline needs, credential state, install cost, and provider notes.
274. Escalate to paid or metered APIs only when credentials are already present or the user explicitly consents.
28
29Offline context? Filter to `offline: true` providers.
30
31---
32
33## Preflight
34
35Run `cli-hub matrix preflight knowledge-research --json` first. Use the manual block below for extra probes or older `cli-hub` versions.
36
37```bash
38cli-hub list --json
39python - <<'PY'
40import importlib.util
41for m in ("pyzotero","bibtexparser","trafilatura","readability","httpx","playwright",
42 "python_docx","openpyxl","pptx","reportlab","pypdf","pdfplumber","weasyprint",
43 "langchain","llama_index","haystack"):
44 print(m, importlib.util.find_spec(m) is not None)
45PY
46for b in pandoc qpdf pdftk exiftool latexmk tex dot mermaid plantuml hugo mkdocs jekyll; do
47 command -v "$b" >/dev/null && echo "$b: yes" || echo "$b: no"
48done
49for e in OPENAI_API_KEY ANTHROPIC_API_KEY GOOGLE_API_KEY PERPLEXITY_API_KEY TAVILY_API_KEY \
50 SERPAPI_API_KEY BRAVE_API_KEY FIRECRAWL_API_KEY \
51 NOTION_API_KEY SEMANTIC_SCHOLAR_API_KEY WORDPRESS_TOKEN GHOST_ADMIN_KEY; do
52 [ -n "${!e}" ] && echo "$e: set" || echo "$e: unset"
53done
54```
55
56---
57
58## Suggest-to-user template
59
60```
61To enable <capability> via <provider>, please set <ENV_VAR>.
62 Cost: <cost notes>
63 Quality: <quality tier>
64Reply 'skip' to fall back to <next provider>.
65```
66
67Example: *To enable live Notion sync via the Notion API, please set `NOTION_API_KEY`. Cost: free tier suffices for most users. Quality: sota (round-trips block/page IDs). Reply 'skip' to fall back to local Obsidian vault + manual paste.*
68
69---
70
71## Capabilities
72
73### `research.search` — web / literature search
74
75| Provider | Kind | Requires | Cost | Quality | Offline |
76|---|---|---|---|---|---|
77| `cli-anything-exa` | harness-cli | `EXA_API_KEY` | metered | sota | no |
78| `cli-anything-browser` / `safari` / `clibrowser` | harness-cli | browser installed | free | high | no |
79| `duckduckgo-search` | python | pkg | free | good | no |
80| `googlesearch-python` | python | pkg | free | good | no |
81| Perplexity API | api | `PERPLEXITY_API_KEY` | paid | sota | no |
82| Tavily | api | `TAVILY_API_KEY` | metered | high | no |
83| Brave Search | api | `BRAVE_API_KEY` | metered | good | no |
84| Google Custom Search | api | `GOOGLE_API_KEY` | metered | high | no |
85
86### `research.retrieve` — fetch article text / scrape pages
87
88| Provider | Kind | Requires | Cost | Quality | Offline |
89|---|---|---|---|---|---|
90| `cli-anything-browser` / `safari` / `clibrowser` | harness-cli | harness installed | free | high | no |
91| `trafilatura` | python | pkg | free | high | yes |
92| `readability-lxml` | python | pkg | free | good | yes |
93| `httpx` + manual parse | python | pkg | free | basic | yes |
94| `playwright` | python | pkg + browsers | free | sota | no |
95| Firecrawl | api | `FIRECRAWL_API_KEY` | metered | sota | no |
96| ScrapingBee | api | `SCRAPINGBEE_API_KEY` | paid | high | no |
97
98### `research.reference` — citations, BibTeX, references
99
100| Provider | Kind | Requires | Cost | Quality | Offline |
101|---|---|---|---|---|---|
102| `cli-anything-zotero` | harness-cli | Zotero installed | free | sota | yes |
103| `pyzotero` | python | pkg + Zotero key | free | high | no |
104| `habanero` (Crossref) | python | pkg | free | high | no |
105| `bibtexparser` | python | pkg | free | good | yes |
106| Crossref REST | api | none | free | high | no |
107| Semantic Scholar | api | `SEMANTIC_SCHOLAR_API_KEY` (optional) | free | high | no |
108
109### `knowledge.note` — note-taking / PKM
110
111| Provider | Kind | Requires | Cost | Quality | Offline |
112|---|---|---|---|---|---|
113| `cli-anything-obsidian` | harness-cli | Obsidian installed | free | sota | yes |
114| `cli-anything-mubu` | harness-cli | Mubu installed | free | high | no |
115| `obsidian-cli` | public-cli | bin + vault path | free | high | yes |
116| raw markdown + `git` | native | `git` | free | good | yes |
117| `mdformat` | python | pkg | free | good | yes |
118| Notion API | api | `NOTION_API_KEY` | free | sota | no |
119| Roam / Logseq sync | — | — | — | — | — |
120
121### `knowledge.outline` — outlining
122
123| Provider | Kind | Requires | Cost | Quality | Offline |
124|---|---|---|---|---|---|
125| `cli-anything-mubu` | harness-cli | Mubu installed | free | high | no |
126| OPML via `lxml` | python | pkg | free | good | yes |
127| YAML outlines + `yq` | native | binary | free | good | yes |
128
129### `knowledge.synthesize` — multi-doc synthesis / summarization
130
131| Provider | Kind | Requires | Cost | Quality | Offline |
132|---|---|---|---|---|---|
133| `cli-anything-notebooklm` | harness-cli | harness installed | metered | sota | no |
134| `cli-anything-intelwatch` | harness-cli | harness installed | free-metered | high | partial |
135| `langchain` / `llama_index` + local LLM | python | pkg + ollama | free | high | yes |
136| `haystack` | python | pkg | free | good | partial |
137| Claude / OpenAI / Gemini (long context) | api | model key | metered | sota | no |
138
139### `document.author` — write docs (DOCX, XLSX, PPTX, PDF)
140
141| Provider | Kind | Requires | Cost | Quality | Offline |
142|---|---|---|---|---|---|
143| `cli-anything-libreoffice` | harness-cli | LibreOffice installed | free | high | yes |
144| `cli-anything-anygen` | harness-cli | harness installed | free | high | yes |
145| `python-docx` / `openpyxl` / `python-pptx` / `reportlab` | python | pkg | free | good | yes |
146| Google Docs API | api | OAuth token | metered | sota | no |
147| Microsoft Graph | api | Azure app + token | metered | sota | no |
148
149### `document.format` — convert / reformat
150
151| Provider | Kind | Requires | Cost | Quality | Offline |
152|---|---|---|---|---|---|
153| `pandoc` | native | binary | free | sota | yes |
154| `cli-anything-libreoffice` (headless convert) | harness-cli | LibreOffice | free | high | yes |
155| `docx2pdf` | python | pkg + Word/LO | free | good | yes |
156| `weasyprint` | python | pkg | free | high | yes |
157| CloudConvert | api | `CLOUDCONVERT_API_KEY` | metered | sota | no |
158
159### `document.pdf` — manipulate PDFs (split, merge, OCR, extract)
160
161| Provider | Kind | Requires | Cost | Quality | Offline |
162|---|---|---|---|---|---|
163| `qpdf` / `pdftk` | native | binary | free | sota | yes |
164| `pypdf` | python | pkg | free | high | yes |
165| `pdfplumber` | python | pkg | free | high | yes |
166| `pdf2image` | python | pkg + poppler | free | good | yes |
167| `ocrmypdf` | native | binary + tesseract | free | high | yes |
168| Adobe PDF Services | api | Adobe creds | paid | sota | no |
169
170### `diagram.create` — diagrams, flowcharts, architecture
171
172| Provider | Kind | Requires | Cost | Quality | Offline |
173|---|---|---|---|---|---|
174| `cli-anything-drawio` | harness-cli | drawio installed | free | sota | yes |
175| `cli-anything-mermaid` | harness-cli | mermaid-cli | free | high | yes |
176| `graphviz` (`dot`) | native | binary | free | high | yes |
177| `plantuml` | native | binary | free | high | yes |
178
179### `publish.web` — publish articles / blog posts
180
181| Provider | Kind | Requires | Cost | Quality | Offline |
182|---|---|---|---|---|---|
183| `contentful` | public-cli | bin + space token | metered | high | no |
184| `sanity` | public-cli | bin + project token | metered | high | no |
185| `hugo` / `mkdocs` / `jekyll` / `pelican` | native/python | binary/pkg | free | high | yes |
186| WordPress REST | api | app password | free | high | no |
187| Ghost Admin | api | `GHOST_ADMIN_KEY` | free | high | no |
188| Medium (legacy) | api | token | free | good | no |
189
190### `publish.latex` — build PDFs from LaTeX
191
192| Provider | Kind | Requires | Cost | Quality | Offline |
193|---|---|---|---|---|---|
194| `latexmk` + `texlive` | native | binaries | free | sota | yes |
195| `pylatex` | python | pkg + texlive | free | high | yes |
196| Overleaf API | api | `OVERLEAF_API_KEY` | paid | sota | no |
197| Tectonic | native | binary | free | high | yes |
198
199---
200
201## Recipes
202
203- **`literature-review`** — survey a topic, extract key papers, synthesize.
204 Uses: `research.search`, `research.retrieve`, `research.reference`, `knowledge.synthesize`, `document.author`.
205
206- **`meeting-to-doc`** — turn a recorded meeting into a structured document.
207 Uses: `text.transcribe` (via S1 matrix), `knowledge.synthesize`, `document.author`, `document.format`.
208
209- **`blog-post`** — research → write → publish.
210 Uses: `research.search`, `research.retrieve`, `knowledge.synthesize`, `document.author`, `publish.web`.
211
212- **`paper-draft`** — research + citations + LaTeX.
213 Uses: `research.reference`, `knowledge.synthesize`, `document.author`, `publish.latex`.
214
215- **`competitive-brief`** — fetch competitor pages, extract positioning, produce a briefing deck.
216 Uses: `research.retrieve`, `knowledge.synthesize`, `document.author` (PPTX).
217
218- **`pdf-book-digest`** — ingest a PDF book, OCR if needed, produce chapter summaries + quote file.
219 Uses: `document.pdf`, `knowledge.synthesize`, `knowledge.note`.
220
221---
222
223## Known gaps
224
225- **Notion** — Notion API exists as an escalation, but there is no harness for local-first Notion workflows. Recurs in S11 (team comms).
226- **Google Docs / Microsoft 365 live editing** — API path only.
227- **LaTeX harness** — `latexmk` + Tectonic cover the native path, but no agent-native wrapper yet.
228- **Translation** — no first-party CLI; Python fallback and APIs only.
229
230---
231
232## Agent guidance
233
234- **Run preflight once per session.** Many capabilities have strong Python or native paths that bypass the need to install anything.
235- **Prefer local** for sensitive docs (legal, health, internal): use Obsidian + local LLM + `whisper` rather than cloud APIs.
236- **Citations are load-bearing** — for academic work always route through `research.reference` so bibliographies stay consistent.
237- **Chain `document.format` at the end**, not the middle: author in the richest source format (markdown or LaTeX) and convert last.
238- **Workspace discipline** — one directory per project; keep `refs.bib`, source markdown, figures, and output PDFs colocated.