@companion-ai/feynman 0.5.2 → 0.5.4

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.
@@ -2,74 +2,40 @@ You are Feynman, a research-first AI agent.
2
2
 
3
3
  Your job is to investigate questions, read primary sources, compare evidence, design experiments when useful, and produce reproducible written artifacts.
4
4
 
5
- Operating rules:
6
- - Evidence over fluency.
7
- - Prefer papers, official documentation, datasets, code, and direct experimental results over commentary.
8
- - Separate observations from inferences.
9
- - State uncertainty explicitly.
5
+ Evidence:
6
+ - Evidence over fluency. Prefer papers, official documentation, datasets, code, and direct experimental results over commentary.
7
+ - Separate observations from inferences, and state uncertainty explicitly.
10
8
  - When a claim depends on recent literature or unstable facts, use tools before answering.
11
- - When discussing papers, cite title, year, and identifier or URL when possible.
12
- - Use visible Feynman alpha tools such as `alpha_search`, `alpha_get_paper`, `alpha_ask_paper`, and `alpha_read_code` for academic paper search, paper reading, paper Q&A, repository inspection, and persistent annotations.
13
- - Use `web_search`, `fetch_content`, and `get_search_content` first for current topics: products, companies, markets, regulations, software releases, model availability, model pricing, benchmarks, docs, or anything phrased as latest/current/recent/today.
14
- - Tool names are literal. For web search, call `web_search`; do not call non-existent aliases such as `search_web`, `google:search`, `google_search`, or `search_google`. For URL reading, call `fetch_content`; do not call bare `fetch`, `WebFetch`, or `read_url_content`.
15
- - To ask the user a question, write plain chat text and wait for the next user message. Do not call non-existent question tools such as `ask_user_question`, `ask_user`, `ask_followup_question`, or `user_choice`.
16
- - For shell-based alphaXiv access, call `feynman alpha ...` through `bash`. Do not call the user's bare global `alpha` binary; it may be stale or unpatched.
17
- - If a tool returns `Tool not found` or `Invalid URL`, do not retry the same invalid call. Map to the canonical visible tool name and argument shape, or stop and report the specific blocked capability.
18
- - For mixed topics, combine both: use web sources for current reality and paper sources for background literature.
19
- - Never answer a latest/current question from arXiv or alpha-backed paper search alone.
20
- - For AI model or product claims, prefer official docs/vendor pages plus recent web sources over old papers.
21
- - Use visible installed Pi research packages for broader web/PDF access, document parsing, citation/source retrieval, memory, session recall, and delegated research subtasks when they reduce friction. If a package tool is not visible, do not claim that capability exists; write the durable artifact and mark that specific capability blocked.
22
- - You are running inside the Feynman/Pi runtime with filesystem tools, package tools, and configured extensions. Do not claim you are only a static model, that you cannot write files, or that you cannot use tools unless you attempted the relevant tool and it failed.
23
- - If a tool, package, source, or network route is unavailable, record the specific failed capability and still write the requested durable artifact with a clear `Blocked / Unverified` status instead of stopping with chat-only prose.
24
- - Feynman ships project subagents for research work. Prefer the `researcher`, `writer`, `verifier`, and `reviewer` subagents for larger research tasks when decomposition clearly helps.
25
- - Use subagents when decomposition meaningfully reduces context pressure or lets you parallelize evidence gathering. For detached long-running work, prefer background subagent execution with `async: true`.
26
- - For deep research, act like a lead researcher by default: plan first, use hidden worker batches only when breadth justifies them, synthesize batch results, and finish with a verification pass.
27
- - For long workflows, externalize state to disk early. Treat the plan artifact as working memory and keep a task ledger plus verification log there as the run evolves.
28
- - For long-running or resumable work, use `CHANGELOG.md` in the workspace root as a lab notebook when it exists. Read it before resuming substantial work and append concise entries after meaningful progress, failed approaches, major verification results, or new blockers.
29
- - Do not create or update `CHANGELOG.md` for trivial one-shot tasks.
30
- - Do not force chain-shaped orchestration onto the user. Multi-agent decomposition is an internal tactic, not the primary UX.
31
- - For AI research artifacts, default to pressure-testing the work before polishing it. Use review-style workflows to check novelty positioning, evaluation design, baseline fairness, ablations, reproducibility, and likely reviewer objections.
32
- - Do not say `verified`, `confirmed`, `checked`, or `reproduced` unless you actually performed the check and can point to the supporting source, artifact, or command output.
33
- - Do not say a file edit, patch, correction, or reviewer fix was applied unless the relevant write/edit tool succeeded and you then verified the changed file on disk. If an edit fails, record the failure, retry with a smaller edit or full-file rewrite, and only mark the issue fixed after an explicit read, `rg`, `grep`, `diff`, `stat`, or equivalent check shows the old unsupported content is gone and the corrected content exists.
34
- - Never invent or fabricate experimental results, scores, datasets, sample sizes, ablations, benchmark tables, figures, images, charts, or quantitative comparisons. If the user asks for a paper, report, draft, figure, or result and the underlying data is missing, write a clearly labeled placeholder such as `No experimental results are available yet` or `TODO: run experiment`.
35
- - Every quantitative result, figure, table, chart, image, or benchmark claim must trace to at least one explicit source URL, research note, raw artifact path, or script/command output. If provenance is missing, omit the claim or mark it as a planned measurement instead of presenting it as fact.
36
- - When a task involves calculations, code, or quantitative outputs, define the minimal test or oracle set before implementation and record the results of those checks before delivery.
37
- - If a plot, number, or conclusion looks cleaner than expected, assume it may be wrong until it survives explicit checks. Never smooth curves, drop inconvenient variations, or tune presentation-only outputs without stating that choice.
38
- - When a verification pass finds one issue, continue searching for others. Do not stop after the first error unless the whole branch is blocked.
39
- - Use visualization tools only when they are visible in the current tool set and materially improve understanding. Prefer charts for quantitative comparisons, Mermaid for simple process/architecture diagrams, and interactive HTML widgets for exploratory visual explanations. If no chart/rendering tool is visible, write the chart specification or data table as a durable artifact instead of claiming a chart was generated.
40
- - Persistent memory is package-backed. Use `memory_search` to recall prior preferences and lessons, `memory_remember` to store explicit durable facts, and `memory_lessons` when prior corrections matter.
41
- - If the user says "remember", states a stable preference, or asks for something to be the default in future sessions, call `memory_remember`. Do not just say you will remember it.
42
- - For long-running local research work such as experiments, crawls, benchmark runs, or log-following, use the process package when it is visible. If it is not visible, run bounded foreground commands or record the exact blocked research-run status capability instead of claiming detached/background execution.
43
- - Prefer the smallest investigation or experiment that can materially reduce uncertainty before escalating to broader work.
44
- - When an experiment is warranted, write the code or scripts, run them, capture outputs, and save artifacts to disk.
45
- - Before pausing long-running work, update the durable state on disk first: plan artifact, `CHANGELOG.md`, and any verification notes needed for the next session to resume cleanly.
46
- - Treat polished scientific communication as part of the job: structure reports cleanly, use Markdown deliberately, and use LaTeX math when equations clarify the argument.
47
- - For any source-based answer, include an explicit Sources section with direct URLs, not just paper titles.
48
- - When citing papers from alpha-backed tools, prefer direct arXiv or alphaXiv links and include the arXiv ID.
49
- - Default toward delivering a concrete artifact when the task naturally calls for one: reading list, memo, audit, experiment log, or draft.
50
- - For user-facing workflows, produce exactly one canonical durable Markdown artifact unless the user explicitly asks for multiple deliverables.
51
- - If a workflow requests a durable artifact, verify the file exists on disk before the final response. If complete evidence is unavailable, save a partial artifact that explicitly marks missing checks as `blocked`, `unverified`, or `not run`.
52
- - Do not create extra user-facing intermediate markdown files just because the workflow has multiple reasoning stages.
53
- - Treat HTML/PDF preview outputs as temporary render artifacts, not as the canonical saved result.
54
- - Intermediate task files, raw logs, and verification notes are allowed when they materially reduce context pressure or improve auditability.
55
- - Strong default AI-research artifacts include: literature review, internal research review, reproducibility audit, source comparison, and paper-style draft.
56
- - Default artifact locations:
57
- - outputs/ for reviews, reading lists, and summaries
58
- - experiments/ for runnable experiment code and result logs
59
- - notes/ for scratch notes and intermediate synthesis
60
- - papers/ for polished paper-style drafts and writeups
61
- - Default deliverables should include: summary, strongest evidence, disagreements or gaps, open questions, recommended next steps, and links to the source material.
9
+ - For papers, use the alpha tools (`alpha_search`, `alpha_get_paper`, `alpha_ask_paper`, `alpha_read_code`) and `feynman_science_database_search`. In a shell, call `feynman alpha ...`, not a bare global `alpha`.
10
+ - For current topics (products, releases, pricing, benchmarks, docs, regulations, anything latest/current/recent), use `web_search` and `fetch_content` first. Never answer a current question from paper search alone. For mixed topics, use both.
11
+ - Cite title, year, and a direct URL or identifier; prefer arXiv or alphaXiv links with the arXiv ID. Source-based answers end with a Sources section of direct URLs.
62
12
 
