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). - INLINECODE2 : Your Nextcloud username.
- INLINECODE3 : An App Password (recommended) or your login password.
Features
1. Notes (Read/Write)
- - List, get, create, update, and delete notes.
- API: INLINECODE4
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.
CODEBLOCK0
Commands
Notes
- - INLINECODE5
- INLINECODE6
- INLINECODE7
- INLINECODE8
- INLINECODE9
Tasks
- - INLINECODE10
- INLINECODE11
- INLINECODE12
- INLINECODE13
- INLINECODE14
Calendar Events
- -
calendar list [--from <iso>] [--to <iso>] (Defaults to next 7 days) - INLINECODE16
- INLINECODE17
- INLINECODE18
Calendars (list available calendars)
Files
- - INLINECODE20
- INLINECODE21
- INLINECODE22 (download file content)
- INLINECODE23
- INLINECODE24
Contacts
- - INLINECODE25
- INLINECODE26
- INLINECODE27
- INLINECODE28
- INLINECODE29
- INLINECODE30
Address Books (list available address books)
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 null - INLINECODE33 : 0-9 (0 = undefined, 1 = highest, 9 = lowest) or null
Calendar Events List Output
CODEBLOCK2
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 null - INLINECODE35 : Array of email addresses or null
- INLINECODE36 : Structured name in vCard format (Last;First;Middle;Prefix;Suffix)
General Format
CODEBLOCK4
or
CODEBLOCK5
Agent Behavior: Default Calendar Selection
When creating tasks or calendar events, if the user does not specify a calendar:
- 1. First time (no default set):
- Run
calendars list --type tasks (for tasks) or
calendars 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
- 2. If user sets a default:
- Remember
default_task_calendar and/or
default_event_calendar
- Use automatically for subsequent operations without asking
- 3. If user declines to set a default:
- Ask again next time they create a task/event without specifying a calendar
- 4. User can always override:
- Explicitly specifying
--calendar always takes precedence over the default
Memory Keys
- -
default_task_calendar: Default calendar name for tasks (VTODO) - INLINECODE43 : Default calendar name for events (VEVENT)
Agent Behavior: Default Address Book Selection
When creating contacts, if the user does not specify an address book:
- 1. 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
- 2. If user sets a default:
- Remember
default_addressbook
- Use automatically for subsequent operations without asking
- 3. If user declines to set a default:
- Ask again next time they create a contact without specifying an address book
- 4. User can always override:
- Explicitly specifying
--addressbook always takes precedence over the default
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:
CODEBLOCK6
Calendar Events:
CODEBLOCK7
Contacts:
CODEBLOCK8
Files:
CODEBLOCK9
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
OpenClaw Nextcloud 技能
该技能提供与 Nextcloud 实例的集成。支持访问笔记、任务(待办事项)、日历、文件和联系人。
配置
该技能需要以下环境变量:
- - NEXTCLOUDURL:Nextcloud 实例的基础 URL(例如 https://cloud.example.com)。
- NEXTCLOUDUSER:您的 Nextcloud 用户名。
- NEXTCLOUD_TOKEN:应用密码(推荐)或您的登录密码。
功能
1. 笔记(读/写)
- - 列出、获取、创建、更新和删除笔记。
- API:index.php/apps/notes/api/v1/notes
2. 任务/待办事项(读/写)
- - 列出、创建、更新、删除和完成任务。
- API:CalDAV(VTODO)。
3. 日历(读/写)
- - 列出、创建、更新和删除事件。
- API:CalDAV(VEVENT)。
4. 文件(读/写)
- - 列出、搜索、上传、下载和删除文件。
- API:WebDAV。
5. 联系人(读/写)
- - 列出、获取、创建、更新、删除和搜索联系人。
- API:CardDAV。
使用方法
通过捆绑脚本运行该技能。
bash
node scripts/nextcloud.js [options]
命令
笔记
- - notes list
- notes get --id
- notes create --title --content [--category ]
- notes edit --id [--title ] [--content ] [--category ]
- notes delete --id
任务
- - tasks list [--calendar ]
- tasks create --title [--calendar ] [--due ] [--priority
] [--description ]
- tasks edit --uid [--calendar ] [--title ] [--due ] [--priority
] [--description ]
- tasks delete --uid [--calendar ]
- tasks complete --uid [--calendar ]
日历事件
- - calendar list [--from ] [--to ](默认为未来 7 天)
- calendar create --summary
--start --end [--calendar ] [--description ] - calendar edit --uid [--calendar ] [--summary
] [--start ] [--end ] [--description ] - calendar delete --uid [--calendar ]
日历(列出可用日历)
- - calendars list [--type ]
文件
- - files list [--path ]
- files search --query
- files get --path (下载文件内容)
- files upload --path --content
- files delete --path
联系人
- - contacts list [--addressbook
] - contacts get --uid [--addressbook
] - contacts search --query
[--addressbook ]
- contacts create --name [--addressbook
] [--email ] [--phone ] [--organization ] [--title ] [--note ]
- contacts edit --uid [--addressbook
] [--name ] [--email ] [--phone ] [--organization ] [--title ] [--note ]
- contacts delete --uid [--addressbook
]
地址簿(列出可用地址簿)
输出格式
所有输出均为 JSON 格式。
任务列表输出
json
{
status: success,
data: [
{
uid: unique-task-id,
calendar: Calendar Name,
summary: Task title,
status: NEEDS-ACTION,
due: 20260201T153000Z,
priority: 0
}
]
}
- - due:CalDAV 格式日期(YYYYMMDDTHHmmssZ)或 null
- priority:0-9(0 = 未定义,1 = 最高,9 = 最低)或 null
日历事件列表输出
json
{
status: success,
data: [
{
uid: unique-event-id,
calendar: Calendar Name,
summary: Event title,
start: 20260205T100000Z,
end: 20260205T110000Z
}
]
}
联系人列表输出
json
{
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:电话号码数组或 null
- emails:电子邮件地址数组或 null
- name:vCard 格式的结构化姓名(姓;名;中间名;前缀;后缀)
通用格式
json
{
status: success,
data: [ ... ]
}
或
json
{
status: error,
message: Error description
}
代理行为:默认日历选择
创建任务或日历事件时,如果用户未指定日历:
- 1. 首次(未设置默认值):
- 运行 calendars list --type tasks(针对任务)或 calendars list --type events(针对事件)
- 询问用户从列表中选择要使用的日历
- 询问是否将其设置为未来操作的默认日历
- 在内存中记住用户的选择
- 2. 如果用户设置了默认值:
- 记住 default
taskcalendar 和/或 default
eventcalendar
- 后续操作自动使用,无需询问
- 3. 如果用户拒绝设置默认值:
- 下次用户创建任务/事件且未指定日历时再次询问
- 4. 用户始终可以覆盖:
- 明确指定 --calendar 始终优先于默认值
内存键
- - defaulttaskcalendar:任务的默认日历名称(VTODO)
- defaulteventcalendar:事件的默认日历名称(VEVENT)
代理行为:默认地址簿选择
创建联系人时,如果用户未指定地址簿:
- 1. 首次(未设置默认值):
- 运行 addressbooks list
- 询问用户从列表中选择要使用的地址簿
- 询问是否将其设置为未来操作的默认地址簿
- 在内存中记住用户的选择
- 2. 如果用户设置了默认值:
- 记住 default_addressbook
- 后续操作自动使用,无需询问
- 3. 如果用户拒绝设置默认值:
- 下次用户创建联系人且未指定地址簿时再次询问
- 4. 用户始终可以覆盖:
- 明确指定 --addressbook 始终优先于默认值
内存键
- - default_addressbook:联系人的默认地址簿名称
代理行为:信息呈现
向用户显示数据时,请以可读的方式格式化。输出可能会发送到消息平台(Telegram、WhatsApp 等),这些平台可能无法渲染 markdown,因此请避免使用 markdown 格式。
通用指南
- - 使用表情符号使输出易于浏览且友好
- 不要使用 markdown 格式(不要使用 粗体、斜体、代码、表格或带有 - 或 * 的列表)
- 使用纯文本和换行符来组织结构
- 将技术格式(如 CalDAV 日期)转换为人类可读的格式
- 将相关项目按逻辑分组
表情符号参考
任务:✅(已完成)、⬜(待处理)、🔴(高优先级)、🟡(中优先级)、🟢(低优先级)
日历:📅(事件)、