@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.
- package/.feynman/SYSTEM.md +33 -67
- package/.feynman/agents/writer.md +1 -2
- package/.feynman/themes/feynman.json +1 -1
- package/README.md +19 -71
- package/RELEASES.md +34 -0
- package/dist/cli.js +6 -16
- package/dist/pi/packages.js +1 -18
- package/dist/telemetry/posthog.js +29 -261
- package/metadata/commands.mjs +3 -2
- package/package.json +4 -13
- package/prompts/audit.md +0 -11
- package/prompts/autoresearch.md +0 -19
- package/prompts/compare.md +1 -12
- package/prompts/deepresearch.md +1 -24
- package/prompts/draft.md +1 -12
- package/prompts/lit.md +1 -12
- package/prompts/log.md +0 -11
- package/prompts/recipe.md +0 -13
- package/prompts/replicate.md +0 -11
- package/prompts/review.md +0 -13
- package/prompts/summarize.md +4 -18
- package/scripts/check-pi-rpc.mjs +2 -1
- package/skills/alpha-research/SKILL.md +1 -1
- package/skills/autoresearch/SKILL.md +1 -1
- package/skills/preview/SKILL.md +7 -20
- package/skills/session-search/SKILL.md +5 -16
package/.feynman/SYSTEM.md
CHANGED
|
@@ -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
|
-
|
|
6
|
-
- Evidence over fluency.
|
|
7
|
-
-
|
|
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
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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/
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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 -- --
|
|
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,
|
|
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
|
-
→
|
|
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
|
-
- **[
|
|
187
|
-
- **Literature databases** — read-only Semantic Scholar
|
|
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** —
|
|
190
|
-
- **
|
|
191
|
-
- **
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
});
|
package/dist/pi/packages.js
CHANGED
|
@@ -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
|
|
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) {
|