Back to Skills
    🦞

    vikunja-fast

    Manage Vikunja projects and tasks (overdue/due/today), mark done

    By @tmigone
    View on GitHub
    SKILL.md
    ---
    name: vikunja-fast
    description: Manage Vikunja projects and tasks (overdue/due/today), mark done, and get quick summaries via the Vikunja API.
    homepage: https://vikunja.io/
    metadata: {"clawdbot":{"emoji":"📋","requires":{"bins":["curl","jq"],"env":["VIKUNJA_URL"],"optionalEnv":["VIKUNJA_TOKEN","VIKUNJA_USERNAME","VIKUNJA_PASSWORD"]},"primaryEnv":"VIKUNJA_TOKEN"}}
    ---
    
    # ✅ Vikunja Fast Skill
    
    Use Vikunja as the source of truth for tasks and completions, and interact with it from Clawdbot.
    
    ## Setup
    
    You can provide credentials either via environment variables **or** via Clawdbot’s skills config.
    
    ### Option A: Environment variables
    
    Set these environment variables **in the same environment where the gateway runs**:
    
    ```bash
    export VIKUNJA_URL="https://vikunja.xyz"
    
    # Recommended: use a JWT (starts with "eyJ")
    export VIKUNJA_TOKEN="<jwt>"
    
    # Alternative: login with username/password (the helper CLI will request a JWT)
    export VIKUNJA_USERNAME="<username>"
    export VIKUNJA_PASSWORD="<password>"
    ```
    
    ### Option B: Clawdbot skills config (recommended for the agent)
    
    Edit `~/.clawdbot/clawdbot.json`:
    
    ```json5
    {
      skills: {
        entries: {
          "vikunja-fast": {
            enabled: true,
            env: {
              VIKUNJA_URL: "https://vikunja.xyz",
              VIKUNJA_TOKEN: "<jwt>"
            }
          }
        }
      }
    }
    ```
    
    Notes:
    - `VIKUNJA_URL` can be the base URL; the helper normalizes to `/api/v1`.
    - Vikunja auth expects a JWT bearer token for most API calls (`Authorization: Bearer <jwt>`).
    - If you only have a non-JWT token (often starts with `tk_...`), use `/login` to obtain a JWT.
    
    ## Quick checks
    
    ### Login (get a JWT)
    ```bash
    curl -fsS -X POST "$VIKUNJA_URL/login" \
      -H "Content-Type: application/json" \
      -d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD","long_token":true}' | jq
    ```
    
    ### Who am I? (requires JWT)
    ```bash
    curl -fsS "$VIKUNJA_URL/user" \
      -H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
    ```
    
    ### List projects
    ```bash
    curl -fsS "$VIKUNJA_URL/projects" \
      -H "Authorization: Bearer $VIKUNJA_TOKEN" | jq '.[] | {id, title}'
    ```
    
    ## Commands
    
    This skill ships with a tiny helper CLI:
    
    - `{baseDir}/vikunja.sh`
    
    Examples:
    
    ```bash
    # Overdue across all projects
    {baseDir}/vikunja.sh overdue
    
    # Due today
    {baseDir}/vikunja.sh due-today
    
    # Arbitrary filter (Vikunja filter syntax)
    {baseDir}/vikunja.sh list --filter 'done = false && due_date < now'
    
    # Show / complete a task
    {baseDir}/vikunja.sh show 123
    {baseDir}/vikunja.sh done 123
    ```
    
    Notes:
    - Output formatting:
      - Each task should be formated as: `<EMOJI> <DUE_DATE> - #<ID> <TASK>`
      - Emoji comes from the project title when it starts with one; otherwise uses `🔨`
      - Due dates are rendered as `Mon/D` (time + year removed)
    - This skill uses `GET /tasks/all` to fetch tasks across all projects
    
    ## Mark task done
    
    ```bash
    TASK_ID=123
    
    curl -fsS -X POST "$VIKUNJA_URL/tasks/$TASK_ID" \
      -H "Authorization: Bearer $VIKUNJA_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"done": true}' | jq
    ```