Dr. Claw
아이디어부터 논문까지 AI 에이전트와 함께하는 풀스택 연구 작업공간
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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 |