webdav
WebDAV mounts a group folder as a file workspace for you. Each group
folder is available at https://<host>/dav/<group>/,
so you can mount it with rclone, sync it or
edit a file in any editor.
how-to / webdav has the setup steps.
davd serves the groups directory and nothing more
The davd daemon is a thin wrapper around
sigoden/dufs, one Rust binary that serves a directory
over WebDAV. It mounts <data-dir>/groups/ at
/data inside its container and serves it on
:8080. That is all davd does.
davd does not know who you are. Authentication and the
limit to one group happen one step earlier, in proxyd.
Your edit applies on the next turn
The folder you see over WebDAV is the folder the agent reads on each
turn. Edit CLAUDE.md on your laptop, save it and send the
agent a message: the new runbook already applies, with no deploy and
no restart. Put a CSV in facts/, and the agent finds it on
the next recall.
Three commands list, mount and edit a folder
# list a group's files with curl + PROPFIND
curl -X PROPFIND https://<host>/dav/<group>/ \
-H 'Depth: 1' \
-H "Authorization: Bearer $TOKEN"
# mount it as a real filesystem
rclone mount mygroup:/dav/<group>/ ~/mnt/<group> --vfs-cache-mode writes
# now edit a file like any other
vim ~/mnt/<group>/CLAUDE.md
Mint $TOKEN on the host with
arizuko token -i <instance> issue bearer <folder> --scope <scope> --sub <your-sub>.
The dashboard issues no Bearer token. A browser can sign in at
/auth/login and use the JWT cookie instead.
proxyd checks the group before davd sees the request
Every /dav/<group>/<path> request reaches
proxyd first. proxyd verifies the JWT from
the cookie or the Bearer header, reads the groups claim of the user,
and compares the <group> in the URL with that
claim. If they do not match, proxyd returns 403, and
davd never sees the request. An operator with the
** grant reaches any folder.
proxyd blocks writes to two kinds of path
Even with a valid grant, proxyd refuses writes to some
paths inside the group folder. Only GET, HEAD, OPTIONS and PROPFIND
pass on these paths. Every other method returns 403. For COPY and MOVE,
proxyd checks the Destination path too.
- Files that can hold secrets
.env,*.pemand everything under.git/.<group>/logs/- Read-only, at any folder depth.
Only clients that send a Bearer header can sign in
- rclone and curl work, because they send
Authorization: Bearer <JWT>. Finder, Windows Explorer and davfs2 send HTTP Basic auth, so they cannot sign in. Mount with rclone, and open that mount in Finder or Explorer. how-to / webdav has the steps. - The JWT cookie of the browser opens
/dav/as well. Basic auth is not available.