63
- Default workflow:
64
- 1. Clarify the research objective if needed.
65
- 2. Search for relevant primary sources.
66
- 3. Inspect the most relevant papers or materials directly.
67
- 4. Synthesize consensus, disagreements, and missing evidence.
68
- 5. Design and run experiments when they would resolve uncertainty.
69
- 6. Write the requested output artifact.
13
+ Tools:
14
+ - Call only tools in your tool list. If a call returns `Tool not found` or `Invalid URL`, do not repeat it; use a listed tool or record the capability as blocked.
15
+ - To ask the user something, write plain chat text and wait for their reply.
16
+ - If a tool, source, or network route fails, record the failure and still write the requested artifact with a clear `Blocked` or `Unverified` status instead of stopping with chat-only prose.
17
+
18
+ Delegation:
19
+ - Use the `researcher`, `writer`, `verifier`, and `reviewer` subagents when decomposition reduces context pressure or parallelizes evidence gathering. Keep delegation internal; do not make the user manage it.
20
+ - A workflow is finished only when its final artifact is on disk. Before your final response, wait with `bg_wait` for every subagent whose result the artifact still needs; a launch receipt is not a result.
21
+ - For long workflows, write the plan to disk early and keep its task ledger and verification log current. If `CHANGELOG.md` exists in the workspace, read it before resuming substantial work and append concise entries after meaningful progress, failures, verification results, or blockers. Do not create it for one-shot tasks.
22
+ - Prefer the smallest investigation or experiment that can reduce uncertainty. When an experiment is warranted, write the code, run it, and save outputs to disk.
23
+
24
+ Integrity:
25
+ - Never invent results, scores, datasets, sample sizes, ablations, tables, figures, or quantitative comparisons. If data is missing, write a labeled placeholder such as `TODO: run experiment`.
26
+ - Every quantitative claim, figure, or table must trace to a source URL, research note, raw artifact path, or command output. Otherwise omit it or mark it as a planned measurement.
27
+ - For calculations or code, define the minimal checks before implementing and record their results before delivery. Treat results that look cleaner than expected as suspect until checked.
28
+ - Say `verified`, `confirmed`, `checked`, or `reproduced` only when you performed the check and can point to its evidence.
29
+ - Say an edit or fix was applied only after the write succeeded and a read, `grep`, or `diff` of the file shows it. If an edit fails, retry with a smaller edit or a full-file rewrite.
30
+ - When a verification pass finds one issue, keep looking for others.
31
+
32
+ Artifacts:
33
+ - Deliver one canonical Markdown artifact per workflow unless the user asks for more. Intermediate notes and logs are fine when they reduce context pressure or improve auditability.
34
+ - Locations: `outputs/` for reviews, reading lists, and summaries; `papers/` for paper-style drafts; `experiments/` for experiment code and logs; `notes/` for scratch notes.
35
+ - Verify the artifact exists on disk before the final response. If evidence is incomplete, save a partial artifact that marks missing checks `blocked`, `unverified`, or `not run`.
36
+ - Use Markdown tables for quantitative comparisons, Mermaid for processes and architectures, and LaTeX when equations clarify the argument.
37
+ - A default deliverable covers: summary, strongest evidence, disagreements or gaps, open questions, next steps, and sources.
70
38
 
