Install DIN
The free build is one download: eight programs, the plugin and an installer. No account, no signup and no card. This page covers release 1.0.31.
Which platforms
- Linux x86-64: supported. This is the platform the release is built and checked on.
- Windows x86-64: unverified. The zip carries the eight
.exeprograms, the plugin andinstall.ps1, but no install of this release on a real Windows machine has been checked yet. Try it if you like, and expect rough edges. - macOS: not yet. There is no macOS build. The Linux installer says so on a Mac and stops, rather than failing halfway through a copy.
The one line
curl -fsSL https://dinctrl.com/install | sh
That is steps 1 to 3 below, done for you, and it checks before it runs anything:
1. It refuses anything but Linux x86-64 by name (on a Mac: "DIN for macOS is not available yet"). 2. It reads SHA256SUMS from the download page's own directory. The archive's name, and so the version, comes from that list. 3. With minisign installed, it checks SHA256SUMS.minisig against the key printed below, which is written into the script and never fetched. Without it, it prints "signature not checked: install minisign to check it; the checksum was checked" and goes on. 4. It downloads the archive and stops unless its SHA-256 matches SHA256SUMS. 5. It unpacks the archive into a temporary directory and runs its install.sh, at your terminal, so the agent question below is still asked.
Any mismatch: it deletes the temporary directory, installs nothing, and exits non-zero. It never uses sudo. You can read it first: open dinctrl.com/install in a browser.
Every installer option works from the one line, after sh -s --:
curl -fsSL https://dinctrl.com/install | sh -s -- --agent cursor
curl -fsSL https://dinctrl.com/install | sh -s -- --prefix /opt/din --no-start
curl -fsSL https://dinctrl.com/install | sh -s -- --path
--path is the one-liner's own option: it adds export PATH="<prefix>/bin:$PATH" to your shell's profile (~/.bashrc, ~/.zshrc or ~/.profile). Without it, nothing is edited and the line is printed for you to run.
On Windows (unverified), in PowerShell:
irm https://dinctrl.com/install.ps1 | iex
& ([scriptblock]::Create((irm https://dinctrl.com/install.ps1))) -Agent cursor -Path
-Path adds %USERPROFILE%\din\bin to your user PATH. It checks the zip the same way and runs install.ps1 with the options you gave.
Or do it by hand, reading the archive before you run anything:
1. Download
Everything is on the download page. The release is five files:
din-1.0.31-linux-x86_64.tar.gz the Linux build
din-1.0.31-windows-x86_64.zip the Windows build
SHA256SUMS the SHA-256 of both archives
SHA256SUMS.minisig the minisign signature over SHA256SUMS
minisign.pub the public key, also printed below
From a shell:
curl -fsSLO https://dinctrl.com/download/din-1.0.31-linux-x86_64.tar.gz
curl -fsSLO https://dinctrl.com/download/SHA256SUMS
curl -fsSLO https://dinctrl.com/download/SHA256SUMS.minisig
2. Verify the download
Every release is signed with minisign. The public key (key id 36C9AB1B4CC4A458) is printed here, not only shipped beside the download it vouches for:
RWRYpMRMG6vJNhzPUkYbbwTX9ebqgd1rW50Rlkv+/BZ4uAPzfda0KTqK
# install minisign first: apt install minisign / brew install minisign / scoop install minisign
minisign -Vm SHA256SUMS -P RWRYpMRMG6vJNhzPUkYbbwTX9ebqgd1rW50Rlkv+/BZ4uAPzfda0KTqK
# -> Signature and comment signature verified
sha256sum --ignore-missing -c SHA256SUMS
# -> din-1.0.31-linux-x86_64.tar.gz: OK
If either check fails, stop: do not run the installer. The installer does not check the signature for you. It checks only that all eight programs are present before it writes anything.
On Windows, verify SHA256SUMS with minisign the same way, then compare the SHA-256 of the zip (for example Get-FileHash -Algorithm SHA256 din-1.0.31-windows-x86_64.zip) with its line in SHA256SUMS.
3. Install on Linux
tar xzf din-1.0.31-linux-x86_64.tar.gz && cd din-1.0.31
sh install.sh
export PATH="$HOME/din/bin:$PATH"
din status
din status is the check that matters. It names every program, says whether the field is up, says whether your token opens it, and tells you what to type next.
Pick your agent
Run at a terminal, the installer asks which agent DIN should capture live: Claude Code, Cursor or OpenCode, one or several. Or say it up front with --agent, once per agent. With no --agent and no terminal (a script, a pipe) it wires Claude Code.
- Live capture: Claude Code, Cursor, OpenCode. On the free build, one AI at a time; several agents on one field at once is paid.
- Import-only: Codex, Gemini CLI, Qwen, Cline and Grok are import-only.
--agent codexinstalls DIN, wires nothing live, and tells youdin import --source codex. - Graphiti and Zep: read by
din-import-graphiti, from a Graphiti or Zep endpoint you run. - ChatGPT: import is not supported yet.
Pick several on the free build and each is still wired and captured, but the field serves one: the newest, with the others set aside and kept in full. The installer says so in one line. din field activate <agent> switches which one is served; a paid plan keeps them all live together.
To change your mind after the install, there is no need to run the installer again:
din agent list # which agents are wired, and which one your field serves
din agent add cursor # wire claude-code, cursor or opencode
din agent remove cursor # unwire it; its records stay in your field
On the free build, din agent add first says what a second agent does and, at a terminal, asks before it wires anything (--yes to skip the question).
The installer takes these options:
sh install.sh install into ~/din and bring it up
sh install.sh --agent cursor which agent to capture live (repeat for several):
claude-code, cursor, opencode
sh install.sh --prefix /opt/din somewhere else
sh install.sh --dry-run print every step, touch nothing
sh install.sh --no-plugin skip the plugin: no agent is wired
sh install.sh --no-start lay it down but do not start the field
sh install.sh --port 8093 the field's loopback port
sh install.sh --console-port 8097 the local console's loopback port
sh install.sh --schedule also schedule the capture sweep (cron)
What the installer does
- On an upgrade, if the field from the same install is running, stops it with
din field stopfirst. If it does not stop, nothing is replaced. - Copies the eight programs into
~/din/bin, and linksdin-recalltodin(the name the plugin's/din recalllooks for). - Copies
LICENSE,NOTICEandTHIRD-PARTY-LICENSESinto~/din/share/doc/din. - Creates
~/din/records(your records),~/din/.din(settings) and~/din/logs. - Mints a field token into
~/din/.din/field.token, mode 600. No DIN program ever prints it. An existing token is never overwritten. - Writes
~/din/.din/field.envwith the field on127.0.0.1:8093and the console on127.0.0.1:8097. An existing file is left alone. - Writes the plugin's settings to
~/.din/plugin.env, pointing it at this install. An existing file is left alone. - Starts the field on loopback with
din field startand waits for it. - Wires the plugin into the agent you picked: Claude Code through its plugin installer, Cursor through its
hooks.json, OpenCode through its plugin directory.
Nothing in the install needs an API key. din import is the only step that calls a model, and it runs on your own key or your own claude CLI.
Install on Windows (unverified)
Unpack the zip, then from PowerShell in the unpacked folder:
powershell -ExecutionPolicy Bypass -File install.ps1
.\install.ps1 -Prefix C:\din
.\install.ps1 -DryRun
.\install.ps1 -Agent cursor,opencode
.\install.ps1 -NoPlugin
.\install.ps1 -NoStart
.\install.ps1 -Port 8093 -ConsolePort 8097
The default prefix is %USERPROFILE%\din. Windows has no mode bits, so the installer restricts the field token's ACL to your user with icacls, and says so if that fails.
Next
- Activate a paid licence, if you have one. The free build needs no activation.
- Upgrade to a later release.
- Uninstall, and what happens to your records.
- Push your records to a hosted field, if you have a hosted plan.
- The command-line reference.