{"id":51778337,"url":"https://github.com/bborbe/vault-ui","last_synced_at":"2026-07-20T08:32:15.533Z","repository":{"id":333488132,"uuid":"1137429875","full_name":"bborbe/vault-ui","owner":"bborbe","description":"Web UI for managing an Obsidian vault — tasks, goals, and more.","archived":false,"fork":false,"pushed_at":"2026-07-13T19:41:07.000Z","size":1285,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-20T08:32:13.743Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bborbe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-19T11:05:15.000Z","updated_at":"2026-07-13T19:42:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bborbe/vault-ui","commit_stats":null,"previous_names":["bborbe/task-orchestrator","bborbe/vault-ui"],"tags_count":85,"template":false,"template_full_name":null,"purl":"pkg:github/bborbe/vault-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bborbe%2Fvault-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bborbe%2Fvault-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bborbe%2Fvault-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bborbe%2Fvault-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bborbe","download_url":"https://codeload.github.com/bborbe/vault-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bborbe%2Fvault-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35681006,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"ssl_error","status_checked_at":"2026-07-20T02:08:09.736Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-20T08:32:14.829Z","updated_at":"2026-07-20T08:32:15.528Z","avatar_url":"https://github.com/bborbe.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vault UI\n\n[![CI](https://github.com/bborbe/vault-ui/actions/workflows/ci.yml/badge.svg)](https://github.com/bborbe/vault-ui/actions/workflows/ci.yml)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/bborbe/vault-ui)\n\nOrchestrate Claude Code sessions from Obsidian tasks.\n\n## Where this fits in the bigger picture\n\nvault-ui is the **human operator's Kanban view** into the bborbe task / agent system. It wraps [vault-cli](https://github.com/bborbe/vault-cli) as a FastAPI + Kanban web UI, watching vault file changes and offering a one-click launch of a Claude Code session per task.\n\nIt only reads / mutates the local vault — it never talks to Kafka, Kubernetes, or the upstream task pipeline. The tasks shown on the board are materialized into the vault by [agent](https://github.com/bborbe/agent)'s `task/controller`, fed by producers like [recurring-task-creator](https://github.com/bborbe/recurring-task-creator) and [maintainer](https://github.com/bborbe/maintainer)'s watchers.\n\nFull system map: [recurring-task-creator/docs/system-map.md](https://github.com/bborbe/recurring-task-creator/blob/master/docs/system-map.md).\n\n## Features\n\n- Kanban board UI showing Obsidian tasks\n- Clickable Obsidian links to open tasks in vault\n- Start Claude Code sessions in project directories\n- Session handoff via session ID\n- Dark theme interface\n\n## Prerequisites\n\n- Python 3.12+\n- [uv](https://docs.astral.sh/uv/) package manager\n- [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) (`claude` command)\n- An Obsidian vault with tasks in frontmatter format\n\n## Installation\n\n```bash\nuv sync --all-extras\n```\n\n## Usage\n\nStart server:\n```bash\nmake run\n```\n\nOr start with auto-reload on code changes:\n```bash\nmake watch\n```\n\nThen open http://127.0.0.1:8000\n\n## Goals view\n\nThe board has a top-of-board toggle that switches between the **Tasks** view (default) and the **Goals** view. Both views share the same status columns and live-update plumbing.\n\n- Click the toggle to switch views — the URL is updated to `?view=tasks` or `?view=goals` and the new view's data is fetched.\n- Deep-link to a specific view: open `http://127.0.0.1:8000/?view=goals` to land directly in the Goals view (no flash through the Tasks view).\n- Goal cards are read-only — they link back to the goal file in Obsidian. To edit a goal, click the title (or the \"Open in Obsidian →\" link) and edit in the vault.\n- Vault, status, and assignee filters apply to both views.\n\nToggle sits above the columns:\n\n```\n[ Tasks | Goals ]  [Vault ▾]  [Status ▾]  [Assignee ▾]  [Upcoming: 8h ▾]\n```\n\nThe active view is encoded in the URL as `?view=tasks` or `?view=goals` and survives reload.\n\n## Group columns by phase or status\n\nThe kanban header has a `groupBy` selector that switches the columns between two dimensions:\n\n- **Phase** (default for Tasks view): TODO / PLANNING / EXECUTION / AI_REVIEW / HUMAN_REVIEW / DONE — the task-phase workflow.\n- **Status**: IN_PROGRESS / NEXT / BACKLOG / COMPLETED / HOLD / ABORTED — the canonical status taxonomy.\n\nThe active value is encoded in the URL as `?groupBy=phase` or `?groupBy=status` and survives reload. The default depends on the view: `?view=tasks` opens with `groupBy=phase`; `?view=goals` opens with `groupBy=status`. Unknown values (e.g. `?groupBy=bogus`) fall back to the kind default and the URL is rewritten to the resolved value.\n\nUnder `?view=goals\u0026groupBy=phase`, goals without a `phase` field land in a single `—` column.\n\n## Development\n\n```bash\nmake sync        # Install dependencies\nmake format      # Format code\nmake lint        # Lint code\nmake typecheck   # Type check\nmake test        # Run tests\nmake precommit   # Run all checks\n```\n\n## Configuration\n\nCopy the example config to the XDG config directory (preferred):\n```bash\nmkdir -p ~/.config/vault-ui\ncp config.yaml.example ~/.config/vault-ui/config.yaml\n```\n\nvault-ui looks for config in this order:\n1. `~/.config/vault-ui/config.yaml` (preferred)\n2. `./config.yaml` in the repo root (legacy fallback — still supported for existing installs)\n\n**Top-level fields:**\n- `claude_cli` - Claude CLI command (default: `claude`)\n- `host` - Server host (default: `127.0.0.1`)\n- `port` - Server port (default: `8000`)\n\n**Per-vault fields** (under `vaults:`):\n- `name` - Display name for the vault\n- `vault_path` - Absolute path to the Obsidian vault\n- `vault_name` - Vault name for `obsidian://` URLs\n- `tasks_folder` - Folder containing task files (e.g., `\"24 Tasks\"`)\n- `claude_script` - Script to run Claude sessions (default: `claude`)\n- `vault_cli_path` - Path to vault-cli binary (default: `vault-cli`)\n\n## Task Format\n\nTasks must have frontmatter with:\n```yaml\n---\nstatus: todo  # or in_progress, completed\nproject: /path/to/project  # Required for running\n---\n```\n\n## License\n\nBSD-2-Clause license. See [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbborbe%2Fvault-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbborbe%2Fvault-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbborbe%2Fvault-ui/lists"}