71
39
  Style:
72
- - Concise, skeptical, and explicit.
73
- - Avoid fake certainty.
74
- - Do not present unverified claims as facts.
75
- - When greeting, introducing yourself, or answering "who are you", identify yourself explicitly as Feynman.
40
+ - Concise, skeptical, and explicit. No fake certainty.
41
+ - When greeting or asked who you are, identify yourself as Feynman.
@@ -36,10 +36,9 @@ Unresolved issues, disagreements between sources, gaps in evidence.
36
36
  ```
37
37
 
38
38
  ## Visuals
39
- - When the research contains quantitative data (benchmarks, comparisons, trends over time), generate charts only when a chart tool is visible; otherwise write a chart specification or source-backed table.
39
+ - Use Markdown tables for quantitative data (benchmarks, comparisons, trends). Plot only source-backed data, and save the plotting script next to the draft.
40
40
  - Do not create charts from invented or example data. If values are missing, describe the planned measurement instead.
41
41
  - When explaining architectures, pipelines, or multi-step processes, use Mermaid diagrams only when the structure is supported by the supplied evidence.
42
- - When a comparison across multiple dimensions would benefit from an interactive view, use an interactive UI tool only when one is visible and the data is source-backed.
43
42
  - Every visual must have a descriptive caption and reference the data, source URL, research file, raw artifact, or script it is based on.
44
43
  - Do not add visuals for decoration — only when they materially improve understanding of the evidence.
45
44
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/badlogic/pi-mono/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
3
  "name": "feynman",
4
4
  "vars": {
5
5
  "ink": "#d3c6aa",
package/README.md CHANGED
@@ -25,34 +25,22 @@ curl -fsSL https://feynman.is/install | bash
25
25
  irm https://feynman.is/install.ps1 | iex
26
26
  ```
27
27
 
28
- The one-line installer fetches the latest tagged release. To pin a version, pass it explicitly, for example `curl -fsSL https://feynman.is/install | bash -s -- 0.2.35`.
28
+ The one-line installer fetches the latest tagged release as a standalone bundle with its own Node.js runtime and verifies its SHA-256 before installing. To pin a version, pass it explicitly, for example `curl -fsSL https://feynman.is/install | bash -s -- 0.5.3`. Rerun the installer to upgrade; `feynman update` only updates optional Pi packages you installed.
29
29
 
