A runtime for .gneol files — describe your AI program in one plain-text file, deploy it with one command, and Gneol runs it. No external server to deploy. No database. Just one binary that contains the CLI, the model runtime, and the chat terminal.
One command puts the Gneol runtime on your machine. That's it — no separate service to install, no database to set up.
$ curl -sSL https://raw.githubusercontent.com/Gneol/Gneol/main/install.sh | bash
$ curl -sSL https://raw.githubusercontent.com/Gneol/Gneol/main/install.sh | bash -s -- --version v0.3.0
# Download from GitHub Releases:
# https://github.com/Gneol/Gneol/releases
#
# macOS (arm64) → gneol-darwin-arm64.tar.gz
# Linux (x64) → gneol-linux-x64.tar.gz
Everything in Gneol starts with a file.
A .gneol file describes your program.
Name it, give it a model. Add tools, subagents, schedules — the pieces your agent needs to work. It's plain text, so it reads like a spec, not a codebase.
Save it and you're ready to deploy.
// an agent, in one file
program("Hello World")
.model("fast-llm")
model("fast-llm")
.provider("openrouter")
.modelId("openai/gpt-4o-mini")
.apiKey("OPENROUTER_API_KEY")
// add subagents, triggers, schedules later
Bring your own .gneol file and deploy it — or run
gneol with no file at all and it scaffolds one for you.
Either way, Gneol handles the agentic loop — calling models, firing
triggers, delegating to subagents — so you just talk to it.
// a .gneol file you wrote — deploy it directly
$ gneol deploy -f hello.gneol -i
✓ Deployed. Agent "Hello World" is live.
$ gneol
Hello World ❯ hi there
💬 Hello! I'm your Hello World agent — ask me anything.
// close this terminal — the agent keeps running
$ gneol stop -f hello.gneol # stops the program
// no file yet? gneol writes index.gneol for you
$ gneol
No index.gneol found. How would you like to proceed?
❯ Create a new index.gneol
✓ Created index.gneol and GNEOL.md — edit them, then deploy with gneol deploy.
CLI, LLM runtime, and terminal in one self-contained executable. Just download and run.
Declare agents, models, triggers, tools, and MCP servers in a single .gneol file.
Time-based and event-based triggers fire your workflows automatically. The AI checks the conditions itself, so triggers only run when they should.
Plug in tools from the Model Context Protocol (MCP) ecosystem, or write your own with the Gneol SDK.
File access is permission-controlled per file. Changes are backed up automatically. Long-running tasks run in isolated subagents.
Precompiled binaries for macOS arm64 and Linux x64. One install command gets you going.
Syntax highlighting, autocomplete, and inline docs for
.gneol files — right in your editor.
Author .gneol files with confidence.
Install the official Gneol IntelliSense extension and get syntax highlighting, autocomplete, and documentation tooltips for every directive.
$ code --install-extension Gneol.gneol-intellisense
✓ Installed Gneol IntelliSense extension.
Everything a .gneol file can do, as a typed TypeScript
API. Compose the program in code, write the same plain-text
format, deploy with the CLI.
Declare the program, not the plumbing.
Every directive is an accessor on the program object — models, subagents, triggers, tools, MCP servers, summarization, imports. Create, list, update, and delete them as objects instead of editing script text by hand.
program.header
program.models
program.sentinels
program.triggers
program.tools
program.mcp
program.summarizations
program.imports
save() writes the .gneol file and
deploy() runs
gneol deploy -f on it.
$ npm install gneol-sdk
✓ added 1 package # Node 16+ · Gneol CLI required to deploy
import { Program } from "gneol-sdk";
// point at the .gneol file you want to build
const program = new Program("./support-triage.gneol");
program.header.set({ name: "Support Triage", model: "fast-llm" });
await program.models.create({
name: "fast-llm",
provider: "openrouter",
modelId: "openai/gpt-4o-mini",
apiKey: "OPENROUTER_API_KEY",
});
await program.sentinels.create({
name: "BillingBot",
model: "fast-llm",
description: "Handles payment and refund inquiries.",
});
await program.triggers.create({
timeExpr: "every:30min",
do: ["Run escalation check for stalled tickets."],
sentinel: "BillingBot",
});
// writes the same .gneol file you would write by hand
await program.save();
await program.deploy(); // → gneol deploy -f ./support-triage.gneol
Watch the repo on GitHub to get notified about releases and updates. Found a bug or have a question? Email us.