Install
openclaw skills install openkm-restOpenKM Document Management via REST API (folders, documents, metadata, versioning, search, workflows)
openclaw skills install openkm-restThis skill provides a local CLI that accesses OpenKM exclusively via REST (no SOAP, no CMIS).
The agent uses shell calls to openkm_cli.py.
OPENKM_BASE_URL=https://openkm.example.com # WITHOUT /OpenKM
OPENKM_USERNAME=okm_admin
OPENKM_PASSWORD=secret
python3 openkm_cli.py list --folder-path /okm:root
Creates parent folders if they don't exist:
python3 openkm_cli.py ensure-structure --parts Folder1 Subfolder
python3 openkm_cli.py upload --okm-path /okm:root/Folder/file.pdf --local-path /path/file.pdf
python3 openkm_cli.py download --doc-id <uuid> --local-path /path/file.pdf
Move a document to another folder (using folder UUID as target):
python3 openkm_cli.py move --doc-id <doc-uuid> --target-path <folder-uuid>
python3 openkm_cli.py rename --doc-id <uuid> --new-name new_filename.pdf
python3 openkm_cli.py delete --doc-id <uuid>
Shows title, description, keywords, categories, and other metadata:
python3 openkm_cli.py properties --doc-id <uuid>
python3 openkm_cli.py set-properties --doc-id <uuid> --title "My Title" --description "My description"
python3 openkm_cli.py add-keyword --doc-id <uuid> --keyword "Invoice"
python3 openkm_cli.py remove-keyword --doc-id <uuid> --keyword "Invoice"
Category ID can be a UUID or path (e.g., /okm:categories/Finance):
python3 openkm_cli.py add-category --doc-id <uuid> --category-id <category-uuid-or-path>
python3 openkm_cli.py remove-category --doc-id <uuid> --category-id <category-uuid-or-path>
python3 openkm_cli.py versions --doc-id <uuid>
python3 openkm_cli.py download-version --doc-id <uuid> --version 1.0 --local-path /path/file_v1.pdf
Restores document to a previous version:
python3 openkm_cli.py restore-version --doc-id <uuid> --version 1.0
python3 openkm_cli.py search-content --content "invoice hosting"
python3 openkm_cli.py search-name --name "hetzner"
python3 openkm_cli.py search-keywords --keywords "Invoice,Hosting"
python3 openkm_cli.py search --content "server" --author "john.doe" --path "/okm:root"
Note: Workflow features require workflows to be configured in OpenKM. If workflows are not enabled, these commands will return 404.
python3 openkm_cli.py workflows
python3 openkm_cli.py workflows --name "approval"
python3 openkm_cli.py start-workflow --workflow-uuid <workflow-uuid> --doc-id <doc-uuid>
# Tasks for a document
python3 openkm_cli.py tasks --doc-id <uuid>
# Tasks for an actor
python3 openkm_cli.py tasks --actor-id john.doe
python3 openkm_cli.py complete-task --task-id <task-id> --transition "approve"
python3 openkm_cli.py comment-task --task-id <task-id> --message "Review complete"
python3 openkm_cli.py assign-task --task-id <task-id> --actor-id john.doe
Content-Type: application/xml for POST requests with path as bodyfldId, docId, dstId, nodeId, catId parameters accept either UUIDs or paths (e.g., /okm:root/Folder)target-path should be the UUID of the destination folder1.0, 1.1, 2.0, etc.The skill uses the OpenKM 6.3 REST API endpoints:
Folders:
GET /folder/getChildren - List folder contentsPOST /folder/createSimple - Create folderDocuments:
POST /document/createSimple - Upload documentGET /document/getContent - Download documentGET /document/getProperties - Get document metadataPUT /document/setProperties - Update title/descriptionPUT /document/move - Move documentPUT /document/rename - Rename documentDELETE /document/delete - Delete documentVersioning:
GET /document/getVersionHistory - Get version historyPUT /document/restoreVersion - Restore to versionGET /document/getContentByVersion - Download specific versionProperties/Metadata:
POST /property/addKeyword - Add keywordDELETE /property/removeKeyword - Remove keywordPOST /property/addCategory - Add categoryDELETE /property/removeCategory - Remove categorySearch:
GET /search/find - General search with filtersGET /search/findByContent - Full-text searchGET /search/findByName - Filename searchGET /search/findByKeywords - Keyword searchWorkflows:
GET /workflow/getAllProcessDefinitions - List workflowsGET /workflow/getAllProcessDefinitionsByName - Find workflow by namePOST /workflow/runProcessDefinition - Start workflowGET /workflow/findTaskInstances - Get tasks by documentGET /workflow/findTaskInstancesByActor - Get tasks by actorPOST /workflow/setTaskInstanceValues - Complete taskPOST /workflow/addTaskInstanceComment - Add commentPOST /workflow/setTaskInstanceActor - Assign task