30
- The installer downloads a standalone native bundle with its own pinned Node.js runtime and verifies the release SHA-256 before replacing an existing installation.
31
-
32
- To upgrade the standalone app later, rerun the installer. `feynman update` only refreshes optional Pi packages you installed; Pi and the core packages update with Feynman itself.
33
-
34
- To uninstall the standalone app, remove the launcher and runtime bundle, then optionally remove `~/.feynman` if you also want to delete settings, sessions, and installed package state. If you also want to delete alphaXiv login state, remove `~/.ahub`. See the installation guide for platform-specific paths.
35
-
36
- **npm alternative** (uses your local Node.js runtime):
30
+ **npm alternative** (uses your local Node.js `>=22.22.0 <26`):
37
31
 
38
32
  ```bash
39
33
  npm install -g @companion-ai/feynman
40
34
  ```
41
35
 
42
- To update an npm installation, run `npm install -g @companion-ai/feynman@latest`.
43
-
44
- If you installed the interim `@advaitpaliwal/feynman` package (0.3.48), migrate once:
36
+ If you installed the interim `@advaitpaliwal/feynman` package, migrate once:
45
37
 
46
38
  ```bash
47
39
  npm uninstall -g @advaitpaliwal/feynman
48
40
  npm install -g @companion-ai/feynman
49
41
  ```
50
42
 
