Gray: A minimal,always-onagent.

Gray is a minimal, always-on AI harness that helps people run AI agents 24/7 without heavy compute or complex setup.

The Carina Nebula cosmic cliffs

Watch it go

You watch it think.

gray · Run /help for commands
 
❯ Create a horsetinder folder with a single self-contained index.html implementing HorseTinder as a mobile-first Tinder-style joke app for horses with 12 hardcoded profiles and drag plus button plus keyboard swiping with match modal and localStorage-persisted matches and filters and empty and reset states using only inline CSS/JS.
 
 
⬢List ~/graydemos
1 | (empty directory)
 
 
⬢Wrote horsetinder/index.html (608 lines)
1 |<!DOCTYPE html>
2 |<html lang="en">
3 |<head>
4 |<meta charset="UTF-8" />
5 |<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6 |<title>HorseTinder — Neigh Your Mate 🐴</title>
7 |<style>
8 |:root{
9 | --pink:#fd267d; --orange:#ff7854; --gold:#ffb800;
10 | --bg:#f5f3ef; --card:#fff; --ink:#2b2b2e; --muted:#8a8a93;
11 | --green:#2ecc71; --red:#ff4458;
12 | --radius:22px; --shadow:0 18px 50px rgba(0,0,0,.18);
13 | --max:430px;
14 |}
15 |*{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
16 |html,body{height:100%}
17 |body{
18 | margin:0; font-family:ui-rounded,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
… +584 lines
603 |rebuildDeck();
604 |renderMatches();
605 |})();
606 |</script>
607 |</body>
608 |</html>
 
 
⬢Ran cd /home/vstaln/graydemos/horsetinder && ls -l && grep -c 'name:"' index.html; grep -o 'localStorage' index.html | wc -l; grep -c -E 'pointerdown|ArrowRight|matchOverlay|fBreed|emptyState|resetDeck' index.html; ! grep -Eo '(src=|href=|@import|<link|<script src)' index.html || echo "HAS_EXTERNAL_REFS_ABOVE"; echo "---"; wc -c index.html
1 |exit 0 (`cd /home/vstaln/graydemos/horsetinder && ls -l && grep -c 'name:"' index.html; grep -o 'localStorage' index.html | wc -l; grep -c -E 'pointerdown|ArrowRight|matchOverlay|fBreed|emptyState|resetDeck' index.html; ! grep -Eo '(src=|href=|@import|<link|<script src)' index.html || echo "HAS_EXTERNAL_REFS_ABOVE"; echo "---"; wc -c index.html` reports wc's exit, not cd's; rerun with `set -o pipefail;` to see the real status) · 0.0s · 7 lines · log ~/.gray/shell/5967250d-b79f-453b-9bed-eb51db32acb6/t1.log
2 |<untrusted-output task="t1">
3 |total 32
4 |-rw-r--r-- 1 vstaln vstaln 31170 Sep 9 15:35 index.html
5 |12
6 |5
7 |17
8 |---
9 |31170 index.html
10 |
11 |</untrusted-output>
 
 
⬢Ran python3 -c " import re html = open('/home/vstaln/graydemos/horsetinder/index.html').read() m = re.search(r'<script>(.*?)</script>', html, re.S) open('/tmp/ht_check.js','w').write(m.group(1)) print('script bytes:', len(m.group(1))) " && node --check /tmp/ht_check.js && echo "JS_SYNTAX_OK"
1 |exit 0 · 0.1s · 2 lines · log ~/.gray/shell/5967250d-b79f-453b-9bed-eb51db32acb6/t2.log
2 |<untrusted-output task="t2">
3 |script bytes: 18241
4 |JS_SYNTAX_OK
5 |
6 |</untrusted-output>
 
Done: index.html (file:///home/vstaln/graydemos/horsetinder/index.html) — 31KB, single self-contained file, no external refs.
· 12 hardcoded horse profiles (JS syntax verified with node --check)
· Drag (pointer events) + ♥/✕ buttons + ←/→/U keyboard
· Match modal (only when profile likesYou), matches drawer
· localStorage for matches + filters (keys horsetinder_matches_v1, horsetinder_filters_v1)
· Filters: breed, search, max distance, max age, with counts + reset
· Empty states (swiped-through vs. filtered-out) + reset deck + unmatch/clear matches
Open it in a mobile viewport for the intended layout.
✻ Thought for 1m 41s · 63,905 tok
❯
63.9k/200k · 99.5% cache · ◷ 5mMuse Spark 1.3 Contributor · xhigh

What it does

Four things, done completely.

Minimal core

The agent loop, tools, and sessions in one tiny binary. Starts in milliseconds. Everything else is a plugin or a skill.

Any provider

Use OpenRouter, DeepSeek, OpenAI, Anthropic, or Cerebras. Switch models mid-session.

Extends cleanly

Add your own: Pi extensions, Claude plugins — or even make your own plugins. Gray is infinitely customizable. /skills and /plugin manage both.

Bash only

Everything runs through bash — read, search, edit, run. No tool sprawl, one surface that does it all.

Pricing

Free and open source.

MIT and free forever with your own keys. Or get in for a dollar. See plans.

GraylingFounding

$1

once

Dithered Earth at night
  • ·Your own Gray machine on Gray Cloud
  • ·$10 of Qwen 3.8 Flash by GMI Cloud
RAM · 1 vCPUPowered by Maritime
2 GB
Qwen 3.8 FlashGMI Cloud
$10
$ gray login
$ gray cloud

Sign in once, then talk to your machine from any terminal. Or chat in the browser at /console/play.

50of 50 seats left

Rather run it yourself? Gray is MIT and free forever with your own keys. Install Gray.