Files
nextcloud-integration/skills/nextcloud-files/SKILL.md
WLTBAgent 705f41a872 Add Nextcloud integration tools
- CLI tools: nextcloud-client, nextcloud-contacts, nextcloud-calendar, nextcloud-mail
- Build script with compile-time credentials
- Skills for all four tools
- Email tool supports IMAP/SMTP with attachment download
2026-02-20 17:24:13 +00:00

241 lines
6.5 KiB
Markdown

# Nextcloud Files Skill
**Purpose:** Manage files and folders on Nextcloud servers using the nextcloud-client CLI tool.
## Overview
This skill provides file operations for Nextcloud using the nextcloud-client Go binary. The CLI tool handles all WebDAV operations and XML parsing.
## Prerequisites
- Go compiler (for building CLI tool)
- Nextcloud server URL
- Nextcloud username
- Nextcloud password (for app token retrieval)
## Bootstrap Process
**This skill will automatically build the CLI tool with your Nextcloud app token and then immediately forget all credentials.**
**Step 1: The skill will ask for:**
- Nextcloud server URL (e.g., https://teamworkapps.com)
- Nextcloud username (e.g., wltbagent@shortcutsolutions.net)
- Nextcloud password (your normal login credentials, not the app token)
**Step 2: The skill will:**
1. **Authenticate to Nextcloud** using your username and password
2. **Retrieve or generate an app token** from Nextcloud settings
3. **Build** all three CLI tools (files, contacts, calendar) with the app token
4. **Verify** that the nextcloud-client binary was created
5. **Immediately forget all credentials** (username, password, and app token are never stored)
**Step 3: You're ready!**
- Use the tool without passing any credentials
- The app token is embedded at compile time
- Example: `nextcloud-list` (no --url, --user, --token needed)
**Security Note:**
- **All credentials** (username, password, and app token) are only used during the bootstrap process
- **App token is retrieved automatically** using your normal login credentials
- **Credentials are never stored permanently** in any file or environment
- **The app token is embedded** in the compiled binary, which stays on your local system only
- **Do not distribute** the built binary outside your trusted environment
## Configuration
All credentials are embedded at compile time via Go ldflags. No runtime configuration needed.
### Build-Time Configuration (Recommended)
The skill will handle this automatically during bootstrap:
```bash
cd projects/nextcloud-integration/tools/go/nextcloud-client
go build -ldflags="-X 'main.BuildServerURL=https://teamworkapps.com' \
-X 'main.BuildUsername=wltbagent@shortcutsolutions.net' \
-X 'main.BuildToken=YOUR_APP_TOKEN'" \
-o ~/bin/nextcloud-client .
```
### Runtime Configuration (Fallback)
If not set at build time, the tool will check these environment variables:
```bash
export NEXTCLOUD_URL="https://cloud.example.com"
export NEXTCLOUD_USER="your-username"
export NEXTCLOUD_TOKEN="your-app-token"
```
### Command-Line Flags (Fallback)
Override credentials for specific commands using:
- `--url`
- `--user`
- `--token`
**Priority:** Build-time ldflags > Environment variables > Command-line flags
## Tool Reference
All tools can be used without passing credentials (they're embedded at compile time).
### `nextcloud-list` - List folder contents
```bash
# List root folder
nextcloud-list
# List specific folder
nextcloud-list /Documents
# List recursively
nextcloud-list /Documents --recursive
```
### `nextcloud-upload` - Upload files
```bash
# Upload file to root
nextcloud-upload localfile.txt /remote/path.txt
# Upload multiple files
nextcloud-upload *.pdf /Documents/
# Upload to specific folder
nextcloud-upload report.pdf /Documents/Reports/
```
### `nextcloud-download` - Download files
```bash
# Download file
nextcloud-download /remote/path.txt localfile.txt
# Download folder (requires manual implementation)
```
### `nextcloud-mkdir` - Create folder
```bash
# Create single folder
nextcloud-mkdir /NewFolder
# Create nested folders (auto-parents)
nextcloud-mkdir /Documents/2026/Projects
```
### `nextcloud-delete` - Delete files/folders
```bash
# Delete file
nextcloud-delete /file.txt
# Delete folder (recursive)
nextcloud-delete /OldFolder
```
### `nextcloud-move` - Move/rename files
```bash
# Move file
nextcloud-move /old/path.txt /new/path.txt
# Rename file
nextcloud-move /oldname.txt /newname.txt
# Move folder
nextcloud-move /OldFolder /NewFolder
```
### `nextcloud-copy` - Copy files
```bash
# Copy file
nextcloud-copy /source.txt /destination.txt
# Copy folder
nextcloud-copy /SourceFolder /DestinationFolder
```
### `nextcloud-info` - Get file metadata
```bash
# Get file info
nextcloud-info /Documents/report.pdf
```
## Use Cases
### 1. File Management Workflow
```bash
# Backup local files to Nextcloud
nextcloud-upload local-file.txt /Backups/file.txt
# Organize with folders
nextcloud-mkdir /Documents/2026
nextcloud-move /Downloads/report.pdf /Documents/2026/report.pdf
```
### 2. Folder Organization
```bash
# Create project structure
nextcloud-mkdir /Projects/WebsiteRedesign
nextcloud-mkdir /Projects/WebsiteRedesign/Assets
nextcloud-mkdir /Projects/WebsiteRedesign/Code
# Move files into folders
nextcloud-move /homepage.html /Projects/WebsiteRedesign/
nextcloud-move /style.css /Projects/WebsiteRedesign/Assets/
```
### 3. Backup & Restore
```bash
# Download folder for backup
nextcloud-download /Documents documents-backup.zip
# Restore from backup
# (Implementation needed for folder download as ZIP)
```
## Error Handling
The nextcloud-client binary provides clear error messages:
| Error | Meaning | Action |
|-------|---------|--------|
| Error: URL, user, and token are required | Missing credentials | Re-run bootstrap process |
| unexpected status: 401 | Unauthorized | App token expired, re-bootstrap |
| unexpected status: 403 | Forbidden | Check app token permissions |
| unexpected status: 404 | Not Found | File doesn't exist |
| unexpected status: 409 | Conflict | Resource already exists |
| unexpected status: 207 (expected 207 Multi-Status) | PROPFIND error | Check path and permissions |
| upload failed with status: xxx | Upload error | Check file size and permissions |
## Best Practices
1. No runtime configuration needed (credentials embedded)
2. Always include trailing slash in directory paths
3. Check file sizes before large uploads
4. Handle ETags - Check for concurrent updates (not yet implemented)
5. Set Content-Type correctly - Binary handles this automatically
6. Handle errors gracefully - CLI provides clear error messages
## Dependencies
- `~/bin/nextcloud-client` - Go binary for WebDAV operations
- `curl` - Used by Go binary internally
- No XML parsing libraries needed (handled by Go)
## Related Skills
- **nextcloud-contacts** - For storing contact photos as files
- **nextcloud-calendar** - For attaching calendar events to files
---
*OpenClaw skill wrapper for nextcloud-client Go binary with automatic app token retrieval*