omni-dev
An intelligent Git commit message toolkit with AI-powered contextual intelligence.
Transform messy commit histories into professional, conventional commit formats with project-aware suggestions.
What it does
- AI-powered improvement — Claude analyses diffs and suggests meaningful commit messages.
- Contextual awareness — understands project structure, conventions, and prior work.
- Safe amendments — improve single or batched commit messages with working-directory validation.
- PR creation — generate complete pull request descriptions in one command.
- Atlassian integration — read and write Jira issues and Confluence pages, with JFM ↔ ADF conversion.
- Browser bridge — drive authenticated HTTP requests through a logged-in browser tab without exfiltrating its cookies or tokens.
- Media transcripts — fetch YouTube captions as SRT, VTT, TXT, or JSON, with language fallback and optional ASR/translation.
- Conversation history — export your Claude Code sessions to versionable JSONL and Markdown for work-logs and review.
- MCP server — drop omni-dev's capabilities into Claude Code via the bundled MCP binary.
Install
CLI only:
cargo install omni-dev
CLI plus the omni-dev-mcp server (for Claude Desktop, Claude Code, Cursor, etc.):
cargo install omni-dev --features mcp
Or with Nix:
nix profile install github:rust-works/omni-dev
Demo
Seven short asciicasts — each paired with the artefact it produces. The source for every cast lives at rust-works/omni-dev-demo.
A bug-report JFM file exercises nested numbered/bulleted lists, a warning panel,
a task list with mixed states, dates and status pills, an inline code mark, a
fenced JavaScript code block, a pipe table, and an expand block. One CLI call
creates the issue in Jira; jira read rolls it back to identical
Markdown.
A Q3 priorities JFM file exercises Confluence-specific elements: a two-column layout, a decision list, a nested expand block, an info panel containing a warning panel, plus the inline-comment anchor that gets attached in a separate CLI call.
Three commits ahead of main. omni-dev git branch create pr
reads the commits, asks Claude for a PR title and body that summarises them,
pushes the branch, and opens the PR via gh.
Three deliberately messy commits (wip, stuff,
fix). omni-dev commit message twiddle reads each diff,
asks Claude for a Conventional Commits message that reflects the change, and
rewrites the branch via git rebase.
omni-dev browser bridge serve runs a local server that drives
fetch() calls inside an authenticated browser tab —
so requests carry the tab's SSO session, but the cookies and tokens never
leave the browser. Here it pulls a Loki datasource and its labels straight out
of a logged-in Grafana, with no API keys to manage. A confused deputy by
design; the security model
is the load-bearing part.
> (async () => { /* omni-dev bridge snippet */ })() < Promise {<pending>} [omni-bridge] connected to ws://127.0.0.1:9999 [omni-bridge] authenticated · origin https://grafana.internal [omni-bridge] GET /api/datasources → 200 (1 datasource) [omni-bridge] GET …/loki/api/v1/labels → 200 (4 labels)
grafana_session cookie and passes CSRF — while the bridge
process only ever sees the response bodies, never the credentials.
omni-dev transcript youtube pulls captions straight from a video.
info and list-langs inspect what is available;
fetch renders a track as srt, vtt,
txt, or json. Here it inspects the first video ever
uploaded to YouTube and prints its transcript — --auto falls
through to ASR captions, --translate synthesises a missing language.
1 00:00:00,000 --> 00:00:05,800 All right, so here we are in front of the elephants. 2 00:00:05,800 --> 00:00:11,200 The cool thing about these guys is that they have really, really, really long trunks. 3 00:00:11,200 --> 00:00:19,000 And that's cool. And that's pretty much all there is to say.
-o me-at-the-zoo.srt — ready to attach to a video or
feed to a search index. Drop --format json for cue objects
with millisecond timing.
omni-dev ai claude history sync exports your Claude Code sessions
— prompts, responses, thinking, and tool calls — to a target
directory as one .jsonl (and/or rendered .md) per chat.
Re-runs skip unchanged sessions by mtime, so it is safe to schedule;
--since, --project, and --dry-run scope
the run, and --prune removes exports whose source is gone.
-Users-me-omni-dev/ 0f1a…2b.jsonl # append-only event log 0f1a…2b.md # rendered transcript -Users-me-spike/ a1b2…d4.jsonl a1b2…d4.md ── 0f1a…2b.md ────────────────── ## 👤 User Refactor the transcript fetcher to support VTT. ## 🤖 Assistant Here's the plan: extract a Format enum…