Gneol

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.

Installation

One command puts the Gneol runtime on your machine. That's it — no separate service to install, no database to set up.

bash — install
$ 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

Write a Program

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.

hello.gneol
// 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

Deploy & Run

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.

bash — deploy
// 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.

Why Gneol?

Single Binary

CLI, LLM runtime, and terminal in one self-contained executable. Just download and run.

File-Driven Agents

Declare agents, models, triggers, tools, and MCP servers in a single .gneol file.

Automated Triggers

Time-based and event-based triggers fire your workflows automatically. The AI checks the conditions itself, so triggers only run when they should.

MCP & Custom Tools

Plug in tools from the Model Context Protocol (MCP) ecosystem, or write your own with the Gneol SDK.

Safe by Default

File access is permission-controlled per file. Changes are backed up automatically. Long-running tasks run in isolated subagents.

macOS & Linux

Precompiled binaries for macOS arm64 and Linux x64. One install command gets you going.

VS Code IntelliSense

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.

Install from Marketplace

bash — install
$ code --install-extension Gneol.gneol-intellisense
✓ Installed Gneol IntelliSense extension.

Gneol SDK

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.

View on npm

bash — install
$ npm install gneol-sdk
✓ added 1 package # Node 16+ · Gneol CLI required to deploy
support-triage.ts
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

Stay in the loop

Watch the repo on GitHub to get notified about releases and updates. Found a bug or have a question? Email us.