# Zerostate Io Omo Agent Config Omo Agent Metadata And Model Picker

> OmO agent metadata + scalable model picker

- Skill: `tomevault-io/zerostate-io-omo-agent-config-omo-agent-metadata-and-model-p` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/zerostate-io-omo-agent-config-omo-agent-metadata-and-model-p`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/zerostate-io-omo-agent-config-omo-agent-metadata-and-model-p/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/zerostate-io-omo-agent-config-omo-agent-metadata-and-model-p

---


# OmO agent metadata + scalable model picker

## Problem

- Agent lists are hard to understand with only a name and a minimal description.
- Model selection dialogs don’t scale when they dump a long-tail “other” bucket of 100–200+ models.

## Context / Trigger Conditions

- You have an agent→model assignment UI.
- Users complain that the picker is a flat list / “other” bucket.
- You already have (or can fetch) upstream agent definitions (system prompt metadata) and want to enrich local UI.

## Solution

### 1) Merge two sources of truth

- **Local static profile** (fast, curated UX fields): `AGENT_PROFILES` in `lib/constants.js`.
  - Add fields like: `access` (`read-only|limited|write`), `usage[]`, `caveats[]`, plus existing `preferred[]`, `minContext`.
- **Upstream parsed agent metadata** (authoritative intent): `lib/core/agents.js`.
  - Fetches TypeScript from `code-yeongyu/oh-my-opencode` and parses `description`, role/behaviors/constraints.
  - Infer an `access` mode from common constraint language (read-only/plan-only), but prefer the local curated `AGENT_PROFILES.access` when present.

Expose merged metadata via the API:

- In `lib/server.js` `GET /api/agents` and `GET /api/agents/:name`, attach:
  - `summary` (curated description)
  - `access`, `usage[]`, `caveats[]`, `preferred[]`
  - `recommendedModels[]` (top N) plus `recommendedModel` (single best)

### 2) Replace “other models” with a picker that scales

In the WebUI model selector modal:

- Add an inline **search box** and lightweight **filters**:
  - provider select
  - min context select
  - capability chips (reasoning/image/pdf/thinking/fast)

Render results in sections:

1. **Recommended for this agent** (top N IDs from API; map to model objects in the client)
2. **In use in this config** (models currently assigned to any agent)
3. **All models (N)** grouped by **provider** (optionally capped to avoid huge renders)

This removes the UX anti-pattern of a giant “other” bucket while still offering full access.

## Verification

- `GET /api/agents` returns merged fields (`summary`, `access`, `usage`, `caveats`, `preferred`, `recommendedModels`).
- WebUI agent cards show richer summaries and caveats.
- WebUI “Change model” modal supports search + filters and groups results (no flat “other” dump).
- Basic runtime check: `node -e "require('./lib/constants'); require('./lib/core/agents'); require('./lib/server');"`.

## Example

- User clicks **Change Model** on an agent card.
- Modal shows agent summary + requirement hints.
- User types `claude` and selects provider `anthropic`.
- Results narrow instantly; recommended models are pinned at the top.

## Notes

- Keep the UI dependency-free (plain DOM + event listeners + re-render) to match this repo’s zero-npm approach.
- Cap “All models” rendering (e.g., first 120) and prompt users to refine filters for large catalogs.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/zerostate-io) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

