oracle's npm package ships a compiled Mac app bundle, and its engine choice depends on whether a key happens to be set
Ask the oracle when you're stuck. Invoke GPT-5 Pro with a custom context and files.
At a glance
- What is it?
- A command line tool and MCP server that bundles a prompt with the files you select and sends them to a model, through a provider API or through a browser you are signed into. It ships two modes that show you exactly what would be sent before anything is sent, and it stores prompts, attachments and answers in a directory in your home.
- Who is it for?
- Oracle is worth a look if you want a second opinion on a change from a different model with the real files in front of it, because the two pre-send modes are unusual and genuinely useful: one prints the exact bundle and contacts nothing, the other estimates tokens before you commit. Three things to weigh first.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- steipete/oracle4,066 ★ · +95
| Repository | 2026-09-15 | 2026-11-14 |
|---|---|---|
| steipete/oracle | 4k | 4.1k |
95 Stars in the last 60 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Two modes that show you the bundle before anything is sent
The tool's whole job is taking your source and handing it to somebody else's model, and the first quick start spends itself on a mode that does none of that. The render flag prints the exact prompt and the numbered file contents that would be sent, and the file is explicit that it needs no credentials and contacts no model. A second flag is a dry run that prints the resolved files and a token estimate. A third detail is quieter and just as useful: generated bundles carry stable line numbers, so an answer can cite a file and a line and you can check it. Three affordances aimed at the same anxiety, two of them free, and only the third actually sends anything. It is a single command:
oracle --render \
-p "Review the package metadata for release risks" \
--file package.jsonThe engine is chosen by your environment unless you say otherwise
With no flag, the tool uses the provider API path when an OpenAI key is available and the browser path otherwise. So the same command behaves differently on two machines, and the difference is where your code ends up: a provider endpoint, or a chat window in a browser you are signed into. There is a flag for each path, and the file explains the difference in one sentence per row of a small table, which is about the right amount of documentation for it. What the file does not state is what happens to the content on the way through whichever path was chosen, or that the aggregator route is one of the supported endpoints, which means a router in the middle of a code review is a decision worth making on purpose.
One browser path logs in, the other replays cookies
The two browser routes are not the same mechanism. One drives Chrome against a session you signed into once, after a one-time login flow. The other is described, in the same sentence, as a cookie-based client for the other provider, and the root of the repository holds a script named after cookie probing. A driven browser is a login you performed and can revoke; a replayed cookie is a session token with a shorter life and a different blast radius if it is copied into the wrong place. Both paths are your own account and neither is unusual for a tool that automates your own chat subscriptions. What matters is knowing which of the two you are on before you send a directory of source code through it, and the file gives you enough to tell.
The published package contains a compiled application and a build script
The manifest's published file list has the build output, an icon, the readme and the licence, and then three paths under a vendor directory: a Swift source file, a prebuilt Mac application bundle with everything inside it, and the shell script that builds it. So installing this package from a registry installs a compiled Mac application alongside the JavaScript, and it is in the tarball rather than something built on your machine at install time. The assembly step that copies that tree into the output is a one-line script written inline in the manifest, using recursive filesystem calls, while the two documentation scripts beside it are proper files. That is an odd asymmetry: the least legible build step is the one embedded as a string.
Eight model names in the package, one in the repository
The package description enumerates eight model variants across three generations, including two from the newest release, a professional variant of one of them, and a high reasoning mode of the coding model. The repository's own description says one thing, naming a single flagship model as the thing you invoke. A model list written into package metadata is a list that is wrong within months, and the one in the repository description is already narrower than the one sitting beside it in the manifest. Two other fields are worth a glance. The keyword list is present and empty, and the author field is present and an empty string, so a registry page for this package shows a name, a version, a licence and no attribution at all.
Prompts, attachments and answers accumulate in your home directory
Runs are stored under a sessions directory inside your home folder, so a long response can finish in the background and a completed answer can be replayed. You can list recent work by hour, reattach to a run that is still going, repeat one, or continue a supported conversation with more context. Four consequences follow. Your prompts and the files you attached are on disk in plain form. A repeat sends the same context again, which is convenient and also means a run costs money every time you press it. Continuing a conversation accumulates context across turns rather than starting fresh. And the storage path is the one thing the installation guide bothers to document, which suggests the author knows it is the piece people need to find.
A directory named git sits in the repository root
Beside the manifest, the lock file and the workspace file there is an entry named git. Whatever it holds, a repository root containing a directory with that name is a hazard for anything that resolves a command relative to the working directory, and it is the first thing to trip over in a shell configured the old way. The rest of the root is ordinary and unusually tidy: two configuration files for one linting and formatting toolset, two TypeScript configurations for building and for the editor, a build directory, a runner directory with no extension at all, a test configuration, a skills directory, an agent instruction file and a script at the top level named after cookie probing. Four projects in one root, if you count the packaged notifier.
Editorial conclusion
Oracle is worth a look if you want a second opinion on a change from a different model with the real files in front of it, because the two pre-send modes are unusual and genuinely useful: one prints the exact bundle and contacts nothing, the other estimates tokens before you commit. Three things to weigh first. With no flag it decides between the provider API and a browser you are signed into based on whether an OpenAI key is present, so the same command behaves differently on two machines and your code takes different routes. One of the two browser routes replays session cookies rather than driving a logged-in window, which is a narrower mechanism and worth knowing which is in use. And the published npm package includes a prebuilt Mac application bundle alongside the JavaScript, so installing it installs a compiled binary you did not build. Licence terms are MIT, the last push is dated 2026-10-02, and the Node floor is 24.
Frequently asked questions
What does oracle do?
It is a command line tool and an MCP server that bundles a prompt with the files you select, sends that context to a model through either a provider API or a signed-in browser session, and stores the result as a session. It is aimed at developers and coding agents that want a second-model review grounded in the actual project.
How do I install oracle?
With Homebrew on macOS or Linux, or by installing the npm package globally. It requires Node.js 24 or newer. You can also run it without installing, through a one-off npx invocation with the help flag. A separate installation guide covers pnpm, updates, keys and storage paths.
Does oracle send my code anywhere without asking?
It has two pre-send modes. One renders the exact prompt and numbered file contents it would send, needs no credentials and contacts no model. The other is a dry run that prints the resolved files and a token estimate. Without a flag it chooses the API path when an OpenAI key is present and the browser path otherwise, and either can be requested explicitly.
What is the difference between oracle's two browser modes?
One drives Chrome against a signed-in ChatGPT session after a one-time login flow. The other is described as a cookie-based client for Gemini. The README explains that the browser path exists to use a session you are already signed into, and links separate guides for each.
Where does oracle store things?
Runs are stored under a sessions directory in your home directory, so long responses can finish in the background and completed answers can be replayed. You can list recent work by hour, reattach to a run, repeat one, or continue a supported conversation with more context, and the installation guide documents the storage paths.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/steipete-oracle)Star history chart for your README
[](https://hysenlabs.com/projects/steipete-oracle)Was this useful?