Vikunja Task Manager

VerifiedSafe

Manage Vikunja tasks, projects, labels, comments, relations, and attachments via the Vikunja REST API.

Sby Skills Guide Bot
ProductivityIntermediate
7/25/2026
Claude CodeCursorWindsurf
#vikunja#task-management#project-management#api#cli

Recommended for

Automated summary

This skill provides a Python CLI to manage Vikunja tasks, projects, labels, comments, relations, and attachments via the Vikunja REST API.

Strengths

  • Full coverage of Vikunja CRUD operations for tasks, projects, labels, and comments.
  • Advanced filtering syntax for tasks (due dates, priority, done status).
  • Supports label assignment and removal on tasks.

Limitations

  • Requires manual setup of API URL and token; no OAuth or SSO support.
  • Attachment and relation features are mentioned but not fully exposed via documented commands.
  • Python environment and dependencies must be prepared first.
When to use it

Use this skill when you need to programmatically manage Vikunja data from a CLI or as part of an AI workflow, e.g., creating tasks from a chat assistant.

When not to use it

Do not use this skill if you cannot access the Vikunja API or if a graphical interface is sufficient.

Security analysis

Safe
Quality score95/100

The skill describes a Python CLI wrapper for Vikunja REST API with no risky instructions; it only makes API calls using a stored token without any code execution beyond running the provided script.

No concerns found

How this analysis is made

Examples

List all tasks due today
Show me all my tasks that are due today in Vikunja.
Create a new project and a task
Create a project called 'Q1 Goals' with description 'Objectives for Q1' and then add a task 'Review Q1 progress' with high priority.
Apply a label to an existing task
Apply the label 'urgent' to task with ID 42.

name: vikunja description: > Manage Vikunja tasks, projects, labels, comments, relations, and attachments via the Vikunja REST API. Use this skill whenever the user asks to view, create, update, complete, or delete tasks or projects in Vikunja. allowed-tools: shell license: MIT

Overview

This skill provides a Python CLI (vikunja.py) that wraps the Vikunja REST API. Run all commands from this skill's base directory using:

python vikunja.py <group> <command> [options]

All output is JSON. Successful responses have a data key. List responses also include a _pagination key. Errors have an error key (and optionally code and http_status).


Prerequisites

  1. Python 3.10+ is installed.
  2. Dependencies are installed: pip install -r requirements.txt
  3. Config is set (one-time): python vikunja.py config set --url URL --token TOKEN
    • Get an API token from Vikunja → Settings → API Tokens

config — Connection settings

# Save connection details
python vikunja.py config set --url https://vikunja.example.com --token YOUR_API_TOKEN

# Show current config (token masked)
python vikunja.py config show

projects — Project management

# List projects (paginated)
python vikunja.py projects list [--page N] [--per-page N] [--search TEXT] [--archived]

# Get a single project
python vikunja.py projects get PROJECT_ID

# Create a project
python vikunja.py projects create --title "My Project" [--description TEXT] [--parent-id N]

# Update a project
python vikunja.py projects update PROJECT_ID [--title TEXT] [--description TEXT]

# Delete a project (and all its tasks)
python vikunja.py projects delete PROJECT_ID

tasks — Task management

# List all tasks (optionally filtered)
python vikunja.py tasks list \
  [--project-id N] \
  [--page N] [--per-page N] \
  [--search TEXT] \
  [--filter 'due_date < now && !done'] \
  [--sort-by due_date] [--order-by asc|desc]

# Get a single task
python vikunja.py tasks get TASK_ID

# Create a task in a project
python vikunja.py tasks create \
  --project-id N \
  --title "Task title" \
  [--description TEXT] \
  [--due-date 2024-12-31T23:59:59Z] \
  [--priority 0-5] \
  [--label-ids 1,2,3]

# Update a task (provide only fields to change)
python vikunja.py tasks update TASK_ID \
  [--title TEXT] \
  [--description TEXT] \
  [--due-date 2024-12-31T23:59:59Z] \
  [--priority 0-5] \
  [--done true|false] \
  [--percent-done 0.0-1.0]

