rdstudio
A knowledge base, dashboard and agent toolkit for research projects, which you
add to any repository. You and your agents write notes, decisions, tasks and
procedures as markdown in knowledge/, and a local dashboard lets you browse
them.
See a live preview: the dashboard
for rdstudio's own knowledge base, rebuilt on every push to main.
Requirements
- Python 3.11+ and uv
- git
- An agent harness: Claude Code and
OpenCode are set up automatically; others that read
AGENTS.mdand support MCP can use the same files
Install
uv tool install rdstudio # from PyPI; `uv tool upgrade rdstudio` later
or, with Node 24 or later, npm install -g rdstudio (or run it without
installing: npx rdstudio init). Either way you get the same program: its
command line runs on Node, which the Python package brings along as a
dependency, so there is nothing else to install. rdstudio-py runs the older
Python command line, which does the same things, while it lasts.
To work on rdstudio itself, clone the repository, run mise run setup, then
uv tool install --editable . --force inside it. Releases are made by pushing
a version tag (see knowledge/procedures/release.md).
Use it in a project
cd my-project
rdstudio init --human human:<your-name>
rdstudio serve # dashboard at http://localhost:8000
init writes AGENTS.md (with CLAUDE.md importing it), skills in
.claude/skills/, subagents for both harnesses, and MCP settings in .mcp.json
and opencode.json. Then open Claude Code or OpenCode in the project and ask
it to work through the bootstrap task. The agent agrees a structure for the
knowledge base with you and fills in the first notes.
Everyday commands
rdstudio verify <concept-id> # mark a note as checked by you
rdstudio check # check the knowledge base's format
rdstudio path <concept-id> # what to read first, from links rated "requires"
rdstudio --help # everything else
Open the dashboard on your other devices
Keep rdstudio serve on localhost and let Tailscale put it on your tailnet
over HTTPS, where only your devices can reach it (and a phone can install it as
a full-screen app):
rdstudio serve --port 8003
tailscale serve --bg --https=8003 http://127.0.0.1:8003
# open https://<machine>.<tailnet>.ts.net:8003/ on any device signed in to your tailnet
--bg keeps it across restarts; tailscale serve --https=8003 off removes it.
Use one port per project. rdstudio serve --host 0.0.0.0 also works, but
serves plain HTTP to your whole network.
Over HTTPS (or on localhost) the dashboard keeps a copy of itself and of the
notes in the browser: after the first visit it reopens at once, even over a
slow tunnel, and it can be read offline. Only changed notes are fetched again.
Add ?nosw to the address to bypass the copy.
Optional
-
Global knowledge base shared across projects:
rdstudio global init ~/knowledge -
papis references: add this to
rdstudio.toml:[references] backend = "papis" library = "<library name>"
-
Map settings: the Map tab's Tuning panel adjusts layout and routing; put values you like under
[map]inrdstudio.tomlto make them the project's defaults (seeknowledge/design/map-view.md). -
Learner record: a private record of what you study, kept outside the project (
rdstudio learnershows where). Off until you add this to~/.config/rdstudio/config.toml:[learner] enabled = true # path = "~/knowledge/learning" # optional: somewhere versioned and private
-
Static site:
rdstudio export <dir>writes a snapshot that any static host can serve (see below).
Publish to GitHub Pages
Anything you publish is public, including commit authors and messages in the Changes tab.
- In the repository's settings on GitHub, open Pages and set the source to GitHub Actions.
- Add
.github/workflows/knowledge-pages.yml:
name: Publish knowledge dashboard
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0 # full history, for the Changes tab
- uses: astral-sh/setup-uv@v7
- run: uvx --from git+https://github.com/lachlanjs/rdstudio@v0.1.0 rdstudio export _site
- uses: actions/upload-pages-artifact@v5
with:
path: _site
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v5
If rdstudio is a dev dependency of the project, use uv run rdstudio export _site instead of the uvx line. For other static hosts, run the same export
and upload _site/.
Develop rdstudio
Tasks live in mise.toml; run them with mise run <task> (mise tasks lists
them), or run the command each one names.
mise run setup # Node 24 (mise), Python and npm dependencies, Chromium for the benchmarks
mise run test # the Python tests, then the TypeScript packages
mise run core:test # the TypeScript core against the conformance fixtures
mise run core:agree ~/notes/knowledge # do the Python and TypeScript cores agree on a bundle?
mise run bench # load and map benchmarks, written to .bench/results/
mise run bench:compare .bench/results/a.json .bench/results/b.json
mise run bench:synth field /tmp/field # a synthetic project of about 1,300 notes
The benchmarks build and serve the differential geometry test bed (set
RDSTUDIO_BENCH_DG to its folder) and synthetic projects from one subject up
to a whole field, then time the first map and a fixed pan and zoom in headless
Chromium, as a desktop and as a phone. Compare any change that could affect
speed against a baseline. The platform plan is in
knowledge/design/platform.md.
The TypeScript core (packages/core) and command line (packages/cli) are
replacing the Python ones; fixtures/ holds the contract both keep (see
fixtures/README.md), and mise run agree runs every comparison between the
two: the core on real bundles, every command's output, every file build,
export and init write, the notes after the same writes, and the MCP
server's tools and replies. In a checkout, rdstudio runs the TypeScript
sources directly; mise run bundle builds the single file a release ships.
Licence
MIT. The bundled libraries and fonts keep their own licences, which are in
src/rdstudio/web/vendor/licenses/.
Release files for rdstudio 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rdstudio-0.2.0.tar.gz | 4.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rdstudio-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.6 MB
Release files / rdstudio-0.2.0.tar.gz
| Download URL | rdstudio-0.2.0.tar.gz |
|---|---|
| Size | 4.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5aabdf1685c6d30acf271d5e78f7669c18d2f165247e3853127d70eb728e4a60
|
|
BLAKE2b-256 checksum How to use checksums |
76ccbc8af1be878270c26a14274d163c75f52d67559231e77074d3d9d456e4f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / rdstudio-0.2.0-py3-none-any.whl
| Download URL | rdstudio-0.2.0-py3-none-any.whl |
|---|---|
| Size | 4.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d176a1bb6e94f32fc6497ad80b45e1c217c3519361aa3867bad42221def5247c
|
|
BLAKE2b-256 checksum How to use checksums |
faac1f57c525d2fc6163eb31bf4a6371332c9ed0927d8d82bb2c91fcdd97ad99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log