尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A local-first notebook that teaches: the AI hints, you run the code.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Dandelion is a notebook where the AI is a thinking partner, not a ghostwriter. You work in small steps, writing and running every cell yourself, and the AI asks a guiding question or gives a hint when you need one. It looks like the Claude desktop app, runs on your laptop, and switches to a remote GPU from a dropdown without changing how you work.
~/.config/dandelion, never in git, and the front end loads nothing from a CDN. The
same notebook runs against your laptop or an H100 through an SSH tunnel.You need uv and just
(brew install uv just).
git clone https://github.com/slegroux/dandelion.git && cd dandelion
uv sync --extra kernel --extra paper --extra web # the app, the kernel's numpy/torch stack, PDF + web readers
just start # kernel on :5055, UI on http://localhost:8000
just stop stops both, and just app builds a double-clickable Dandelion.app.
The LED in the top-right should be green: the UI has reached the kernel and code
runs for real. Amber means it fell back to an in-memory demo; just doctor
tells you why.
Then choose how Ask AI reaches a model, in ⚙ Settings:
| Route | You need | Billed |
|---|---|---|
| Claude subscription (Pro / Max) | the claude CLI, signed in (claude auth login; make it last) | your plan |
| ChatGPT subscription (Codex) | the codex CLI, signed in (codex login) | your plan |
| Claude API or GLM | an API key, pasted in Settings | per token |
A dialog is a column of cells: notes (markdown), code, and Ask AI prompts. Here is the loop, end to end.
1. Write code and run it. Variables persist between cells, as in Jupyter.
import numpy as np
sr, f0 = 8000, 100
t = np.arange(sr) / sr
sq = np.sign(np.sin(2 * np.pi * f0 * t)) # one second of a 100 Hz square wave
2. Ask, and get a nudge. Put $`expr` in a prompt and the AI receives its
live value, computed fresh each time you ask:
Why does a square wave only have odd harmonics? Don't give me the answer. My signal is
$`sq.shape`samples long.
It answers with a hint and a check you can run, then leaves the next step to you.
3. Let it edit, when you ask. Every cell has a number in its gutter. "Vectorise the loop in cell 4" rewrites that cell in place, and the new code waits there until you press Run.
4. Read a paper beside your notebook. Click 📄 and paste
arxiv.org/abs/1706.03762: the PDF becomes structured text with equations, tables
and figures. Highlight a passage, click → Notebook, and it arrives as a note
with an empty code cell below it for your version.
5. Ship what you learned. Tag cells, from any dialog, into a Python package:
#| export audiolib:layers # this cell goes to library `audiolib`, module `layers`
class Conv1d: ...
uv run python -m dandelion.cli library build audiolib ./audiolib # nbdev tangles it into a package
Click Use in kernel, and import audiolib works in any cell. Each generated
function links back to the cell you wrote it in.
| Editable cells | Rendered by default, click to edit; headings fold into sections |
| Linked cells | #_<id> links within and across dialogs; the AI can cite cells too |
| Live completion | From what you've actually run, via jedi |
| Live values in prompts | $`df.shape` sends the real number |
| Context you can see | Per-cell token counts; mute a cell to drop it, pin one to keep it |
| Three modes | learning, concise, standard |
| Cell edits, not an agent | Visible, in-notebook edits only; Write, Edit and Bash denied |
| Rich output | Matplotlib, _repr_html_ and _repr_png_, inline |
| Jupyter keys | Command and edit modes, /, /, , |
A target is just the server URL the client points at, defined in
targets.yaml. For a remote GPU, run the bundled kernel server there
and tunnel it back. The URL stays on localhost, and the port never touches the
public internet:
uv run python -m dandelion.cli up h100 # open the SSH tunnel
uv run python -m dandelion.cli doctor h100 # DNS, port, token, route: exactly what's broken
Then switch targets from the dropdown in the top bar. Code runs on the bundled
kernel server by default; with the solveit extra, Dandelion can instead connect to a
SolveIt server through Answer.AI's solveit_client. See
the guide.
just test # the suite runs offline: no server, subprocess or network
just lint
just dev # kernel + UI in the foreground; Ctrl+C stops both
| Path | What it is |
|---|---|
dandelion/app.py | The FastHTML UI: server-side rendering, htmx swaps |
dandelion/client.py | One connect() over the bundled kernel, solveit_client and an in-memory mock |
server/kernel_server.py | The kernel server: execution, rich output, completion |
dandelion/claude_cli.py, codex_cli.py | Ask AI over your Claude or ChatGPT subscription |
site/ | The landing page |
Renamed from Pappus (and before that, SolveIt Sidekick). On first start, Dandelion moves your data from
~/.config/pappusto~/.config/dandelionand leaves a link at the old path; converted papers keep their cache.PAPPUS_*andSIDEKICK_*settings still work as theirDANDELION_*equivalents. Notebook code that importedpappus.*modules now importsdandelion.*.
jkabddz| Papers and web pages | marker for PDFs, trafilatura for articles, or one section at a time |
| Cells into a library | Cross-dialog modules built with nbdev, with links back to the source cells |
| Saved and portable | Rolling backups, corrupt-file recovery, just backup / just restore |
| Export | Any dialog as .ipynb or markdown |