{"id":51468499,"url":"https://github.com/bulletinmybeard/agent-forge-webui","last_synced_at":"2026-07-06T14:01:28.956Z","repository":{"id":367164612,"uuid":"1269305797","full_name":"bulletinmybeard/agent-forge-webui","owner":"bulletinmybeard","description":"React SPA front-end for AgentForge. Streams the agent's think/act/observe loop, with every mode, tool call, and connector in one chat UI.","archived":false,"fork":false,"pushed_at":"2026-06-24T20:03:56.000Z","size":1813,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-24T21:19:52.379Z","etag":null,"topics":["agentforge","agentic-ai","ai","ai-agent","chat-ui","frontend","llm","llm-ui","ollama","rag","react","spa","tailwindcss","tool-calling","vite","websocket"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bulletinmybeard.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-14T14:51:57.000Z","updated_at":"2026-06-24T20:04:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bulletinmybeard/agent-forge-webui","commit_stats":null,"previous_names":["bulletinmybeard/agent-forge-webui"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bulletinmybeard/agent-forge-webui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletinmybeard%2Fagent-forge-webui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletinmybeard%2Fagent-forge-webui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletinmybeard%2Fagent-forge-webui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletinmybeard%2Fagent-forge-webui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bulletinmybeard","download_url":"https://codeload.github.com/bulletinmybeard/agent-forge-webui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletinmybeard%2Fagent-forge-webui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35193679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentforge","agentic-ai","ai","ai-agent","chat-ui","frontend","llm","llm-ui","ollama","rag","react","spa","tailwindcss","tool-calling","vite","websocket"],"created_at":"2026-07-06T14:01:27.335Z","updated_at":"2026-07-06T14:01:28.904Z","avatar_url":"https://github.com/bulletinmybeard.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AgentForge WebUI\n\n[![CI](https://github.com/bulletinmybeard/agent-forge-webui/actions/workflows/ci.yml/badge.svg)](https://github.com/bulletinmybeard/agent-forge-webui/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Vite](https://img.shields.io/badge/Vite-8-646cff.svg?logo=vite\u0026logoColor=white)](https://vitejs.dev/)\n[![Biome](https://img.shields.io/badge/lint%2Fformat-Biome-60a5fa.svg?logo=biome\u0026logoColor=white)](https://biomejs.dev/)\n[![Requires AgentForge](https://img.shields.io/badge/requires-AgentForge%200.6.0%2B-blueviolet)](https://github.com/bulletinmybeard/agent-forge/releases/tag/v0.6.0)\n\n\u003e [!NOTE]\n\u003e **Experimental!**\n\u003e AgentForge WebUI is the front-end I tinker with to see how AgentForge feels as a full chat app: every mode, the tools, connectors, and the live think-act-observe stream in one place. It is early, lightly tested, and rough in the corners I haven't needed yet.\n\nAgentForge WebUI is a React SPA for [AgentForge](https://github.com/bulletinmybeard/agent-forge).\n\nIt's a pure frontend: it streams the agent's think \u003e act \u003e observe loop over the backend's `/ws/chat` WebSocket and calls its REST API for sessions, uploads, memory, and configs. It does nothing on its own why a running AgentForge backend is required!\n\n## Features\n\n- Streaming chat over the `/ws/chat` WebSocket, with the full think \u003e act \u003e observe event stream rendered live\n- Mode picker for the `@mode` prefixes (chat, docs, search, agent, sql, logs, discover, pipeline, review, research, coding, scheduler, monitor, connectors, and custom agents), each with its own colour\n- Per-event message cards: routing, config, tool calls, confirm + secret dialogs, results, summaries, errors, search metadata, discovery, research, scheduler/monitor jobs, file diffs, agent warning/recovery/retry/escalation, model fallback, and session compaction\n- Connectors UI: connect and manage multi-account Google (Gmail, Drive, BigQuery, YouTube), GitLab, and GitHub connections, with per-connection product/permission display and an in-place read/write toggle\n- Canvas workspace for pinned snippets, results, and queries\n- Bookmarks: save tool-call sets and agent answers from any run, fuzzy-searchable in a modal\n- Botty side panel for passive, in-context suggestions and full semantic-searchable chat session history\n- Session sidebar, status bar, knowledge bar, memory settings, profile and provider selectors, and a help modal\n- Context-usage bar with one-click session compaction at the critical threshold\n- Eager file uploads: paperclip, clipboard paste, or drag-and-drop with inline thumbnails. Unset attachments persist across reloads\n- GitHub-flavoured Markdown rendering and a Monaco-based inline prompt editor\n\n## Getting started\n\nPrerequisites: Node 20+ and a running AgentForge backend **0.6.0 or newer** (see the [backend repo](https://github.com/bulletinmybeard/agent-forge), as its `scripts/deploy-local.sh` brings the stack up with the web service on `:8200`).\n\n```bash\nnpm install\nnpm run dev  # Vite dev server on http://localhost:5173\n```\n\nThe dev server proxies `/ws`, `/api`, and `/uploads` to the backend. The target defaults to `http://localhost:8200`; override it with `VITE_BACKEND_URL`:\n\n```bash\nVITE_BACKEND_URL=https://agent.remote npm run dev\n```\n\n## Build\n\n```bash\nnpm run build    # production build to dist/\nnpm run preview  # serve the build locally\n```\n\n## Run with Docker\n\n`scripts/deploy-web-local.sh` builds the SPA and runs it on this host as a standalone nginx container (`Dockerfile` + `docker-compose.web.local.yml`). It serves the static bundle and reverse-proxies `/ws`, `/api`, and `/uploads` to your AgentForge backend — nothing leaves the machine.\n\n```bash\nscripts/deploy-web-local.sh    # build + run, detached, on http://localhost:8400\nscripts/teardown-web-local.sh  # stop and remove it\n```\n\nIt expects an AgentForge backend reachable at `http://host.docker.internal:8200` (the default from the backend's `scripts/deploy-local.sh`).\n\nFlags:\n\n- `--dev` (alias `--hot`): skip the container and run the Vite dev server with hot reload on the same port, proxying `/ws` `/api` `/uploads` to the backend. The fast inner loop: no image, no rebuilds, instant reloads on save\n- `--no-build`: recreate the container without rebuilding the image\n- `--no-cache`: force a clean image build (no Docker layer cache)\n- `--foreground`: run attached and stream logs instead of detaching\n\nDefaults come from `deploy-web.local.env` (optional: copy `deploy-web.local.env.example`): `WEB_PORT` (default `8400`) and `AGENT_BACKEND` (default `http://host.docker.internal:8200`).\n\n## Screenshots\n\n\u003ctable\u003e\n  \u003ctr valign=\"top\"\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\".github/assets/agent-forge-web-ui-prompt-demo-1.png\"\u003e\n        \u003cimg\n          src=\".github/assets/agent-forge-web-ui-prompt-demo-1.png\"\n          width=\"100%\"\n          height=\"420\"\n          alt=\"AgentForge WebUI running an @search query comparing HTTP/2 and HTTP/3\"\n        \u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ca href=\".github/assets/agent-forge-web-ui-prompt-demo-2.png\"\u003e\n        \u003cimg\n          src=\".github/assets/agent-forge-web-ui-prompt-demo-2.png\"\n          width=\"100%\"\n          height=\"420\"\n          alt=\"AgentForge WebUI answering an @search for the highest-rated sci-fi movies released between 2021 and 2025\"\n        \u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eWeb search: routing, a tool call, and a sourced answer with a summary table\u003c/em\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cem\u003eA date-range run: ranked, sourced results plus a note on what it excluded as out of range\u003c/em\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nMore demo screenshots: [mode picker](.github/assets/agent-forge-web-ui-chat-mode-selector-popover.png) · [provider selector](.github/assets/agent-forge-web-ui-chat-llm-provider-selector-popover.png) · [skills](.github/assets/agent-forge-web-ui-chat-skills-popover.png) · [connectors](.github/assets/agent-forge-web-ui-connectors-modal.png) · [bookmarks](.github/assets/agent-forge-web-ui-bookmarks-modal.png) · [memory](.github/assets/agent-forge-web-ui-memory-modal.png) · [profile overrides](.github/assets/agent-forge-web-ui-model-profile-overrides-modal.png) · [attachments](.github/assets/agent-forge-web-ui-attachments.png) · [private session](.github/assets/agent-forge-web-ui-private-session.png) · [help](.github/assets/agent-forge-web-ui-agent-forge-help-modal.png)\n\n## License\n\nMIT, see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbulletinmybeard%2Fagent-forge-webui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbulletinmybeard%2Fagent-forge-webui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbulletinmybeard%2Fagent-forge-webui/lists"}