UI Widget Developer
microsoft/work-iq
Build MCP servers for Copilot Chat using the OpenAI Apps SDK or MCP Apps SDK widget rendering support (any language).
Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI.
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Haohao-end/openagent chatgpt-apps --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .claude/skills/chatgpt-apps && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .claude/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-appsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Haohao-end/openagent chatgpt-apps --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .agents/skills/chatgpt-apps && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .agents/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Haohao-end/openagent chatgpt-apps --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .cursor/skills/chatgpt-apps && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .cursor/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Haohao-end/openagent.git --path api/internal/core/skills/catalog/chatgpt-apps--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Haohao-end/openagent chatgpt-apps --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .gemini/skills/chatgpt-apps && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .gemini/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Haohao-end/openagent chatgpt-appsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .github/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .github/skills/chatgpt-apps && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .github/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Haohao-end/openagent --skill chatgpt-apps -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Haohao-end/openagent chatgpt-apps --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Haohao-end/openagent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/api/internal/core/skills/catalog/chatgpt-apps .opencode/skills/chatgpt-apps && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "chatgpt-apps" agent skill from https://github.com/Haohao-end/openagent/tree/main/api/internal/core/skills/catalog/chatgpt-apps into .opencode/skills/chatgpt-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chatgpt-apps", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
chatgpt-appsBuild, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI.
Chatgpt Apps is an agent skill from Haohao-end/openagent. Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts (for example `agents/openai.yaml`, `manifest.yaml` and `skill.md`).
It sits in Agent Workflows, covering MCP servers and Project scaffolding. It works with OpenAI and Model Context Protocol. The repository describes itself as: What if OpenAI Deep Research and Dify were one platform? OpenAgent — harness architecture for rapidly building vertical AI agents, with deep reasoning loops, visual workflows… The licence is Apache-2.0.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4013ab2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
ngrokFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Chatgpt Apps loads about 4.9k tokens when it runs. Until then it costs about 116 tokens; SKILL.md has 2,459 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Haohao-end/openagent at commit 4013ab2, republished under its Apache-2.0 licence (© Haohao-end). 2,459 words, ~4,904 tokens.
.claude/skills/chatgpt-apps/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Scaffold ChatGPT Apps SDK implementations with a docs-first, example-first workflow, then generate code that follows current Apps SDK and MCP Apps bridge patterns.
Use this skill to produce:
window.openai compatibility/extensions second)@modelcontextprotocol/ext-apps starter scaffold for low-dependency fallbacksUse $openai-docs first whenever building or changing a ChatGPT Apps SDK app.
$openai-docs (preferred) or call the OpenAI docs MCP server directly.apps-sdk/build/mcp-serverapps-sdk/build/chatgpt-uiapps-sdk/build/examplesapps-sdk/plan/toolsapps-sdk/referenceapps-sdk/quickstart when scaffolding a new app or generating a first-pass implementation, and check the official examples repo/page before inventing a scaffold from scratch.apps-sdk/deployapps-sdk/deploy/submissionapps-sdk/app-submission-guidelinesIf $openai-docs is unavailable, use:
mcp__openaiDeveloperDocs__search_openai_docsmcp__openaiDeveloperDocs__fetch_openai_docRead references/apps-sdk-docs-workflow.md for suggested doc queries and a compact checklist.
Read references/app-archetypes.md to classify the request into a small number of supported app shapes before choosing examples or scaffolds.
Read references/repo-contract-and-validation.md when generating or reviewing a repo so the output stays inside a stable “working app” contract.
Read references/search-fetch-standard.md when the app is connector-like, data-only, sync-oriented, or meant to work well with company knowledge or deep research.
Read references/upstream-example-workflow.md when starting a greenfield app or when deciding whether to adapt an upstream example or use the local fallback scaffold.
Read references/window-openai-patterns.md when the task needs ChatGPT-specific widget behavior or when translating repo examples that use wrapper-specific app.* helpers.
Use prompts that explicitly pair this skill with $openai-docs so the resulting scaffold is grounded in current docs.
Preferred prompt patterns:
Use $chatgpt-apps with $openai-docs to scaffold a ChatGPT app for <use case> with a <TS/Python> MCP server and <React/vanilla> widget.Use $chatgpt-apps with $openai-docs to adapt the closest official Apps SDK example into a ChatGPT app for <use case>.Use $chatgpt-apps and $openai-docs to refactor this Apps SDK demo into a production-ready structure with tool annotations, CSP, and URI versioning.Use $chatgpt-apps with $openai-docs to plan tools first, then generate the MCP server and widget code.When responding, ask for or infer these inputs before coding:
Before choosing examples, repo shape, or scaffolds, classify the request into one primary archetype and state it.
tool-onlyvanilla-widgetreact-widgetinteractive-decoupledsubmission-readyInfer the archetype unless a missing detail is truly blocking. Use the archetype to choose:
server/ + web/ layoutsearch and fetch should be the default read-only tool surfaceRead references/app-archetypes.md for the decision rubric.
For greenfield apps, prefer these starting points in order:
@modelcontextprotocol/ext-apps examples when the user needs a lower-level or more portable MCP Apps baseline.scripts/scaffold_node_ext_apps.mjs only when no close example fits, the user wants a tiny Node + vanilla starter, or network access/example retrieval is undesirable.Do not generate a large custom scaffold from scratch if a close upstream example already exists. Copy the smallest matching example, remove unrelated demo code, then patch it to the current docs and the user request.
Pick one primary archetype before planning tools or choosing a starting point.
submission-ready only when the user asks for public launch, directory submission, or review-ready deployment.Define the tool surface area from user intents.
readOnlyHint, destructiveHint, openWorldHint; add idempotentHint when true).search and fetch tools instead of inventing custom read-only equivalents.Read references/search-fetch-standard.md when search and fetch may be relevant.
Choose the simplest structure that fits the goal.
Prefer the decoupled pattern for non-trivial apps:
structuredContent._meta.ui.resourceUri and optional _meta["openai/outputTemplate"].search first").Default to upstream examples for greenfield work when they are close to the requested app.
@modelcontextprotocol/ext-apps examples when the request is closer to raw MCP Apps bridge/server wiring, or when version-matched package patterns matter more than ChatGPT-specific polish._meta.ui.*, CSP, URI versioning, and local run instructions.Read references/upstream-example-workflow.md for the selection and adaptation rubric.
Use scripts/scaffold_node_ext_apps.mjs only when the user wants a quick, greenfield Node starter and a vanilla HTML widget is acceptable, and no upstream example is a better starting point.
@modelcontextprotocol/ext-apps server plus a vanilla HTML widget that uses the MCP Apps bridge by default.ui/message bridge and only uses window.openai for optional host signals/extensions.Generate a server that:
text/html;profile=mcp-app) or the SDK constant (RESOURCE_MIME_TYPE) when using @modelcontextprotocol/ext-apps/serverstructuredContent (model + widget), content (model narration), and _meta (widget-only data) intentionallyopenai/toolInvocation/*) when helpful in ChatGPTKeep structuredContent concise. Move large or sensitive widget-only payloads to _meta.
Use the MCP Apps bridge first for portability, then add ChatGPT-specific window.openai APIs when they materially improve UX.
ui/notifications/tool-result (JSON-RPC over postMessage)structuredContenttools/call for component-initiated tool callsui/update-model-context only when UI state should change what the model seesUse window.openai for compatibility and extensions (file upload, modal, display mode, etc.), not as the only integration path for new apps.
app object (for example, @modelcontextprotocol/ext-apps/react) and expose helper names like app.sendMessage(), app.callServerTool(), app.openLink(), or host getter methods.window.openai.callTool(...), window.openai.sendFollowUpMessage(...), window.openai.openExternal(...), window.openai.requestDisplayMode(...), and direct globals like window.openai.theme, window.openai.locale, window.openai.displayMode, window.openai.toolInput, window.openai.toolOutput, window.openai.toolResponseMetadata, and window.openai.widgetState.window.openai or MCP Apps bridge primitives and call out that the wrapper is not the normative API surface.references/window-openai-patterns.md for the wrapper-to-canonical mapping and for React helper extraction patterns.Set resource metadata deliberately on the widget resource/template:
_meta.ui.csp with exact connectDomains and resourceDomains_meta.ui.domain for app submission-ready deployments_meta.ui.prefersBorder (or OpenAI compatibility alias when needed)openai/widgetDescription to reduce redundant narrationAvoid frameDomains unless iframe embeds are core to the product.
Every generated repo should satisfy a small, stable contract before you consider it done.
/mcp endpoint.search and fetch tool shapes when relevant.Read references/repo-contract-and-validation.md for the detailed checklist and validation ladder.
Validate against the minimum working repo contract, not just “did files get created.”
/mcp health check when feasibleRead references/repo-contract-and-validation.md for the validation ladder.
For local development, include explicit ChatGPT setup steps (not just code/run commands).
http://localhost:<port>/mcpngrok http <port>)/mcp path when connecting from ChatGPTNote: Some docs/screenshots still use older "connector" terminology. Prefer current product wording ("app") while acknowledging both labels when giving step-by-step instructions.
When the user asks to deploy or prepare for launch, generate hosting guidance for the MCP server (and widget assets if hosted separately).
/mcpOnly include these steps when the user intends a public directory listing.
apps-sdk/deploy/submission for the submission flow and apps-sdk/app-submission-guidelines for review requirementsRead references/interactive-state-sync-patterns.md when the app has long-lived widget state, repeated interactions, or component-initiated tool calls (for example, games, boards, maps, dashboards, editors).
Use it to choose patterns for:
stateVersion, resetCount, etc.)structuredContent vs _meta partitioningwindow.openai compatibilityWhen using this skill to scaffold code, produce output in this order unless the user asks otherwise:
$openai-docsreferences/app-archetypes.md for classifying requests into a small number of supported app shapesreferences/apps-sdk-docs-workflow.md for doc queries, page targets, and code-generation checklistreferences/interactive-state-sync-patterns.md for reusable patterns for stateful or highly interactive widget appsreferences/repo-contract-and-validation.md for the minimum working repo contract and lightweight validation ladderreferences/search-fetch-standard.md for when and how to default to the standard search and fetch toolsreferences/upstream-example-workflow.md for choosing between official examples, ext-apps examples, and the local fallback scaffoldreferences/window-openai-patterns.md for ChatGPT-specific extensions, wrapper API translation, and React helper patternsscripts/scaffold_node_ext_apps.mjs for a minimal Node + @modelcontextprotocol/ext-apps fallback starter scaffold© Haohao-end, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts) in api/internal/core/skills/catalog/chatgpt-apps of Haohao-end/openagent.
Open the folder on GitHubat commit 4013ab2
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in Haohao-end/openagent, which our catalogue first saw on October 7, 2026.
Chatgpt Apps next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Chatgpt Apps this skillHaohao-end/openagent | 791 | 1 repos | ~4.9k | Automated safety check: Pass | Apache-2.0 | |
| UI Widget Developermicrosoft/work-iq | 1k | — | ~6.1k | Automated safety check: Notes | Custom licence | |
| Toolifycoreyhaines31/makerskills | 851 | — | ~2.9k | Automated safety check: Notes | MIT | |
| External AgentsBuilderIO/agent-native | 7.1k | — | ~7.2k | Automated safety check: Notes | None | |
| Openspec AwareChorus-AIDLC/Chorus | 1.2k | — | ~7.2k | Automated safety check: Notes | AGPL-3.0 | |
| Chatgpt App Builderalpic-ai/skybridge | 2.2k | — | ~1k | Automated safety check: Pass | MIT |
microsoft/work-iq
Build MCP servers for Copilot Chat using the OpenAI Apps SDK or MCP Apps SDK widget rendering support (any language).
coreyhaines31/makerskills
When you want to integrate an external tool, API, MCP server, or service into a project — the wizard walks you through auth, config, env vars, client wrapper code, example usage, and an optional…
BuilderIO/agent-native
Connect external agents and MCP hosts (Claude, Claude Desktop, Claude Code, ChatGPT custom MCP apps, Codex, Cursor, Claude Cowork, VS Code GitHub Copilot, Goose, Postman, MCPJam) to an agent-native…
Chorus-AIDLC/Chorus
OpenSpec-mode authoring for Chorus PM workflows in Hermes. An agent skill from Chorus-AIDLC/Chorus.
alpic-ai/skybridge
Guide developers through creating and updating ChatGPT plugins.
timothywarner-org/claude-code
Scaffold production-ready Python MCP servers using FastMCP. An agent skill from timothywarner-org/claude-code.
Haohao-end/openagent
Migrate supported instruction files, skills, agents, and MCP config into Codex project and global files.
Haohao-end/openagent
A skill your agent uses when the user asks how to build with OpenAI products or APIs and needs up-to-date official documentation with citations, help choosing the latest model for a use case, or…
Haohao-end/openagent
Persistent browser and Electron interaction through jsrepl for fast iterative UI debugging.
Haohao-end/openagent
A skill your agent uses when the user wants a less default, more original solution for code, design, writing, naming, architecture, debugging, or strategy, especially when progress is stuck.
Haohao-end/openagent
A skill your agent uses when the user wants a distinctive, production-ready frontend interface with clear visual direction, strong hierarchy, and polished interaction details.
Works with
Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Chatgpt Apps is an agent skill from Haohao-end/openagent. Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI.
Chatgpt Apps fits situations like: Codex needs to design tools; register UI resources; wire the MCP Apps bridge; chatGPT compatibility APIs.
Run `npx skills add Haohao-end/openagent --skill chatgpt-apps -a claude-code`. Or copy the skill folder (api/internal/core/skills/catalog/chatgpt-apps in Haohao-end/openagent) into .claude/skills/chatgpt-apps in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Haohao-end/openagent --skill chatgpt-apps -a codex`. Or copy the skill folder (api/internal/core/skills/catalog/chatgpt-apps in Haohao-end/openagent) into .agents/skills/chatgpt-apps in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Haohao-end/openagent --skill chatgpt-apps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/chatgpt-apps, .gemini/skills/chatgpt-apps, .github/skills/chatgpt-apps and .opencode/skills/chatgpt-apps in your project.
Going by SKILL.md and its folder, Chatgpt Apps needs JavaScript for the scripts in its folder and the command-line tools its instructions call (ngrok). Our summary lists: Node.js.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Chatgpt Apps is published under the Apache-2.0 licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Chatgpt Apps: UI Widget Developer (microsoft/work-iq, 1k stars), Toolify (coreyhaines31/makerskills, 851 stars), External Agents (BuilderIO/agent-native, 7.1k stars) and Openspec Aware (Chorus-AIDLC/Chorus, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Haohao-end (a GitHub user) maintains it in Haohao-end/openagent, which has 791 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on July 17, 2026.
Source: Haohao-end/openagent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.