OpenClaw Nextcloud Skill
This skill provides integration with a Nextcloud instance. It supports access to Notes, Tasks (Todos), Calendars, Files, and Contacts.
Configuration
The skill requires the following environment variables:
NEXTCLOUD_URL: The base URL of your Nextcloud instance (e.g.,https://cloud.example.com).NEXTCLOUD_USER: Your Nextcloud username.NEXTCLOUD_TOKEN: An App Password (recommended) or your login password.
Features
1. Notes (Read/Write)
- List, get, create, update, and delete notes.
- API:
index.php/apps/notes/api/v1/notes
2. Tasks / Todos (Read/Write)
- List, create, update, delete, and complete tasks.
- API: CalDAV (VTODO).
3. Calendar (Read/Write)
- List, create, update, and delete events.
- API: CalDAV (VEVENT).
4. Files (Read/Write)
- List, search, upload, download, and delete files.
- API: WebDAV.
5. Contacts (Read/Write)
- List, get, create, update, delete, and search contacts.
- API: CardDAV.
Usage
Run the skill via the bundled script.
node scripts/nextcloud.js <command> <subcommand> [options]
Commands
Notes
notes listnotes get --id <id>notes create --title <t> --content <c> [--category <cat>]notes edit --id <id> [--title <t>] [--content <c>] [--category <cat>]notes delete --id <id>
Tasks
tasks list [--calendar <c>]tasks create --title <t> [--calendar <c>] [--due <d>] [--priority <p>] [--description <d>]tasks edit --uid <u> [--calendar <c>] [--title <t>] [--due <d>] [--priority <p>] [--description <d>]tasks delete --uid <u> [--calendar <c>]tasks complete --uid <u> [--calendar <c>]
Calendar Events
calendar list [--from <iso>] [--to <iso>](Defaults to next 7 days)calendar create --summary <s> --start <iso> --end <iso> [--calendar <c>] [--description <d>]calendar edit --uid <u> [--calendar <c>] [--summary <s>] [--start <iso>] [--end <iso>] [--description <d>]calendar delete --uid <u> [--calendar <c>]
Calendars (list available calendars)
calendars list [--type <tasks|events>]
Files
files list [--path <path>]files search --query <q>files get --path <path>(download file content)files upload --path <path> --content <content>files delete --path <path>
Contacts
contacts list [--addressbook <ab>]contacts get --uid <u> [--addressbook <ab>]contacts search --query <q> [--addressbook <ab>]contacts create --name <n> [--addressbook <ab>] [--email <e>] [--phone <p>] [--organization <o>] [--title <t>] [--note <n>]contacts edit --uid <u> [--addressbook <ab>] [--name <n>] [--email <e>] [--phone <p>] [--organization <o>] [--title <t>] [--note <n>]contacts delete --uid <u> [--addressbook <ab>]
Address Books (list available address books)
addressbooks list
Output Format
All outputs are JSON formatted.
Tasks List Output
{
"status": "success",
"data": [
{
"uid": "unique-task-id",
"calendar": "Calendar Name",
"summary": "Task title",
"status": "NEEDS-ACTION",
"due": "20260201T153000Z",
"priority": 0
}
]
}
due: CalDAV format date (YYYYMMDDTHHmmssZ) or nullpriority: 0-9 (0 = undefined, 1 = highest, 9 = lowest) or null
Calendar Events List Output
{
"status": "success",
"data": [
{
"uid": "unique-event-id",
"calendar": "Calendar Name",
"summary": "Event title",
"start": "20260205T100000Z",
"end": "20260205T110000Z"
}
]
}
Contacts List Output
{
"status": "success",
"data": [
{
"uid": "unique-contact-id",
"addressBook": "Address Book Name",
"fullName": "John Doe",
"name": "Doe;John;;;",
"phones": ["+1234567890"],
"emails": ["john@example.com"],
"organization": "ACME Inc",
"title": "Developer",
"note": "Met at conference"
}
]
}
phones: Array of phone numbers or nullemails: Array of email addresses or nullname: Structured name in vCard format (Last;First;Middle;Prefix;Suffix)
General Format
{
"status": "success",
"data": [ ... ]
}
or
{
"status": "error",
"message": "Error description"
}
Agent Behavior: Default Calendar Selection
When creating tasks or calendar events, if the user does not specify a calendar:
First time (no default set):
- Run
calendars list --type tasks(for tasks) orcalendars list --type events(for events) - Ask the user which calendar to use from the list
- Ask if they want to set it as the default for future operations
- Remember their choice in memory
- Run
If user sets a default:
- Remember
default_task_calendarand/ordefault_event_calendar - Use automatically for subsequent operations without asking
- Remember
If user declines to set a default:
- Ask again next time they create a task/event without specifying a calendar
User can always override:
- Explicitly specifying
--calendaralways takes precedence over the default
- Explicitly specifying
Memory Keys
default_task_calendar: Default calendar name for tasks (VTODO)default_event_calendar: Default calendar name for events (VEVENT)
Agent Behavior: Default Address Book Selection
When creating contacts, if the user does not specify an address book:
First time (no default set):
- Run
addressbooks list - Ask the user which address book to use from the list
- Ask if they want to set it as the default for future operations
- Remember their choice in memory
- Run
If user sets a default:
- Remember
default_addressbook - Use automatically for subsequent operations without asking
- Remember
If user declines to set a default:
- Ask again next time they create a contact without specifying an address book
User can always override:
- Explicitly specifying
--addressbookalways takes precedence over the default
- Explicitly specifying
Memory Keys
default_addressbook: Default address book name for contacts
Agent Behavior: Presenting Information
When displaying data to the user, format it in a readable way. Output may be sent to messaging platforms (Telegram, WhatsApp, etc.) where markdown does not render, so avoid markdown formatting.
General Guidelines
- Use emojis to make output scannable and friendly
- Do NOT use markdown formatting (no bold, italic,
code, tables, or lists with - or *) - Use plain text with line breaks for structure
- Convert technical formats (like CalDAV dates) to human-readable formats
- Group related items logically
Emoji Reference
Tasks: โ (completed), โฌ (pending), ๐ด (high priority), ๐ก (medium), ๐ข (low) Calendar: ๐ (event), โฐ (time), ๐ (location) Notes: ๐ (note), ๐ (category) Files: ๐ (file), ๐ (folder), ๐พ (size) Contacts: ๐ค (person), ๐ง (email), ๐ฑ (phone), ๐ข (organization) Status: โจ (created), โ๏ธ (updated), ๐๏ธ (deleted), โ (error)
Example Presentations
Tasks:
๐ Your Tasks
โฌ ๐ด Buy groceries โ Due: Tomorrow 3:30 PM
โฌ ๐ก Review PR #42 โ Due: Feb 5
โ
Send email to client
Calendar Events:
๐
Upcoming Events
๐๏ธ Team Standup
โฐ Mon, Feb 3 โข 10:00 AM - 10:30 AM
๐ Zoom
๐๏ธ Project Review
โฐ Wed, Feb 5 โข 2:00 PM - 3:00 PM
Contacts:
๐ค John Doe
๐ง john@example.com
๐ฑ +1 234 567 890
๐ข ACME Inc โ Developer
Files:
๐ Documents/
๐ report.pdf (2.3 MB)
๐ notes.txt (4 KB)
๐ Archive/
Date/Time Formatting
Convert CalDAV format 20260205T100000Z to readable format like Wed, Feb 5 โข 10:00 AM Show relative dates when helpful: "Tomorrow", "Next Monday", "In 3 days" Use the user's local timezone when possible