51
- The command remains `feynman`; the native install commands above are unchanged. See the [installation guide](https://feynman.is/docs/getting-started/installation) for Node.js requirements and uninstall instructions.
52
-
53
- Local models are supported through the setup flow. For LM Studio, run `feynman setup`, choose `LM Studio`, and keep the default `http://localhost:1234/v1` unless you changed the server port. For LiteLLM, choose `LiteLLM Proxy` and keep the default `http://localhost:4000/v1`. For Ollama or vLLM, choose `Custom provider (baseUrl + API key)`, use `openai-completions`, and point it at the local `/v1` endpoint.
54
-
55
- To authenticate another hosted provider, run `feynman model login <provider>`. GitHub Copilot sign-in retries model discovery once when GitHub rate-limits the request. OpenRouter login opens an OAuth page and listens for a local callback; over SSH or in another headless environment, paste the browser's final redirect URL or authorization code into Feynman's prompt, or set `OPENROUTER_API_KEY` before launch to use API-key authentication without OAuth.
43
+ Then run `feynman setup` to sign in to a model provider. To use Feynman in an ACP editor such as Zed, run it through [pi-acp](https://github.com/svkozak/pi-acp): `"agent_servers": { "Feynman": { "command": "npx", "args": ["-y", "pi-acp"], "env": { "PI_ACP_PI_COMMAND": "feynman" } } }`. See the [installation guide](https://feynman.is/docs/getting-started/installation) for uninstalling and the [setup guide](https://feynman.is/docs/getting-started/setup) for local models (LM Studio, LiteLLM, Ollama, vLLM) and Amazon Bedrock.
56
44
 
57
45
  ### Skills Only
58
46
 
@@ -70,52 +58,18 @@ curl -fsSL https://feynman.is/install-skills | bash
70
58
  irm https://feynman.is/install-skills.ps1 | iex
71
59
  ```
72
60
 
73
- That installs the skill library into `~/.codex/skills/feynman` for Codex. You can also name the Codex target explicitly:
74
-
75
- **macOS / Linux:**
76
-
77
- ```bash
78
- curl -fsSL https://feynman.is/install-skills | bash -s -- --codex
79
- ```
80
-
81
- **Windows (PowerShell):**
82
-
83
- ```powershell
84
- & ([scriptblock]::Create((irm https://feynman.is/install-skills.ps1))) -Scope Codex
85
- ```
86
-
87
- For a repo-local Claude/agent install instead:
88
-
89
- **macOS / Linux:**
90
-
91
- ```bash
92
- curl -fsSL https://feynman.is/install-skills | bash -s -- --repo
93
- ```
94
-
95
- **Windows (PowerShell):**
96
-
97
- ```powershell
98
- & ([scriptblock]::Create((irm https://feynman.is/install-skills.ps1))) -Scope Repo
99
- ```
100
-
101
- That installs into `.agents/skills/feynman` under the current repository.
102
-
103
- For an OpenCode project-local install instead:
104
-
105
- **macOS / Linux:**
61
+ That installs the skill library into `~/.codex/skills/feynman` for Codex. For other targets, pass a scope:
106
62
 
107
63
  ```bash
108
- curl -fsSL https://feynman.is/install-skills | bash -s -- --opencode
64
+ curl -fsSL https://feynman.is/install-skills | bash -s -- --codex # ~/.codex/skills/feynman (default)
65
+ curl -fsSL https://feynman.is/install-skills | bash -s -- --repo # .agents/skills/feynman in the current repo
66
+ curl -fsSL https://feynman.is/install-skills | bash -s -- --opencode # .opencode/skills/feynman in the current repo
109
67
  ```
110
68
 
111
- **Windows (PowerShell):**
112
-
113
69
  ```powershell
114
- & ([scriptblock]::Create((irm https://feynman.is/install-skills.ps1))) -Scope OpenCode
70
+ & ([scriptblock]::Create((irm https://feynman.is/install-skills.ps1))) -Scope Codex # or -Scope Repo, -Scope OpenCode
115
71
  ```
116
72
 
117
- That installs into `.opencode/skills/feynman` under the current repository.
118
-
119
73
  These installers download the bundled `skills/` and `prompts/` trees plus the repo guidance files referenced by those skills. They do not install the Feynman terminal, bundled Node runtime, auth storage, or Pi packages.
120
74
 
121
75
  ---
@@ -124,16 +78,10 @@ These installers download the bundled `skills/` and `prompts/` trees plus the re
124
78
 
125
79
  ```
126
80
  $ feynman "what do we know about scaling laws"
127
- → Searches papers and web, produces a cited research brief
128
-
129
- $ feynman -- "- summarize the strongest evidence first"
130
- → Preserves a research prompt that begins with a dash instead of parsing it as a CLI option
131
-
132
- $ feynman --prompt="- summarize the strongest evidence first"
133
- → Runs a dash-leading research prompt once and exits
81
+ → Searches papers and the web, answers with cited sources
134
82
 
135
83
  $ feynman deepresearch "mechanistic interpretability"
136
- → Multi-agent investigation with parallel researchers, synthesis, verification
84
+ → Plan-first investigation with parallel researchers, synthesis, and citation verification
137
85
 
138
86
  $ feynman lit "RLHF alternatives"
139
87
  → Literature review with consensus, disagreements, open questions, and lab/PI corpus mode when the input names a research group
@@ -165,6 +113,7 @@ Ask naturally or use slash commands as shortcuts.
165
113
  | `/compare <topic>` | Source comparison matrix |
166
114
  | `/draft <topic>` | Paper-style draft from research findings |
167
115
  | `/autoresearch <idea>` | Bounded experiment loop with benchmark evidence |
116
+ | `/summarize <source>` | Summarize a paper, report, repo, or PDF without loading it raw into context |
168
117
  | `/btw <question>` | Side conversation while the main research agent is busy, with optional handoff back into the main thread |
169
118
  | `/outputs` | Browse all research artifacts |
170
119
 
@@ -183,19 +132,18 @@ Four bundled research agents, invoked by workflow prompts when decomposition hel
183
132
 
184
133
  ### Skills & Tools
185
134
 
186
- - **[AlphaXiv](https://www.alphaxiv.org/)** — paper search, Q&A, code reading, annotations (via Feynman's `alpha` tools and `feynman alpha` command)
187
- - **Literature databases** — read-only Semantic Scholar (citation-sorted search that surfaces seminal papers), OpenAlex (keyword and semantic search, citation graphs, authors, venues, OA status), arXiv ID lookup, PubMed (metadata, PMID/PMCID/DOI conversion, related articles, citation matching, copyright checks, PMC full-text routing), Europe PMC open-access full-text sections, bioRxiv/medRxiv preprints, and Crossref DOI metadata, with stable identifiers and endpoint provenance. Set the free `OPENALEX_API_KEY` ([create one](https://openalex.org/settings/api)) and optionally `SEMANTIC_SCHOLAR_API_KEY` ([request one](https://www.semanticscholar.org/product/api#api-key-form)) so searches use your own rate limits
135
+ - **[alphaXiv](https://www.alphaxiv.org/)** — paper search, Q&A, code reading, and annotations (via Feynman's `alpha` tools and `feynman alpha` command)
136
+ - **Literature databases** — read-only Semantic Scholar, OpenAlex, arXiv ID lookup, PubMed, Europe PMC full text, bioRxiv/medRxiv, and Crossref, with stable identifiers. Set the free `OPENALEX_API_KEY` ([create one](https://openalex.org/settings/api)) and optionally `SEMANTIC_SCHOLAR_API_KEY` ([request one](https://www.semanticscholar.org/product/api#api-key-form)) to use your own rate limits
188
137
  - **[Hugging Face Hub](https://huggingface.co/docs/hub/api)** — dataset metadata, split/schema inspection, and small file reads from model, dataset, and Space repos
189
- - **Web research** — multi-provider search, explicit proxy routing, bounded GitHub issue/PR documents, raw or question-grounded page retrieval, direct images, external fetched-content caching, stored-page passage lookup, and auditable source text; tools, commands, images, PDFs, and browser cookies remain independently gated
190
- - **Session search** — indexed recall across prior research sessions
191
- - **Observability** — opt-out PostHog usage metadata for CLI commands, research workflows, tools, and model calls (see [Telemetry](#telemetry))
192
- - **Research execution options** — Docker, plus Modal or RunPod when their CLIs are installed, for explicitly chosen replication, benchmark, or dataset-heavy experiment runs; not service deployment or generic cloud administration
138
+ - **Web research** — search, page fetching, and PDF extraction through [pi-web-access](https://github.com/nicobailon/pi-web-access); Exa works without a key, and `feynman search set` configures Perplexity, Exa, or Gemini
139
+ - **Documents** — local PDF and office-document parsing through [pi-docparser](https://github.com/maxedapps/pi-docparser)
140
+ - **Compute** — Docker, plus Modal or RunPod when their CLIs are installed, for replication and experiment runs you explicitly approve
193
141
 
194
142
  ---
195
143
 
196
144
  ### How it works
197
145
 
198
- Built on [Pi](https://github.com/badlogic/pi-mono) for the agent runtime, [alphaXiv](https://www.alphaxiv.org/) for paper search and analysis, and CLI tools for compute and execution. Runtime resources follow Pi's documented package model for [packages](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/packages.md), [extensions](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/extensions.md), and [skills](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/skills.md). Hugging Face inspection uses the public [Hub API endpoints](https://huggingface.co/docs/hub/api) and `HF_TOKEN` / `HUGGINGFACE_HUB_TOKEN` environment variables documented by [`huggingface_hub`](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/environment_variables). The ML recipe workflow was informed by the open-source [Hugging Face `ml-intern`](https://github.com/huggingface/ml-intern) research-agent repo, but is implemented as native Feynman prompts, skills, and read-only tools. Research outputs are source-grounded — research claims link to papers, docs, or repos with direct URLs.
146
+ Feynman runs on stock [Pi](https://github.com/earendil-works/pi) (`@earendil-works/pi-coding-agent`). Its prompts, skills, agents, and research tools load as a Pi [package](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/packages.md) alongside the bundled `pi-subagents`, `pi-web-access`, `pi-docparser`, and `pi-btw` packages. Paper search and analysis use [alphaXiv](https://www.alphaxiv.org/). Research claims link to papers, docs, or repos with direct URLs.
199
147
 
200
148
  ---
201
149
 
@@ -217,7 +165,7 @@ Feynman sends anonymous usage telemetry to PostHog by default and prints a one-t
217
165
 
218
166
  ---
219
167
 
220
- The bundled research runtime is updated as a coordinated set, including Pi, Alpha Hub's `alpha-mcp`, document parsing, web research, and subagents. See the [package stack](https://feynman.is/docs/reference/package-stack) and [release notes](https://feynman.is/docs/reference/releases) for versions and upgrade details.
168
+ The bundled Pi packages are pinned and update with Feynman, not through `feynman update`. See the [package stack](https://feynman.is/docs/reference/package-stack) and [release notes](https://feynman.is/docs/reference/releases).
221
169
 
222
170
  ### Contributing
223
171
 
package/RELEASES.md CHANGED
@@ -6,6 +6,40 @@ GitHub release notes are generated from the matching `## vX.Y.Z` section in this
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## v0.5.4 - 2026-09-24
10
+
11
+ ### Use Feynman from ACP editors
12
+
13
+ - `feynman --mode rpc` now accepts `--no-themes`, the Pi flag the [pi-acp](https://github.com/svkozak/pi-acp) adapter passes, so Feynman runs in ACP editors such as Zed. Point pi-acp at Feynman with `PI_ACP_PI_COMMAND=feynman`; the setup guide has the Zed settings.
14
+
15
+ ### Removed what did not work
16
+
17
+ - The optional `session-search` package preset is gone. It indexes `~/.pi/agent/sessions` and never saw Feynman's sessions in `~/.feynman/sessions`, and its `/search` collided with pi-web-access's. Search past sessions with `grep` or `rg` over `~/.feynman/sessions`; the session-search skill now shows how.
18
+ - `/preview` is no longer listed in `/help`: no bundled or optional package provides it. `feynman setup preview` still installs pandoc, and the preview docs show how to render artifacts to HTML or PDF.
19
+ - `/help` lists pi-web-access's real `/websearch` and `/curator` commands instead of `/web-results`, which pi-web-access 0.31 no longer registers.
20
+ - The autoresearch and alpha skills no longer mention tools and patches that do not exist.
21
+
22
+ ### Docs match the code
23
+
24
+ - Every docs page, the landing page, and the README were checked against the CLI, prompts, agents, and package code. Corrections include the setup flow (model access, optional packages, alphaXiv login, pandoc), where keys are stored (plain text in `~/.feynman/agent/auth.json` with user-only permissions, not encrypted), the verifier, reviewer, and writer roles and which workflows use them, workflow steps and output files, the web-search tools and commands, and dead Pi links (now `earendil-works/pi`).
25
+ - The landing page adds a PowerShell install command and drops cards for features that do not ship.
26
+
27
+ ## v0.5.3 - 2026-09-24
28
+
29
+ ### Leaner prompts, same research quality
30
+
31
+ - The system prompt and the 11 workflow prompts lost about 200 lines. A block of tool-name rules was copied into every workflow and repeated in the system prompt, and the prompts referred to memory, process, chart, and experiment tools Feynman does not ship, `FEYNMAN_SUMMARIZE_*` environment variables that nothing reads, and a PDF crash that no longer exists.
32
+ - Workflows now wait for their background subagents before the final answer. In one-shot `feynman --prompt` runs, a `/lit` run could end while its reviewer was still working and never write the provenance file.
33
+ - On the `/lit` eval with GPT-5.6 Terra, 4 of 4 questions finished, all 44 citations resolved with matching titles, and each question ran the researcher, verifier, and reviewer in under 11 minutes (0.5.2: 9-14 minutes, 43 of 43 citations).
34
+
35
+ ### Smaller install
36
+
37
+ - CLI telemetry sends its command events through posthog-node, like the rest of Feynman. It no longer also sends each command as an OpenTelemetry span and two log records, which removes nine `@opentelemetry` packages (about 28 MB). The events and what they contain are unchanged.
38
+
39
+ ### Known issue
40
+
41
+ - Claude Opus 5.5 refuses some biology literature reviews (for example `/lit CRISPR base editing`) with "The model refused to complete the request". The same topics run on GPT-5.6 Terra.
42
+
9
43
  ## v0.5.2 - 2026-09-23
10
44
 
11
45
  ### Faster, cheaper research runs
package/dist/cli.js CHANGED
@@ -18,7 +18,7 @@ import { verifyAlphaAuthStatus } from "./alpha-auth-status.js";
18
18
  import { ensureFeynmanAgentDir } from "./bootstrap/home.js";
19
19
  import { ensureFeynmanHome, getDefaultSessionDir, getFeynmanAgentDir, getFeynmanHome } from "./config/paths.js";
20
20
  import { launchPiChat, runPi } from "./pi/launch.js";
21
- import { installPiPackage, isOptionalPackagePresetSupported, listOptionalPackagePresets, MAX_NATIVE_PACKAGE_NODE_MAJOR, normalizeOptionalPackagePresetName, resolvePackageSource, updatePiPackages, } from "./pi/packages.js";
21
+ import { installPiPackage, listOptionalPackagePresets, normalizeOptionalPackagePresetName, resolvePackageSource, updatePiPackages, } from "./pi/packages.js";
22
22
  import { canonicalizeModelSpec, ensureFeynmanSettings, normalizeThinkingLevel, readJson, } from "./pi/settings.js";
23
23
  import { BUNDLED_PI_PACKAGES, buildPiEnv } from "./pi/runtime.js";
24
24
  import { getConfiguredServiceTier, normalizeServiceTier, setConfiguredServiceTier } from "./model/service-tier.js";
@@ -29,7 +29,7 @@ import { fetchLatestFeynmanVersion, getFeynmanUpgradeLines, isNewerVersion } fro
29
29
  import { runDoctor, runStatus } from "./setup/doctor.js";
30
30
  import { setupPreviewDependencies } from "./setup/preview.js";
31
31
  import { runSetup } from "./setup/setup.js";
32
- import { captureTelemetryEvent, emitTelemetryLog, getCliTelemetryMetadata, initializePostHogTelemetry, shutdownPostHogTelemetry, startTelemetrySpan, telemetryErrorProperties, telemetryFirstRunNotice, } from "./telemetry/posthog.js";
32
+ import { captureTelemetryEvent, getCliTelemetryMetadata, initializePostHogTelemetry, shutdownPostHogTelemetry, telemetryErrorProperties, telemetryFirstRunNotice, } from "./telemetry/posthog.js";
33
33
  import { ASH, printAsciiHeader, printInfo, printPanel, printSection, RESET, SAGE } from "./ui/terminal.js";
34
34
  import { createModelRuntime } from "./model/registry.js";
35
35
  import { cliCommandSections, formatCliWorkflowUsage, legacyFlags, readPromptSpecs, topLevelCommandNames, } from "../metadata/commands.mjs";
@@ -266,11 +266,6 @@ async function handlePackagesCommand(subcommand, args, piOptions) {
266
266
  if (!presetName) {
267
267
  throw new Error(`Unknown package preset: ${target}`);
268
268
  }
269
- if (!isOptionalPackagePresetSupported(presetName)) {
270
- console.log(`${presetName} is not available on this runtime.`);
271
- console.log(`Its sqlite-backed dependency is only supported through Node ${MAX_NATIVE_PACKAGE_NODE_MAJOR}.x.`);
272
- return;
273
- }
274
269
  const source = resolvePackageSource(presetName);
275
270
  if (configuredSources.has(source)) {
276
271
  console.log(`${source} already installed`);
@@ -385,15 +380,13 @@ export async function main() {
385
380
  const here = dirname(fileURLToPath(import.meta.url));
386
381
  const appRoot = resolve(here, "..");
387
382
  const feynmanVersion = loadPackageVersion(appRoot).version;
388
- initializePostHogTelemetry({ appVersion: feynmanVersion, serviceName: "feynman-cli" });
383
+ initializePostHogTelemetry({ appVersion: feynmanVersion });
389
384
  const telemetryNotice = telemetryFirstRunNotice();
390
385
  if (telemetryNotice)
391
386
  process.stderr.write(`${telemetryNotice}\n`);
392
387
  const commandTelemetry = getCliTelemetryMetadata(process.argv.slice(2), { knownCommands: getTelemetryCommandNames(appRoot) });
393
388
  const commandStartedAt = Date.now();
394
- const commandSpan = startTelemetrySpan("feynman.cli.command", commandTelemetry);
395
389
  captureTelemetryEvent("feynman_command_started", commandTelemetry);
396
- emitTelemetryLog("info", "feynman command started", commandTelemetry);
397
390
  try {
398
391
  await runMain({ here, appRoot, feynmanVersion });
399
392
  const durationMs = Date.now() - commandStartedAt;
@@ -403,9 +396,7 @@ export async function main() {
403
396
  duration_ms: durationMs,
404
397
  exit_code: exitCode,
405
398
  };
406
- commandSpan.end(exitCode === 0 ? "ok" : "error", completeProperties);
407
399
  captureTelemetryEvent(exitCode === 0 ? "feynman_command_completed" : "feynman_command_failed", completeProperties);
408
- emitTelemetryLog(exitCode === 0 ? "info" : "error", exitCode === 0 ? "feynman command completed" : "feynman command failed", completeProperties);
409
400
  }
410
401
  catch (error) {
411
402
  const durationMs = Date.now() - commandStartedAt;
@@ -414,10 +405,7 @@ export async function main() {
414
405
  duration_ms: durationMs,
415
406
  ...telemetryErrorProperties(error),
416
407
  };
417
- commandSpan.recordException(error);
418
- commandSpan.end("error", failureProperties);
419
408
  captureTelemetryEvent("feynman_command_failed", failureProperties);
420
- emitTelemetryLog("error", "feynman command failed", failureProperties);
421
409
  throw error;
422
410
  }
423
411
  finally {
@@ -455,6 +443,7 @@ async function runMain(input) {
455
443
  model: { type: "string" },
456
444
  "new-session": { type: "boolean" },
457
445
  "no-session": { type: "boolean" },
446
+ "no-themes": { type: "boolean" },
458
447
  prompt: { type: "string" },
459
448
  resume: { type: "boolean", short: "r" },
460
449
  "service-tier": { type: "string" },
@@ -675,7 +664,8 @@ async function runMain(input) {
675
664
  thinkingLevel: launchThinkingLevel,
676
665
  explicitModelSpec,
677
666
  resumeRecentSession,
678
- piArgs,
667
+ // ACP adapters such as pi-acp pass --no-themes with --mode rpc.
668
+ piArgs: values["no-themes"] ? [...piArgs, "--no-themes"] : piArgs,
679
669
  preLaunchNotice,
680
670
  ...promptOptions,
681
671
  });
@@ -1,6 +1,5 @@
1
1
  import { runPi } from "./launch.js";
2
2
  import { buildPiEnv } from "./runtime.js";
3
- export const MAX_NATIVE_PACKAGE_NODE_MAJOR = 22;
4
3
  export const OPTIONAL_PACKAGE_PRESETS = {
5
4
  memory: {
6
5
  description: "Research-session preference and correction memory.",
@@ -10,29 +9,13 @@ export const OPTIONAL_PACKAGE_PRESETS = {
10
9
  description: "Hindsight-backed research continuity memory.",
11
10
  source: "npm:@luxusai/pi-hindsight",
12
11
  },
13
- "session-search": {
14
- description: "Indexed recall for prior research session transcripts.",
15
- source: "npm:@kaiserlich-dev/pi-session-search",
16
- maxNodeMajor: MAX_NATIVE_PACKAGE_NODE_MAJOR,
17
- },
18
12
  };
19
- function parseNodeMajor(version) {
20
- return Number.parseInt(version.replace(/^v/, "").split(".")[0] ?? "0", 10) || 0;
21
- }
22
- export function supportsNativePackageSources(version = process.versions.node) {
23
- return parseNodeMajor(version) <= MAX_NATIVE_PACKAGE_NODE_MAJOR;
24
- }
25
13
  export function normalizeOptionalPackagePresetName(name) {
26
14
  const normalized = name.trim().toLowerCase();
27
15
  return normalized in OPTIONAL_PACKAGE_PRESETS ? normalized : undefined;
28
16
  }
29
- export function isOptionalPackagePresetSupported(name, version = process.versions.node) {
30
- const preset = OPTIONAL_PACKAGE_PRESETS[name];
31
- return !preset.maxNodeMajor || parseNodeMajor(version) <= preset.maxNodeMajor;
32
- }
33
- export function listOptionalPackagePresets(version = process.versions.node) {
17
+ export function listOptionalPackagePresets() {
34
18
  return Object.keys(OPTIONAL_PACKAGE_PRESETS)
35
- .filter((name) => isOptionalPackagePresetSupported(name, version))
36
19
  .map((name) => ({ name, ...OPTIONAL_PACKAGE_PRESETS[name] }));
37
20
  }
38
21
  export function resolvePackageSource(name) {