uncloseai.
+uncloseai-cli: Local LLM Agent
+ + +Three Tools for Growing Machine Learning from Seed
+ +The uncloseai-cli repository contains three tools that form a complete local ML pipeline: agent harness, model training, and dataset curation. Zero external dependencies. Pure Python. Public domain.
+ +-
+
- uncloseai-cli: ReAct agent harness powered by Unclose Machine Learning (Llama 3.1 8B) +
- microgpt: Pure-Python GPT trainer and inference, zero dependencies +
- garden.mk: Smol model garden. Pull datasets, grow models, track origins +
Install
+git clone https://git.unturf.com/engineering/unturf/uncloseai-cli.git
+cd uncloseai-cli
+make install
+ Creates uncloseai-cli, unclose, u, microgpt-cli, microgpt in /usr/local/bin.
Source: git.unturf.com/engineering/unturf/uncloseai-cli
+ ++ +
uncloseai-cli: Local LLM Agent
+ +A minimal "Claude Code" style tool-calling agent powered by a local 8B parameter LLM. Every request flows through a todo system:
+ +-
+
- Plan: LLM breaks request into numbered tasks +
- Trim: Python removes fluff (open/read, report/inform), caps at 5 +
- Execute: each task runs through a ReAct loop with tool access +
- Forward: prior task results flow to later tasks as context +
Usage
+# Run a task
+unclose "pull and sync"
+
+# Multi-step: agent plans and executes each step
+unclose "what time is it in EST? also run ddate"
+
+# Print-only mode (minimal output, just final answer)
+unclose -p "summarize SYSTEM-PROMPT.md"
+
+# Verbose mode (show turn numbers)
+unclose -v "deploy"
+
+# Interactive REPL
+unclose -i
+
+ Configuration
+All configuration via environment variables. No config files needed:
+ +| Variable | Default | Description |
|---|---|---|
UNCLOSE_BASE | https://hermes.ai.unturf.com/v1 | OpenAI-compatible API base URL |
UNCLOSE_MODEL | (auto-detected) | Model name from /v1/models |
UNCLOSE_KEY | permacomputer | API key |
UNCLOSE_MAX_TURNS | 15 | Max ReAct turns per task |
UNCLOSE_MAX_RESULT | 12000 | Max chars per tool result |
Point it at any OpenAI-compatible endpoint: vLLM, Ollama, or the free uncloseai inference endpoints. By default it connects to hermes.ai.unturf.com. See Model Discovery for all available endpoints and how to query current model IDs.
+ +Tools
+The agent has access to 8 built-in tools:
+ +| Tool | Args | Description |
|---|---|---|
bash | command | Run a shell command (60s timeout, dangerous commands blocked) |
read | path | Read a file (truncated at 12K chars) |
write | path, content | Create or overwrite a file |
edit | path, old, new | Replace exact string in file |
glob | pattern, path | Find files by glob pattern |
grep | pattern, path | Search file contents with regex |
fetch | url, depth, keywords | Fetch web page, extract text (async crawler) |
todo_add | content, activeForm | Add task to live todo list during execution |
Web Fetching
+The fetch tool wraps a production-grade async web crawler:
-
+
- Single page: fetches, strips HTML, returns readable text + links +
- Deep crawl: keyword-aware multi-level crawl (up to 10 pages) +
- Ethical: respects robots.txt, crawl delays, clear user-agent string +
- Progressive: fetches target page first, auto-crawls deeper only if keywords aren't covered +
Session Logging
+Every session is logged as JSONL to ~/.uncloseai/sessions/. Use unclose-snoop to parse session logs into a readable feed:
cat ~/.uncloseai/sessions/*.jsonl | unclose-snoop
+
+ + +
microgpt: Pure-Python GPT
+ +Minimal GPT training & inference with zero external dependencies: only os, math, random, json, argparse. Based on Karpathy's microgpt.
Implements: scalar autograd (Value class), multi-head attention, RMSNorm, MLP, Adam optimizer with linear LR decay, temperature-controlled sampling. JSON model persistence with full metadata.
+ +Usage
+# Train on a text dataset (one document per line)
+microgpt train --dataset names.txt --steps 1024 --save model.json
+
+# Generate samples from a trained model
+microgpt generate --load model.json --samples 10 --temperature 0.5
+
+# Train & generate in one shot
+microgpt run --dataset names.txt --steps 1024 --samples 10
+
+# Inspect a saved model
+microgpt info model.json
+
+ Flags
+| Flag | Default | Subcommands |
|---|---|---|
--dataset PATH | auto-download names.txt | train, run |
--save PATH | microgpt-model.json | train, run |
--load PATH | (required) | generate |
--steps N | 1000 | train, run |
--lr FLOAT | 0.01 | train, run |
--n-embd N | 16 | train, run |
--n-head N | 4 | train, run |
--n-layer N | 1 | train, run |
--block-size N | 16 | train, run |
--samples N | 20 | generate, run |
--temperature FLOAT | 0.5 | generate, run |
--seed N | 42 | all |
--quiet | false | train, run |
Also ships as microgpt.h, a single-header C library for model inference.
+ +
garden.mk: Smol Model Garden
+ +Pull 15 curated character-level datasets, grow GPT models at 3 sizes. Every dataset tracks its upstream origin. Mirrored to HuggingFace: russellbal/smol-seeds.
+ +Datasets
+| Seed | Lines | Origin | Freshness |
|---|---|---|---|
| names | 32K | karpathy/makemore | Dormant (2022) |
| words | 97K | dwyl/english-words | Stable (2025) |
| pokemon | 1K | sindresorhus/pokemon | Stable (2024) |
| dinosaurs | 1.5K | brunoklein99/deep-learning-notes | Fossil (2018) |
| hex-colors | 32K | xkcd + meodai/color-names | Active |
| color-names | 31K | meodai/color-names | Active |
| chords | 1K | tombatossals/chords-db | Quarterly |
| json-keys | 4K | GitHub OpenAPI spec | Active |
| css-classes | 2K | twbs/bootstrap | Quarterly |
| make-targets | 291 | scraped from major repos | Active |
| commit-msgs | 20K | angular/angular | Active |
| haiku | 143K | docmarionum1/haikurnn | Fossil (2018) |
| variable-names | 3.8K | GitHub repo trees | Active |
| last-names | 225K | sacrificialpancakes/synthetic_demographics_seed | Stable |
| occupations | 831 | sacrificialpancakes/synthetic_demographics_seed | Stable |
Usage
+# Download all datasets
+make -f garden.mk pull
+
+# Train all models at embedding size 64
+make -f garden.mk grow-64
+
+# Train all at all sizes (64, 128, 512)
+make -f garden.mk grow
+
+# Pull + grow one model family
+make -f garden.mk names
+
+# List upstream sources
+make -f garden.mk origins
+
+# Check upstream freshness
+make -f garden.mk freshness
+
+# Sample from a trained model
+make -f garden.mk sample MODEL=pokemon-64 N=10
+
+# Show trained model inventory
+make -f garden.mk inventory
+
+# Push datasets to HuggingFace mirror
+make -f garden.mk mirror
+
+ Model Sizes
+| Size | n_embd | n_head | n_layer | Use |
|---|---|---|---|---|
| 64 | 64 | 4 | 1 | Fast, good for testing |
| 128 | 128 | 8 | 2 | Balanced |
| 512 | 512 | 8 | 4 | Slow in pure Python, best quality |
+ +
Architecture
+ +The agent orchestration follows a plan-execute-forward pattern:
+ +User Message
+ ↓
+Plan Phase (LLM call with planning-only prompt)
+ ↓
+JSON task array
+ ↓
+Trim Phase (Python, no LLM)
+ • drop fluff (report/inform)
+ • drop prep (open/read)
+ ↓
+Save to ~/.uncloseai/todos/{session}.json
+ ↓
+┌─→ Any pending tasks? ─── no → Display final todo list ✓
+│ ↓ yes
+│ Mark in_progress
+│ ↓
+│ ReAct Loop (tool calls until done or stuck)
+│ ↓
+│ Mark completed → Save → Append result (≤500 chars)
+└───────┘
+
+ Each task in the ReAct loop can call tools, receive results, and iterate up to UNCLOSE_MAX_TURNS times. Stuck-loop detection bails out after 2 identical consecutive tool calls.
Prior task results are forwarded as context to later tasks, so multi-step requests build on earlier work without re-executing commands.
+ +Read-Only Mode
+When the agent detects a read-only intent (questions, searches, inspections), it automatically disables write and edit tools. This prevents accidental file modifications on information-gathering requests.
+ +
License
+Public domain. Knowledge unbound by gatekeepers.
+ + + + + + +