Skip to content

Conversation

@TechDufus
Copy link
Owner

@TechDufus TechDufus commented Dec 12, 2025

Summary

  • Add new vibe-kanban Ansible role for cross-platform configuration management
  • Integrate MCP server setup into the claude role using claude mcp add CLI
  • Enable optional remote hosting via systemd/launchd services

What is Vibe Kanban?

Vibe Kanban is a local-first project/task management tool for AI coding agents (Claude Code, Gemini CLI, Codex, etc.). This role enables unified configuration across all devices managed by these dotfiles.

Changes Made

New Role: roles/vibe-kanban/

File Purpose
defaults/main.yml Default configuration variables (theme, executor, editor, notifications)
tasks/main.yml Cross-platform config deployment with smart merge (preserves user data)
tasks/Ubuntu.yml Linux systemd service for optional remote hosting
tasks/MacOSX.yml macOS launchd service for optional remote hosting
templates/config.json.j2 Vibe-kanban application config template
templates/vibe-kanban.service.j2 systemd unit file
templates/com.vibekanban.plist.j2 launchd plist file

Claude Role Updates

Added idempotent MCP server configuration using the official Claude CLI:

- name: "{{ role_name }} | Add vibe-kanban MCP server"
  ansible.builtin.command: >
    claude mcp add vibe_kanban
    --transport stdio
    -- bunx vibe-kanban@latest --mcp

Configuration Variables

New vibe_kanban section in group_vars/all.yml:

vibe_kanban:
  theme: "DARK"
  executor:
    type: "CLAUDE_CODE"
    variant: "OPUS"
  editor:
    type: "CUSTOM"
    custom_command: "nvim"
  server:
    enabled: false  # Set true for remote hosting
    port: 8080
    host: "127.0.0.1"

Remote Hosting Support

The role supports running vibe-kanban as a service for remote access:

  1. Set vibe_kanban.server.enabled: true and host: "0.0.0.0"
  2. Run dotfiles -t vibe-kanban
  3. Configure a reverse proxy (nginx/caddy) for TLS termination on port 443
  4. Access the web UI remotely while MCP integration runs locally on each device

Implementation Details

  • Config management: Merges Ansible-managed settings with existing user data (preserves projects, OAuth tokens, etc.)
  • MCP server: Uses bunx instead of npx for faster startup
  • Idempotent: Uses claude mcp get to check before adding, preventing duplicates
  • Cross-platform: Supports macOS (launchd) and Linux (systemd user services)

This PR was written using Vibe Kanban

---

## Summary: Vibe-Kanban Ansible Role

### Files Created

```
roles/vibe-kanban/
├── defaults/main.yml              # Default configuration variables
├── tasks/
│   ├── main.yml                   # Cross-platform config deployment
│   ├── Ubuntu.yml                 # Linux systemd service (optional)
│   └── MacOSX.yml                 # macOS launchd service (optional)
└── templates/
    ├── config.json.j2             # Vibe-kanban app config
    ├── vibe-kanban.service.j2     # systemd service unit
    └── com.vibekanban.plist.j2    # launchd plist
```

### Files Modified

| File | Change |
|------|--------|
| `group_vars/all.yml` | Added `vibe-kanban` to `default_roles` + config vars |
| `roles/claude/tasks/main.yml` | Added MCP server config (using `bunx`) |

### Configuration in `group_vars/all.yml`

```yaml
vibe_kanban:
  theme: "DARK"
  executor:
    type: "CLAUDE_CODE"
    variant: "OPUS"
  editor:
    type: "CUSTOM"
    custom_command: "nvim"
  git:
    branch_prefix: "vk"
  # ... more options
  server:
    enabled: false      # Set true for remote hosting
    port: 8080
    host: "127.0.0.1"   # Change to 0.0.0.0 for remote
```

### MCP Server Config (managed by claude role)

Added to `~/.claude.json`:
```json
{
  "mcpServers": {
    "vibe_kanban": {
      "command": "bunx",
      "args": ["vibe-kanban@latest", "--mcp"]
    }
  }
}
```

---

## Remote Hosting Guide

To host vibe-kanban on a VM accessible via HTTPS:

### 1. Update `group_vars/all.yml` for the server:

```yaml
vibe_kanban:
  server:
    enabled: true
    port: 8080
    host: "0.0.0.0"
  editor:
    remote_ssh_host: "your-server.example.com"
    remote_ssh_user: "techdufus"
```

### 2. Add reverse proxy (nginx example):

```nginx
server {
    listen 443 ssl http2;
    server_name kanban.example.com;

    ssl_certificate /etc/letsencrypt/live/kanban.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kanban.example.com/privkey.pem;

    # Basic auth or use Cloudflare Access / Tailscale
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

### 3. Deploy and start:

```bash
dotfiles -t vibe-kanban
systemctl --user enable --now vibe-kanban
```

### Important Note on MCP Integration

The MCP server (`bunx vibe-kanban --mcp`) runs **locally** on each device via Claude Code's stdio interface. The remote web UI is for viewing/managing tasks, but the MCP integration with Claude Code requires a local process. This is by design for security - Claude Code spawns MCP servers as subprocesses.
…task will correctly detect it and skip the add step. The simplified approach works well.
@TechDufus TechDufus changed the title Investigate vibe-kanban self-hosting (vibe-kanban) feat(vibe-kanban): add Ansible role for unified config management (Vibe Kanban) Dec 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants