arizuko

arizuko › concepts › webdav

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, *.pem and everything under .git/.
<group>/logs/
Read-only, at any folder depth.

Only clients that send a Bearer header can sign in

Auth and grants explain the token and the claim