Standalone desktop dashboard for markdown-based conception projects, incidents, and documents.
Project description
condash
Standalone desktop dashboard for markdown-based conception projects, incidents, and documents.
condash is a single-user native-feeling application that renders a live dashboard of a directory tree of projects, incidents, and documents written as Markdown — originally the conception repo convention (projects/YYYY-MM-DD-slug/README.md, incidents/…, documents/…). It lets you browse them, track ## Steps checklists, toggle item status, reorder steps, open files in your IDE, and tidy done items into monthly archive folders — all from one window backed by the same Markdown files you edit by hand.
Install
pipx install condash
# or: uv tool install condash
Both install the CLI into its own isolated venv and put condash on your $PATH. The dashboard will not launch until you have created and filled in a config file — see First launch.
System prerequisites
None on Linux, macOS, or Windows. condash ships its native-window backend as a Python dependency: pywebview[qt] pulls PyQt6 + PyQt6-WebEngine + QtPy from PyPI, and those wheels bundle Qt itself. A vanilla pipx install condash is therefore self-contained:
pipx install condash
- Linux — pywebview prefers GTK if
python3-gihappens to be installed system-wide, but otherwise falls back to the bundled Qt backend with no extra setup. - macOS — pywebview uses the native Cocoa WebKit backend by default; Qt is available as a fallback.
- Windows — pywebview uses the native Edge WebView2 backend by default; Qt is available as a fallback.
Install size is ~100 MB because of the bundled Qt wheels — that's the cost of "works everywhere with one command". If you'd rather skip the native window entirely, set native = false in your config (see First launch) and condash will serve the dashboard in your usual browser at http://127.0.0.1:<port>.
Development from a source checkout
git clone https://github.com/vcoeur/condash.git
cd condash
uv sync --all-extras
uv run condash --version
uv run condash # launches the native window, reading ~/.config/condash/config.toml
First launch
condash does not ship with a working default config — it has no way to guess where your conception directory lives. Bootstrap one:
condash init # writes a commented template at ~/.config/condash/config.toml
condash config edit # opens the template in $VISUAL / $EDITOR
The template is fully commented out. Uncomment and edit the lines you need:
conception_path = "/path/to/conception"
workspace_path = "/path/to/code/workspace" # optional; enables the repo strip
worktrees_path = "/path/to/git/worktrees" # optional; "open in IDE" sandbox
port = 0 # 0 = OS picks a free port; set e.g. 3434 to pin one
native = true # false = open in your browser instead of a desktop window
[repositories]
primary = ["repo-a", "repo-b"]
secondary = ["repo-c", "repo-d"]
[open_with.main_ide]
label = "Open in main IDE"
commands = ["idea {path}", "idea.sh {path}"]
[open_with.secondary_ide]
label = "Open in secondary IDE"
commands = ["code {path}", "codium {path}"]
[open_with.terminal]
label = "Open terminal here"
commands = ["ghostty --working-directory={path}", "gnome-terminal --working-directory {path}"]
conception_path is required. Everything else is optional:
workspace_path— directory containing your code repositories. Every direct subdirectory that contains a.git/is shown in the dashboard's repo strip. If unset, the entire repo strip is hidden.worktrees_path— second directory the "open in IDE" action treats as a safe sandbox alongsideworkspace_path. Useful if you keep extra git worktrees outside the main workspace tree.port— TCP port for the embedded HTTP server.0(default) lets the OS pick a free port. Set a fixed value if you want to reach the dashboard from your browser athttp://127.0.0.1:<port>.native—true(default) opens a desktop window via pywebview.falseskips the native window and lets you use any browser; useful if you don't have GTK/Qt Python bindings installed.[repositories]—primaryandsecondaryare bare directory names (not paths) matched against what is found underworkspace_path. Anything left over lands in an "Others" card. Both lists are ignored whenworkspace_pathis unset.[open_with.<slot>]— three vendor-neutral launcher slots (main_ide,secondary_ide,terminal) wired to the per-repo action buttons. Each slot has alabel(tooltip text) and acommandsfallback chain. Each command is a single shell-style string parsed withshlex; the literal{path}is replaced with the absolute path of the repo being opened. Commands are tried in order until one starts. Built-in defaults reproduce the previous behaviour, so you only need to override the slots you actually want to customise.
Once conception_path is set, run condash to launch the dashboard.
Editing the config from inside the app
Click the gear icon in the dashboard header (next to the light/dark toggle). A modal opens with form fields for every option above; saving writes the file atomically (preserving comments via tomlkit) and reloads the dashboard. Path / repository / open-with changes apply on reload; changes to port or native need a condash restart and the modal will tell you so.
CLI
condash # open the dashboard window
condash --version # print version and exit
condash --conception-path PATH # one-shot override (does not touch config file)
condash --config PATH # use a different config file
condash init # write a default config template
condash config show # print the effective configuration
condash config edit # open the config in $EDITOR
condash tidy # move done items into YYYY-MM/ archive dirs
condash install-desktop # register condash with the XDG launcher (Linux)
condash uninstall-desktop # remove the user-local desktop entry (Linux)
Linux: register condash in your application launcher
condash install-desktop writes a user-local XDG desktop entry plus the bundled SVG icon, so condash appears in GNOME Activities, KDE Kickoff, Cinnamon menu, and other launchers that read ~/.local/share/applications:
condash install-desktop
This installs:
~/.local/share/applications/condash.desktop— the launcher entry, pointing at the absolute path of whichevercondashbinary you ran the command with (so it survives pipx / venv isolation)~/.local/share/icons/hicolor/scalable/apps/condash.svg— the SVG app icon
No sudo and no system-wide changes. To remove it later: condash uninstall-desktop.
The native window also picks up the same icon at runtime via pywebview, so it appears in your taskbar / Alt-Tab switcher.
Claude Code skill
A minimal example SKILL.md ships at the repo root — drop it into ~/.claude/skills/condash/ (or <project>/.claude/skills/condash/) to drive the non-interactive CLI surface from a Claude Code session: condash init, condash config show / edit, condash tidy, and condash install-desktop. Launching the native window from inside an agent is deliberately out of scope — run condash by hand for that.
Status
Version 0.2.0 — adds an in-app config editor (gear icon next to the theme toggle) and three vendor-neutral [open_with] launcher slots that replace the previous hardcoded IntelliJ / VS Code / terminal buttons. Also fixes the v0.1.5 desktop-launcher crash where the window icon was forwarded via the wrong pywebview kwarg dict. Still Linux-first overall; macOS and Windows should work but are less tested.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file condash-0.4.0.tar.gz.
File metadata
- Download URL: condash-0.4.0.tar.gz
- Upload date:
- Size: 47.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
394ceffff57422a265c6199d1ca4cbb7aff02f401752b885281dfede5f59fe1d
|
|
| MD5 |
ccde8ef45b866843ee2bf4b2b124550e
|
|
| BLAKE2b-256 |
d14842c8f78bd21bbed98a07653b7ab98097bd3b8fbfb50e8e0553a1bca5ba94
|
Provenance
The following attestation bundles were made for condash-0.4.0.tar.gz:
Publisher:
release.yml on vcoeur/condash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
condash-0.4.0.tar.gz -
Subject digest:
394ceffff57422a265c6199d1ca4cbb7aff02f401752b885281dfede5f59fe1d - Sigstore transparency entry: 1317234312
- Sigstore integration time:
-
Permalink:
vcoeur/condash@e99c0747d13d1386021290b96e596a6795c5fb61 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/vcoeur
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e99c0747d13d1386021290b96e596a6795c5fb61 -
Trigger Event:
push
-
Statement type:
File details
Details for the file condash-0.4.0-py3-none-any.whl.
File metadata
- Download URL: condash-0.4.0-py3-none-any.whl
- Upload date:
- Size: 49.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b3deaff19783fb445defb956e79c8db6a2a4eaf120b27dfccba73ff8899b6d8
|
|
| MD5 |
ba13e47686bb4f4c24e58f4f6e46e461
|
|
| BLAKE2b-256 |
b67c1cbcd948f1ad719a0f6d3edd4d53f6c3ffb1606e2ef43811a3087ae9f350
|
Provenance
The following attestation bundles were made for condash-0.4.0-py3-none-any.whl:
Publisher:
release.yml on vcoeur/condash
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
condash-0.4.0-py3-none-any.whl -
Subject digest:
1b3deaff19783fb445defb956e79c8db6a2a4eaf120b27dfccba73ff8899b6d8 - Sigstore transparency entry: 1317234325
- Sigstore integration time:
-
Permalink:
vcoeur/condash@e99c0747d13d1386021290b96e596a6795c5fb61 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/vcoeur
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e99c0747d13d1386021290b96e596a6795c5fb61 -
Trigger Event:
push
-
Statement type: