examples/skills/ov-resources/docs/filesystem.md
OpenViking provides Unix-like filesystem operations for the viking://resources/ namespace.
ov read — Read L2 full contentov read viking://resources/docs/api.md
Accepts file URIs only. Passing a directory returns INVALID_ARGUMENT (400) with structured details.expected="file", details.actual="directory" so clients can fall back to ov ls.
Parameters: uri (required), offset (line number, 0-indexed), limit (lines, -1 for all).
ov abstract — Read L0 abstract (~100 tokens)ov abstract viking://resources/docs/
Directories only.
ov overview — Read L1 overviewov overview viking://resources/docs/
Directories only.
ov ls — List directory contents# Basic listing
ov ls viking://resources/
# Simple paths only
ov ls viking://resources/ --simple
# Recursive
ov ls viking://resources/ --recursive
Parameters: uri (required), --simple, --recursive, --show-all-hidden, --node-limit.
Entry fields: name, size, mode, modTime, isDir, uri, meta.
ov tree — Directory tree structureov tree viking://resources/my-project/
Parameters: uri (required), --show-all-hidden, --node-limit, --level-limit.
ov stat — File/directory statusov stat viking://resources/docs/api.md
ov stat viking://resources/docs
For directories, returns count (estimated item count). isLocked reports whether a path lock or ancestor TreeLock is held.
ov write — Update or create a fileov write viking://resources/docs/api.md \
--content "# Updated API\n\nFresh content." \
--wait
Modes:
replace (default): overwrite existing fileappend: append to existing filecreate: create new file (fails if exists, accepts .md, .txt, .json, .yaml, .yml, .toml, .py, .js, .ts)--wait blocks until semantic/vector refresh completes. Parent directories are auto-created for create.
Derived semantic files cannot be written directly: .abstract.md, .overview.md, .relations.json.
ov mkdir — Create a directoryov mkdir viking://resources/new-project/
ov mkdir viking://resources/new-project/ --description "API docs directory"
--description writes to .abstract.md and queues for L0 vectorization.
ov rm — Remove file or directory# Remove single file
ov rm viking://resources/docs/old.md
# Remove directory recursively
ov rm viking://resources/old-project/ --recursive
rm is idempotent: removing a non-existent valid URI succeeds. Invalid URI formats return INVALID_URI. Recursive delete returns estimated_deleted_count.
ov mv — Move file or directoryov mv viking://resources/old-name/ viking://resources/new-name/
ov grep — Search by regex patternov grep viking://resources/ "authentication" --ignore-case
Parameters: uri, pattern (required), --ignore-case, --exclude-uri, --node-limit, --level-limit.
Response: matches with uri, line, content.
ov glob — Match files by glob patternov glob "**/*.md" --uri viking://resources/
ov glob "**/*.py" --uri viking://resources/
Parameters: pattern (required), --uri, --node-limit.
ov link — Create relations# Single link
ov link viking://resources/docs/auth/ viking://resources/docs/security/ \
--reason "Security best practices"
# Multiple links (via API/SDK)
ov relations — List relationsov relations viking://resources/docs/auth/
ov unlink — Remove a relationov unlink viking://resources/docs/auth/ viking://resources/docs/security/
OpenViking exposes a minimal WebDAV adapter at /webdav/resources:
PUT accepts UTF-8 text onlyOPTIONS, PROPFIND, GET, HEAD, PUT, DELETE, MKCOL, MOVEPUT does not auto-create parent collections; use MKCOL first