AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Generative UI for agents
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Galvanized Pukeko
-blue.svg)
Give your LLM agent a real UI. Instead of replying with text only, the agent renders forms,
charts, tables and interactive A2UI surfaces — and reads back what
the user does with them. The UI is a Vue 3 component library that talks to any
AG-UI server.
The heart of the project is @galvanized-pukeko/vue-ui —
a Vue 3 library that renders the chat interface plus the components an agent asks for.
Point it at any AG-UI server and the agent can render UI right in the conversation. See the docs:README 전문 보기 ↗Give your LLM agent a real UI. Instead of replying with text only, the agent renders forms, charts, tables and interactive A2UI surfaces — and reads back what the user does with them. The UI is a Vue 3 component library that talks to any AG-UI server.
The heart of the project is @galvanized-pukeko/vue-ui —
a Vue 3 library that renders the chat interface plus the components an agent asks for.
npm install @galvanized-pukeko/vue-ui vue
import '@galvanized-pukeko/vue-ui/style.css'
import { createApp } from 'vue'
import { CoreApp, configService } from '@galvanized-pukeko/vue-ui'
await configService.load()
createApp(CoreApp).mount('#app')
Point it at any AG-UI server and the agent can render UI right in the conversation. See the docs:
In the wild: the Pukeko robot controller drives a physical robot through the Vue UI — the agent calls browser-side client tools (camera, motion) and reads the results back.
graph LR
subgraph Browser
UI["Vue UI<br/>@galvanized-pukeko/vue-ui"]
end
subgraph Server["AG-UI server (your choice of backend)"]
direction TB
GTH["Gaunt Sloth<br/>(TypeScript CLI)"]
ADK["ADK agent<br/>(Java / Spring Boot)"]
end
UI -->|"AG-UI · HTTP/SSE"| Server
Server -->|"tool calls → render forms, charts, tables, A2UI"| UI
The Vue UI is backend-agnostic — any AG-UI server works. This repo ships two: the npm-based Gaunt Sloth CLI and a Java/Spring ADK agent.
| Package | Description |
|---|---|
galvanized-pukeko-vue-ui | The Vue 3 UI library — chat interface, forms, charts, tables, A2UI surfaces. Published on npm. Docs. |
galvanized-pukeko-web-client | Thin host app that mounts the Vue UI — the dev server, and the build embedded by the ADK agent. Not published. |
galvanized-pukeko-agent-adk | One backend option: a Spring Boot / Google ADK agent with UI-rendering tools, MCP and A2A. On Maven Central. See its README. |
Gaunt Sloth — a separate TypeScript CLI — is the other supported AG-UI backend.
Prerequisites: Node.js 24+. (The ADK backend additionally needs Java 17+; Maven is bundled via ./mvnw.)
Option 1 — Gaunt Sloth backend (Node only):
pnpm install
pnpm run start-gth-ag-ui # AG-UI server on :3000 + web client on :5555
This runs OpenAI and needs an OPENAI_API_KEY. For no key at all, point it at a local
Ollama daemon:
GTH_LLM_PROVIDER=ollama pnpm run start-gth-ag-ui
GTH_LLM_PROVIDER selects one of the configurations in
examples/pukeko-gaunt-sloth-ag-ui/,
which is also where you add another provider.
Option 2 — ADK agent (Java):
pnpm install
pnpm run start-adk # ADK agent on :8080 + web client on :5555
See the ADK README for ADK setup, models, MCP/A2A and Cloud Run deployment.
Then open http://localhost:5555 and try:
"Show me a contact form" — renders a form"Show me a chart of month lengths" — renders a chart"Show me a table of suppliers" — renders a tableMore end-to-end setups live in examples/.
End-to-end tests use Playwright; the runners start the services for you:
pnpm run it-gth-ag-ui # Gaunt Sloth backend
pnpm run it-adk # ADK backend (add it-adk-headed for a visible browser)
If Playwright reports the browser is missing, run node_modules/.bin/playwright install
from the repository root. Use the installed binary rather than a one-shot package
runner: given a name that does not resolve locally, those fetch and execute whatever
the public registry serves under it.
A local Ollama daemon is backed by one GPU, and one card holds one model at a time. When
it-gth-ag-ui or it-koog is pointed at a local model it takes a machine-wide lock first and
waits its turn, so two such runs queue instead of thrashing each other's VRAM — which otherwise
fails as a timeout that looks like the model, not like contention.
The lock is a file in the system temp directory keyed by the daemon address, which is what lets it
serialise runs in other repositories too: Gaunt Sloth's
integration harness takes the same file. The two are independent implementations that agree on a
path and a file format rather than sharing code, because neither publishes the helper the other
would import. scripts/ollama-gpu-lock.mjs holds that contract and the reasoning; pnpm test
checks it still holds.
The Koog example's server is a JVM process and names its daemon with a different variable
(OLLAMA_BASE_URL) and a different spelling of the loopback address, which would key a second,
unshared lockfile for the very same daemon. So it-koog resolves the address itself, locks on it,
and passes that same string to the server — the address locked and the address dialled are one
value rather than two defaults that have to keep agreeing.
Runs against a hosted provider are not locked — there is no card to contend for. Neither are the
interactive start-* launchers, whose sessions are open-ended.
Contributions are welcome — see CONTRIBUTING.md.
@galvanized-pukeko/vue-ui on npmReleased under the MIT License © Andrew Kondratev.
The galvanized-pukeko-agent-adk package is a separate, optional backend licensed under
Apache License 2.0.