# Delete a task
python vikunja.py tasks delete TASK_ID

Filter syntax

The --filter flag uses Vikunja's filter query language:

  • Fields: title, description, done, due_date, priority, start_date, end_date, percent_done, created, updated, project_id
  • Operators: =, !=, <, <=, >, >=, like
  • Values: bare strings, numbers, now, today, true, false
  • Combinators: && (and), || (or), ! prefix (not)
  • Examples: !done, due_date < now, priority >= 3 && !done, title like "%bug%"

Due date format

Use RFC3339: 2024-12-31T23:59:59Z or 2024-12-31T10:00:00+02:00.

Priority levels

| Value | Meaning | |-------|---------| | 0 | Unset | | 1 | Low | | 2 | Medium | | 3 | High | | 4 | Urgent | | 5 | DO NOW |


labels — Label management

# List all labels
python vikunja.py labels list [--search TEXT] [--page N] [--per-page N]

# Get a label
python vikunja.py labels get LABEL_ID

# Create a label
python vikunja.py labels create --title "Bug" [--color "#FF5733"] [--description TEXT]

# Update a label
python vikunja.py labels update LABEL_ID [--title TEXT] [--color "#RRGGBB"] [--description TEXT]

# Delete a label
python vikunja.py labels delete LABEL_ID

# Apply a label to a task
python vikunja.py labels apply --task-id N --label-id N

# Remove a label from a task
python vikunja.py labels remove --task-id N --label-id N

comments — Task comments

# List comments on a task
python vikunja.py comments list --task-id N

# Add a comment
python vikunja.py comments create --task-id N --text "Comment text (Markdown supported)"

# Delete a comment
python vikunja.py comments delete --task-id N --comment-id N

attachments — Task attachments

# List attachment metadata for a task
python vikunja.py attachments list --task-id N

# Download an attachment to disk
python vikunja.py attachments download --task-id N --attachment-id N [--output-dir ./downloads]
# Returns: {"data": {"saved_to": "/abs/path/to/file.pdf", "filename": "file.pdf"}}

relations — Task relations

Supported relation kinds: subtask, parenttask, related, duplicateof, duplicates, blocking, blocked, precedes, follows, copiedfrom, copiedto.

# List all relations for a task
python vikunja.py relations list TASK_ID

# Create a relation
python vikunja.py relations create --task-id N --other-id N --kind subtask

# Delete a relation
python vikunja.py relations delete --task-id N --other-id N --kind subtask

Common workflows

Find overdue tasks:

python vikunja.py tasks list --filter "due_date < now && !done" --sort-by due_date

Mark a task done:

python vikunja.py tasks update 42 --done true

Create a task with labels:

python vikunja.py tasks create --project-id 5 --title "Fix login bug" --label-ids 1,3 --priority 4

Download all attachments for a task:

# First list to get IDs
python vikunja.py attachments list --task-id 42
# Then download each one
python vikunja.py attachments download --task-id 42 --attachment-id 7 --output-dir ./downloads

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/vikunja-task-manager-mrzxup1g' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/vikunja-task-manager-mrzxup1g/download' --output '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md.part' && mv '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md.part' '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): shell

Original excerpt: Prerequisites
  1. Python 3.10+ is installed.
  2. Dependencies are installed: pip install -r requirements.txt
  3. Config is set (one-time): python vikunja.py config set --url URL --token TOKEN
    • Get an API token from Vikunja → Settings → API Tokens

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md' && test -s '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/vikunja' && cp -R '.skill-downloads/vikunja-task-manager-mrzxup1g' '.claude/skills/vikunja'

Cursor
test -f '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md' && test -s '.skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/vikunja' && cp -R '.skill-downloads/vikunja-task-manager-mrzxup1g' '.cursor/skills/vikunja'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/vikunja-task-manager-mrzxup1g'

openskills read 'vikunja-task-manager-mrzxup1g'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/vikunja-task-manager-mrzxup1g/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills