Self-hosted apps you operate by watching a dashboard and talking to a coding agent that IS the runtime — it proposes, applies, and evolves the app live. Built for Claude Code and MCP.
Overview
It is a self‑hosted app you operate by a live dashboard and with a coding agent that serves as the runtime. Need a new behavior? Ask once — ANA proposes the change, applies it on approval, and evolves the app at runtime. No PR, no ship step — the running agent rewrites the app live and the dashboard reloads. An assistant waits for instructions. An agent uses judgment, executes, and improves the tools around your work. Every tool today still forces a trade‑off between and — ANA collapses that gap. SaaS is instant but frozen. Coding agents are infinitely malleable but build‑time only — you ship, then use. because the agent is native to the runtime. 1. — visual state and chat live in one view. You operate by looking and talking, not clicking through fixed UI. 2. — the agent reads your data, acts, and when asked. Inference is the runtime. 3. — zero dependencies, self‑hosted, yours forever. It keeps evolving with you.
README
TL;DR
ANA is an Agent‑Native Agent for Agent‑Native Lifestyle (ANL). It is a self‑hosted app you operate by watching a live dashboard and conversing with a coding agent that serves as the runtime. Need a new behavior? Ask once — ANA proposes the change, applies it on approval, and evolves the app at runtime. No PR, no ship step — the running agent rewrites the app live and the dashboard reloads.
Use = Build. That’s the whole idea.
Why Agent, Not Assistant
An assistant waits for instructions. An agent uses judgment, executes, and improves the tools around your work. Every tool today still forces a trade‑off between using and building — ANA collapses that gap.
| SaaS / Apps | No‑code | Chatbots | Coding agents | ANA | |
|---|---|---|---|---|---|
| Use it instantly | ✅ | ✅ | ✅ | ❌ | ✅ |
| Change anything | ❌ | ⚠️ in‑box | ❌ | ✅ | ✅ |
| Sees your live data | ✅ | ✅ | ⚠️ | ⚠️ | ✅ |
| Change it while using it — same conversation | ❌ | ❌ | ❌ | ⚠️ | ✅ |
| You fully own it (self‑host) | ❌ | ❌ | ❌ | ✅ | ✅ |
SaaS is instant but frozen. Coding agents are infinitely malleable but build‑time only — you ship, then use. ANA makes using the app (talking) the same act as building it (changing behavior), because the agent is native to the runtime.
The Three Principles
- Watch + Converse — visual state and chat live in one view. You operate by looking and talking, not clicking through fixed UI.
- Agent as Runtime — the agent reads your data, acts, and rewrites the app’s own code when asked. Inference is the runtime.
- Own Your Harness — zero dependencies, self‑hosted, yours forever. It keeps evolving with you.
These are also the acceptance criteria for every ANA built with this harness.
How it works
flowchart TB
subgraph UX["Watch + Converse (browser)"]
direction LR
U["User"] D["Dashboard"]
end
subgraph RT["ANA runtime — one file: channel-core.js"]
direction LR
S["Server"] -->|"paste-buffer + Enter"| A["Coding agent · tmux"]
A -->|"capture-pane · 300ms"| S
end
D -->|"POST /api/chat"| S
S -->|"SSE /api/stream + proposals"| D
There is no bridge and no MCP. The browser posts to the server, the server injects the text straight into the tmux pane, and a 300 ms capture-pane loop mirrors the session back as an append-only ledger over SSE. For rich replies the agent posts a proposal (before/after + approve card); on approval the server applies the diff and bumps a version so every device re-syncs. The coding agent is the backend — you grow the app by talking to it.
Quickstart — run the base (2 min)
Prerequisites: Node ≥ 20, tmux, and a coding-agent CLI (e.g. Claude Code). No npm install — zero dependencies.
git clone https://github.com/tykimos/agent-native-agent
cd agent-native-agent
# 1) start your coding agent inside tmux
tmux new -s ana # inside the session, run: claude (or any agent CLI)
# 2) in another terminal, start ANA
node server.js # → http://localhost:8809
Open http://localhost:8809, flip on ANA mode, and talk. There is no launcher script — the server auto-configures the tmux pane (scrollback-safe) on connect. Runtime state lives in .ana/ (git-ignored).
The reference dashboard ships ANA mode (click any element to pin it as a context chip), a docked chat you resize, and an evolution tab — ask for a change, approve it, the running agent rewrites the app.
Sharing it with other people (optional)
ANA has no login of its own. For single-user self-hosting that is the point — bind to loopback and it is yours. If several people need the same board, put ANA behind something that authenticates (a reverse proxy, an SSO gateway, a Zero Trust tunnel) and have it forward the user identifier as a request header:
ANA_IDENTITY_HEADER=x-forwarded-email \
ANA_LOGOUT_URL=/your-gateway/logout \
node server.js
With the header set, items carry an author, only the author can edit or delete their own, and the member/activity tabs come alive. Unset (the default) everything runs as one local user.
The header is trusted as-is, so it only means anything when a gateway in front actually sets it. Keep the server on loopback or behind that proxy — exposing it on
0.0.0.0with this option on lets anyone forge the header.
Attach ANA to your own service (very simple)
The entire runtime is one dependency-free file: channel-core.js. Drop it in and mount it:
const path = require('node:path');
const core = require('./channel-core.js');
const app = core.createChannelServer({
PORT: 8809, BIND: '127.0.0.1',
SESSION: process.env.TMUX_SESSION || 'ana',
SOCKET: process.env.TMUX_SOCKET || '',
TARGET: core.resolveTarget(__dirname, process.env),
FEED_FILE: path.join(__dirname, '.ana', 'transcript.jsonl'),
SERVABLE: new Set(['index.html']), // your dashboard file(s)
defaultDoc: 'index.html',
autoConfigPane: true,
});
app.listen(() => console.log('ANA → http://localhost:8809'));
Then, on your page: send with POST /api/chat {text, force:true} and stream with GET /api/stream (SSE). That’s the whole integration. Full step-by-step and the endpoint reference are in the ana skill — install it into Claude Code and it will wire ANA into your app for you:
# use as a Claude Code plugin/skill
cp -r skills/ana ~/.claude/skills/ # then: "attach ANA to my app"
Repository layout
channel-core.js ★ the whole ANA runtime — tmux inject / capture-pane mirror / ledger (0 deps)
server.js base app: mounts channel-core + dashboard-api, serves dashboard.html
dashboard-api.js example rich-response API (todo · schedule · memo · evolve, diff→approve)
dashboard.html reference UI: ANA mode, context chips, docked chat, evolution tab
test.cjs 57 tests (unit + integration against mock_agent.py)
mock_agent.py deterministic TUI stand-in for tests
skills/ana/SKILL.md "attach ANA to your service" — the simple recipe above
.claude-plugin/ Claude Code plugin manifest
channel-core.js is the reusable core; dashboard-api.js / dashboard.html are the example you copy from and replace with your own.
ANA and ANL
| Name | Reads as | Means | Role |
|---|---|---|---|
| ANA | Ana | Agent‑Native Agent | The autonomous agent that understands, acts, and improves the app. |
| ANL | Anel | Agent‑Native Lifestyle | The new way of working, learning, creating, and running daily routines with agents. |
ANA enables ANL. Real ANL cases — lifestyles built with ANA — live in the companion repo: agent‑native‑lifestyle.
Star History
Contributing
ANA is meant to be owned and evolved — that includes this repo. Issues, ideas, and PRs are welcome; see CONTRIBUTING.md for how to improve the runtime or the example dashboard.
If you build something with ANA, add it to the agent‑native‑lifestyle gallery so ANL stays visible as real usage.
If ANA changes how you think about apps, ⭐ star the repo so others can find it.
License
AGPL-3.0 © tykimos · AI Factory Inc.
Free to use, modify, and self-host. If you run a modified version as a network service, AGPL §13 requires you to publish your source. Building something closed-source or hosted? A commercial license is available.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add tykimos/agent-native-agent