tonhowtf/omniget
Udemy & Hotmart course downloader, YouTube downloader (yt-dlp GUI, 1,800+ sites) + desktop app for AI agents: Claude Code, Codex, Gemini CLI, Ollama.
About tonhowtf/omniget
tonhowtf/omniget is an open-source project on GitHub, mainly written in Rust. Udemy & Hotmart course downloader, YouTube downloader (yt-dlp GUI, 1,800+ sites) + desktop app for AI agents: Claude Code, Codex, Gemini CLI, Ollama. It currently holds 13,987 stars and 1,227 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
AI Homed tracks it on the AI Coding Agents board.
GitHub Repository Details
README
OmniGet
English · Português (BR) · Русский · 简体中文
A yt-dlp GUI, a Udemy and Hotmart course downloader, and a desktop app for AI coding agents.
Free and open source for Windows, macOS and Linux. No terminal.
Download YouTube, Instagram, TikTok, X, Pinterest and 1,800+ other sites, then transcribe, convert, read and study what you saved.
Run Claude Code, Codex, Gemini CLI and local Ollama models as agents with permissions, undo, jobs and loops, and watch them work in a house you can visit.
Free. Open source under GPL-3.0. No account, no ads, no telemetry on what you download. Your files stay on your computer.
13,800+ GitHub stars. The most starred repository in the udemy-downloader, hotmart-downloader, course-downloader, yt-dlp-gui, media-downloader and instagram-downloader topics.
---
Contents
- AI agents and the World: Claude Code, Codex, Gemini CLI, Ollama, jobs, loops, MCP, the house and visits
- Why OmniGet
- Download and install
- Your first download in one minute
- What OmniGet downloads: Udemy, Hotmart, YouTube, Instagram, TikTok, X and 1,800+ sites
- The browser extension, step by step
- The Tools section: 156 tools in 24 categories
- MCP server for Claude Code, Cursor and VS Code, and a Claude Code plugin
- Plugins: Courses, Study, Telegram, Convert
- For League of Legends players
- Everything else in the box
- Privacy and what OmniGet refuses to do
- Frequently asked questions
- Command line
- Build from source
- Contributing and translations
- Standing on open source
AI agents on your desktop: Claude Code, Codex, Gemini CLI and Ollama
Claude Code, run through OmniGet, fixes a failing test in about 15 seconds from one command. It asks permission with the diff on screen, and one click takes the whole turn back. New in 0.10 and now the centre of the app, OmniGet is a desktop app for AI coding agents. It carries the whole system that goes around an agent: a coding harness with permissions and undo, a durable job queue with loops and triggers, a roster that takes your local models, your API keys and the agent CLIs you already pay for, a project memory, and a small world where those agents live and where you can watch them work. It runs on your machine. Nothing talks to the network until you add a key, start a local model or open your house.
| You want to | Open | What happens | | --- | --- | --- | | Have an agent change code in a folder | LLM → Chat | It reads, edits and runs commands inside that folder only, asks before it writes, and one click undoes the turn | | Leave work running | LLM → Jobs, Loops | The turn survives closing the window and a crash; a Loop repeats until your check command passes | | Start work on a schedule or from another program | LLM → Jobs → Triggers | A cron line or a webhook on the local bridge starts a job | | A GUI for Claude Code, Codex or Gemini CLI | LLM → Accounts | They join the roster as agents, keep their login, ask permission through OmniGet | | Agents on a local model, offline | LLM → Models | Ollama, LM Studio or llama-server runs the same tools with no key | | Several agents in parallel | LLM → Jobs, World | Two jobs run at once, agents delegate to each other, each at its own workbench | | See who is doing what | World | Each agent walks to its own workbench, shows the tool in a balloon and waves when it needs you | | Show a friend | World → Open the house | A code, a visit, a chat. Your app stays the authority |
A coding agent with permissions, a sandbox and undo
Pick an agent, attach a folder, ask for a change.
- Eleven tools, one folder.
fs_read,fs_list,fs_glob,fs_grep,fs_edit,fs_write,fs_apply_patch,shell_exec,todo_write, pluskb_searchandkb_write. Every path is resolved inside the folder you attached; a path outside it becomes its own question (external_directory) and the answer covers that one call. Each conversation has its own folder. - Edits that survive a sloppy model.
fs_editfalls back from an exact match to a block match anchored on the first and last line, and refuses when the block it found is out of proportion to what was asked.fs_apply_patchtakes the V4A envelope with a context fuzz ladder and keeps the file's own context lines. A small model that invents a container path such as/workspaceis put back at the folder root instead of failing. - A sandboxed shell. On macOS
shell_execruns under seatbelt: no network, writes only inside the folder. The chip next to the folder always shows whether the sandbox is on. - Permission with the evidence on screen. Anything that writes asks first and shows the command or the diff. Allow is once, Deny is once, Always stores a rule for that agent by command prefix:
git status,npm run test,node *. A chained line (git status && rm -rf x) needs a rule for every segment, and$(…), backticks and>never ride on a rule. The rules are listed in the inspector on the right, where you edit the pattern, switch a rule to ask or deny, or delete it; the next call asks again. - Undo takes the whole turn back. Before the first write of a turn OmniGet takes a checkpoint: it snapshots the folder into a shadow git that never touches your repository. Undo restores the files and removes that turn's messages from the conversation, without running anything again. It also covers edits made by Claude Code or an ACP agent. When a turn ran shell commands, the toast names each one, so you know exactly what the turn touched.
- Stop means stop. Cancelling a turn also drops its pending permission request, in the chat and in the job list.
- Models. A local server (Ollama, LM Studio, llama-server) or your own keys, with a router that walks down a chain when a quota runs out or a provider rate-limits. A fresh install is local first.
qwen3:8b on Ollama) does the same in about 3 minutes, asking permission with the diff.
Local AI agents with Ollama, LM Studio and llama-server
A fresh install is local first. Point OmniGet at Ollama, LM Studio or llama-server and the agents run on your machine, offline, with the same eleven tools, the same permission prompts and the same undo. On the demo project an 8B model (qwen3:8b on Ollama) finds and fixes the bug in about 3 minutes. Add API keys later and the router uses them as the next step of the chain; the local model stays first for as long as you want.
Loop an AI agent until the tests pass: Jobs, Loops, cron and webhooks
- A job is an agent turn that outlives the window. It lives in a SQLite queue with its state (
queued,running,waiting_approval,done,failed,cancelled), its log, and what it cost: model, tokens in and out, cache reads, and the cost when the provider reports one. Two jobs run at a time. A job that needs a permission shows Allow / Always allow / Deny right on its row. - A Loop repeats rounds until a check passes. Give it a prompt and a check command (
npm test,cargo test,node test/cart.test.js); the check runs under the same sandbox, and the Loop ends withcheck_passed, or when the rounds or minutes you set run out. - It keeps going without you. Close the window and the app stays in the tray with the Loop running. Kill the process mid-round and the next launch marks that round failed and opens a new one by itself. Both were tested exactly that way. An unattended Loop needs the rules it will use (an unanswered request is denied after two minutes).
- Triggers. A five-field cron line (lists, ranges, steps,
@hourly,@daily, local time), checked once a minute with no duplicate fire, or a webhook:POST /v1/hooks/on the local bridge with your token, where the body becomes{{body}}in the prompt. - From a terminal, against the running app:
omniget agent run "Fix the failing test in src/cart.js" --agent claude-code --workspace .
omniget agent loop "Make the tests pass" --agent omni --workspace . --check "npm test" --rounds 5
omniget agent jobs # list, show one, --cancel
omniget agent loops
omniget agent agents
A GUI for Claude Code, Codex and Gemini CLI: run them as agents that work as a team
- Claude Code and Codex accounts plug in with their quota on screen, including the login your terminal already has. Several accounts of the same CLI can coexist, read-only or allowed to write.
- OmniGet is an Agent Client Protocol client. Any CLI that speaks ACP joins the roster from LLM → Accounts: Gemini CLI, claude-code-acp, codex-acp, goose, opencode, or a command you type. OmniGet is agent-agnostic: it has its own JSON-RPC client over stdio, so there is no SDK to install; the agent keeps its login and model, and its permission requests show up in OmniGet's prompt. Checked field by field against claude-code-acp 0.16.
- Multi-agent with
agent_delegate. One agent hands a task to another and gets the answer back as a tool result, in a child conversation you can open. A local coordinator that delegates the hard part to Claude Code costs exactly one run of the CLI. - A memory the whole team shares.
AGENTS.md(orCLAUDE.md) plus markdown notes in.omniget/kb/, inside your project, in git if you want. The index goes into every prompt, and the agents search and write notes withkb_searchandkb_write. - Skills install from a folder, a zip, or
owner/repoandowner/repo@skillas innpx skills add, and pass through a scanner first. - MCP both ways. External MCP servers become tools, granted per agent as auto, ask or deny. And OmniGet serves its own 49 tools, the coding ones included, to Claude Code, Cursor, VS Code and the rest: see OmniGet for AI agents.
- Context pruning, off by default. On long conversations a judge decides which old tool outputs no longer bear on the task and replaces them with a marker; the call and its id stay, so the agent can run the tool again. It works inside a long turn as well as between turns, and on Claude Code conversations too. The local judge (MiniLM, on your machine) only ever omits an output; the optional remote judge needs a key and says plainly that previews leave your computer. Every request leaves a receipt with measured numbers: outputs omitted, estimated tokens before and after, input tokens the provider billed. No invented percentages.
- Budgets. Per agent: dollars per day, tokens per turn, tool calls per turn. A spent agent goes to sit down, literally.
The World: watch your AI agents work in an isometric house
A house is made on your first visit and the agents of your roster move in, CLI and ACP agents included. A fresh install starts with three: Omni (coordinator), Builder (code) and Scout (reading and research), all editable. Add or remove an agent and the house follows.
- One post per agent. Each has its own desk and workbench, so two agents working at once never stand on the same tile. It walks to the desk when a turn starts and to the workbench when a tool runs, with a balloon naming the tool (
fs_edit cart.js,shell_exec). When it needs your permission it stops and waves at you. When its budget is spent it sits down, tired. Jobs and Loops move the agents exactly like chat does. - The Activity panel next to the house has a row per agent: state, current tool, running job, energy. Click a row and the camera goes to that agent.
- Energy is quota. What is left of an account's window is that agent's energy; an exhausted account goes to bed.
- Demo mode.
/world?demo=1, or the Demo button, plays a scripted run with three agents and a permission request without spending a token. It is what the clip below shows. - Built here. The simulation is a Rust crate, the renderer is WebGL2, and the app measures your machine once and picks a quality tier. With eight agents working at once it held a median of 64 frames per second on the test machine (debug build). Furniture goes in slots. A hand-crafted yard with four outdoor workbenches is one click away (World → Quintal artesanal). Agents only think through a model if you switch that on.
Visits: open your house to a friend with a code
Open the house gives you a code such as ZZCJ-YA09. A friend types it and walks into your house: they see your map, your agents at work and the other guests, walk around, and what they say shows up as a balloon.
- Your app is the authority. The room server only relays frames. Your keys, your quota and your agents' brains never leave your machine, and a visitor can do one thing: walk.
- No accounts. The hello is signed with the ed25519 key of your local profile.
- It keeps serving while you work. With the house open the world stays awake when the window is covered or you are on another tab, and a guest that misses a frame asks for a fresh picture instead of freezing.
- Closing the house closes the only socket there is.
- The public relay is
wss://chat.tonho.wtf/v1/room. To host your own,omniworld-serveris a single binary with aDockerfileand adocker-compose.ymlinscripts/omniworld-server/; put it behind a proxy that terminates TLS and set the address in Settings → World → Room server.
The limits strip. A thin strip on a screen edge with one ring per coding assistant: how much of each usage limit is gone, when it resets, and whether the assistant is working, waiting or done. Off until you switch it on in LLM → Accounts, and every assistant is its own checkbox that says what it reads. A reader opens only the login that tool already keeps on your machine, read-only, asks that tool's own service for your usage at most once every five minutes, and never writes, refreshes or logs a token. Local runtimes (Ollama, LM Studio) show the models they have loaded. Claude Code is verified; the other remote readers are marked beta.
---
Why OmniGet: a course downloader, a yt-dlp GUI and a media toolbox in one app
You bought a course and want it on your disk before the platform pulls it. You keep a yt-dlp cheat sheet because the flags never stick. You have one site for Instagram stories, another for X videos, a Chrome extension for Pinterest, a Python script for subtitles, and none of them remember your login.
OmniGet puts all of that behind one text box. Paste a link, see a preview with quality options, click download. The same window then plays the course, reads the PDF, transcribes the audio and backs up the Pinterest board. yt-dlp and FFmpeg install themselves and stay updated, so there is nothing to configure and no terminal to open.
How it compares
| | OmniGet | yt-dlp alone | Single-site web downloaders | Paid course downloaders | |---|---|---|---|---