A narrow terminal dashboard for GitHub PRs, GitHub stacks (gh-stack), reviews, and OMP AI usage.
Keep Dev-Dashboard open in a side split of tmux, Ghostty, WezTerm, or any terminal. It answers the
questions you would otherwise open five browser tabs for: which PR is red, which one is approved,
who still has to review, and what waits on you. The repository, package, and command are all
named devdash.
- Your PRs, grouped the way you work. Grouped by repository. Stacks made with gh-stack are drawn top to bottom, including merged layers. Plain branch chains (a PR whose base is another of your PRs) are drawn as stacks too.
- Everything that blocks a merge, in one row. CI (with the first failed check), draft, review decision, each reviewer's latest verdict, bot reviews, unresolved threads, conflicts, behind-base, and merge-queue position.
- Review requests. PRs that wait for you, newest first, with the author and age, and a marker when someone requests your review again.
- OMP AI usage (optional). Rate-limit bars and reset countdowns for providers with
usage reports in the selected OMP profile. OpenRouter spend and remaining
credits are read from its key
and credits endpoints.
Nous Portal credits are read from the Portal account API when omp has a
nous-portalornouscredential. Hidden whenompis not installed. Weekly and monthly bars show a pace icon (>>too fast,<<too slow,|on pace). - Hide what you do not want to see. Exclude single repositories or whole organizations.
PR numbers are clickable in terminals that support hyperlinks.
You need Python 3.12 or later and the GitHub CLI, signed in:
gh auth loginThen install devdash with uv or pipx:
uv tool install git+https://github.com/shayan-ys/devdash
# or
pipx install git+https://github.com/shayan-ys/devdashdevdash.py is also a self-contained script. It declares its dependencies inline
(PEP 723), so with uv installed you can copy one file:
curl -fsSLo ~/.local/bin/devdash https://raw.githubusercontent.com/shayan-ys/devdash/main/devdash.py
chmod +x ~/.local/bin/devdashTo update, run uv tool upgrade devdash (or pipx upgrade devdash), or download the file again.
devdash # live view; press r to refresh now, q to quit
devdash --once # print one frame and exit
devdash --exclude acme/monorepo # hide one repository
devdash --exclude acme # hide every repository of a user or organization
devdash --no-review --no-usage # show only your own PRs
devdash --profile personal --once # show usage from the personal omp profile
devdash --github alice # MY PRS / REVIEW REQUESTED for this gh login
devdash --help # all flags--once is also the behavior when standard input is not a terminal, so devdash | less -R works.
--profile NAME uses the same isolated auth, settings, and usage cache as omp --profile NAME.
Without the flag, devdash follows omp's default profile (or $OMP_PROFILE). Usage from one
profile is never reused as the last-good reading for another. Providers with an authenticated
account but no available usage data appear under no data. With --profile, each provider
heading includes that provider's account email in white, for example Codex (user@example.com).
--github USER is the GitHub username from gh auth status (not an email). It scopes MY PRS
and REVIEW REQUESTED to that login without running gh auth switch. It does not label usage.
OpenRouter shows per-key spending, not your overall account balance. An API key limit
appears as a spend bar; an unlimited key shows dollars spent. If its key is not available
through omp token openrouter, or OpenRouter rejects it, the provider stays hidden.
Nous Portal has no published read-only usage/balance API; view its usage at
Nous subscription management.
| Mark | Meaning |
|---|---|
✓ci ●ci2 ✗ci1 |
Latest run of each check passed, 2 still running, 1 failed (the first failed check is named at the end of the row) |
approved changes needs review |
The PR's review decision |
✓dana ✗lee ✎sam |
A reviewer's latest review: approved, requested changes, commented |
bot✎2 |
Reviews from 2 bots |
⚑3 |
3 unresolved review threads |
⚠conflict ↓behind |
Merge conflict, or the branch is behind its base |
⇢queued #2 |
Position in the merge queue |
Weekly and monthly bars have a pace icon beside the percentage: fast and on-pace icons on its
right, slow icons on its left. It compares the share of
the quota you used with the share of the window that has passed. For example, 34% used with
19 of 30 days gone (63%) is 29 points slow: <<.
| Icon | Points from pace | Meaning |
|---|---|---|
| |
less than 5 | On pace |
> >> >>> |
5, 15, 30 or more ahead | Too fast; >>> runs out well before the reset |
< << <<< |
5, 15, 30 or more behind | Too slow; you have quota to spare |
There is no icon on 5-hour windows, or in the first 10% (at least 12 hours) of a window,
where one busy hour looks like a runaway pace. Set usage.pace = false to hide the icons.
Every setting is optional. devdash reads a TOML file from the first of:
--config PATH$DEVDASH_CONFIG$XDG_CONFIG_HOME/devdash/config.toml, which is usually~/.config/devdash/config.toml
interval = 60 # seconds between refreshes
[github]
exclude = ["acme/monorepo", "some-org"] # "owner/repo", or "owner" for all of its repositories
review_requested = true # show the REVIEW REQUESTED section
[usage]
enabled = "auto" # true, false, or "auto" (only when omp is installed)
refetch_after = 180 # force a fresh usage read after this many seconds; 0 = never
pace = true # pace icons (> fast, < slow, | on pace) on weekly and monthly bars
order = ["openai-codex", "anthropic"]
[usage.names]
anthropic = "Claude"
[usage.colors]
anthropic = "#d97757"Command-line flags override the file, and each --exclude adds to github.exclude. An unknown
key or a value of the wrong type stops devdash with an error, so a typo cannot fail silently.
config.example.toml lists every key with its default.
gh is not signed in. Run gh auth login. With more than one account, pass --github USER
(the username from gh auth status) or set github.account in the config file.
A PR is missing. devdash shows the first 50 open PRs you wrote and the first 50 that request your review. Excluded repositories do not count toward the 50.
Stacks are shown as chain → main instead of stack #N. The PRs were not made with
gh-stack, or your GitHub host does not provide stack data (for example, GitHub Enterprise Server).
devdash then rebuilds stacks from branch chains.
The usage section shows last read … ago. Some providers rate-limit their usage endpoints,
and omp then drops the provider from its report. devdash keeps the last good read, marks it stale,
and saves it in $XDG_CACHE_HOME/devdash/. To make fewer requests, raise refetch_after or use
--cached.
OpenRouter is missing. omp usage does not report every configured model provider.
devdash queries OpenRouter's per-key usage and remaining-credits APIs with the key returned by
omp --profile NAME token openrouter; the key stays in memory and is never saved in
the dashboard cache. Check that the key belongs to the selected profile and remains valid.
Nous Portal is missing. Portal credits are not part of omp usage. devdash calls
https://portal.nousresearch.com/api/oauth/account with omp --profile NAME token nous-portal
(or nous). A browser or Hermes login is not visible to omp; store the Portal credential in
the selected omp profile first. Inference keys that cannot read the account API are omitted.
- gh-dash is a full-screen, interactive dashboard for PRs and issues. Use it to act on PRs. Use devdash to watch them from a narrow pane.
- gh-stack creates and manages the stacks that devdash draws.
Questions, bug reports, and pull requests are welcome. Please open an issue first for a large change. CONTRIBUTING.md explains the local setup, and everyone who takes part agrees to the Code of Conduct. Report security problems as described in SECURITY.md.
MIT © Shayan