{"owner":"anomalyco","repo":"opentui","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":2005,"categories":["root-instruction","mcp-config","marketplace","plugin-manifest"],"hasMcp":true,"mcpConfig":{"mcpServers":{"opentui":{"command":"npx","args":["-y","@modelcontextprotocol/server-opentui"]}}},"found":["AGENTS.md",".cursor/mcp.json",".claude-plugin/marketplace.json",".claude-plugin/plugin.json"],"skills":{"AGENTS.md":"# OpenTUI Agent Guide\n\n## Engineering\n\n- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers.\n- For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible,\n  record the evidence and remaining manual verification; do not substitute contract sketches or guesses.\n- Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound\n  input-driven work and test lifecycle failures.\n- Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.\n- `oxfmt` is the formatting source of truth (`semi: false`, `printWidth: 120`); avoid unrelated formatting churn.\n- In delegated tasks, name the local rendering behavior, owned files, and required checks. Describe ordinary\n  renderer work as correctness and compatibility testing; reserve security terminology for actual security work.\n  Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests.\n  Request an independent correctness review and a separate reproduction check of actionable findings.\n\n## Tooling And Runtimes\n\n- Use Bun for dependency management and development commands: `bun install`, `bun run <script>`, `bun test`, and `bun <file>`.\n- Run package scripts from the package directory unless the script is defined at the repository root.\n- Shared runtime code must preserve the supported Bun and Node paths. Keep runtime-specific behavior behind existing\n  platform/runtime/build seams; do not introduce Bun-only APIs into shared modules. Node checks use the minimum\n  version enforced by `scripts/node26.mjs`.\n\n## Verification\n\n- Run the narrowest relevant test first, then the affected package suite.\n- Ordinary TypeScript source changes do not require the root build. Use the affected package's `test`, `typecheck`,\n  `build`, or validation scripts as applicable.\n- Run `bun run build` from the repository root after native or cross-package build/output changes, or when tests report\n  a missing/stale native artifact. It does not build web or examples; use their package scripts.\n- For native changes, run `bun run test:native` from `packages/core`. Filter with `bun run test:native -Dtest-filter=\"test name\"` while iterating.\n- For runtime, FFI, build, or export changes, run the relevant Node and packed-distribution scripts from that package\n  (such as `test:js:node` or `test:dist`) when present.\n- Use root `bun run fmt:check` and `bun run lint` for final static checks when relevant.\n\nPrefer tests and `TestRenderer` for automated debugging. For interactive behavior, load the `terminal-control` skill and\nuse its terminal tool to run, drive, and inspect the app; repository examples bind backtick to\n`renderer.console.toggle()` for captured `console.log` output. Ask for a user-run reproduction only when the required\nterminal or platform is unavailable locally.\n\n## Portable FFI\n\n- Portable symbol signatures must stay within the `node:ffi`/`bun:ffi` intersection. Use explicit widths such as\n  `u32`/`u64`, not backend-only ABI names such as `usize`, `napi_env`, or `napi_value`; represent `i64`/`u64` as `bigint`,\n  native booleans as `0`/`1`, and shared pointers as `number | bigint`.\n- Default to `buffer` for transient, non-null `TypedArray` parameters and pass the view directly. Do not call `ptr()`.\n- For a raw `ArrayBuffer`, create one `Uint8Array` view over it, keep that view, and declare `buffer`. A `buffer` call\n  costs less than a `ptr` call. `buffer` rejects an argument that is not a view with a `TypeError`. `ptr` sends a bad\n  argument to native code as an address.\n- Use `ptr` only when a parameter can be null, accepts a numeric native address, or is a callback. Pass transient owner\n  objects directly to `ptr` parameters. Do not pre-resolve them.\n- Bun 1.3 does not accept `DataView` directly for `buffer` or `ptr` parameters. Pass an equivalent typed array such as\n  `new Uint8Array(view.buffer, view.byteOffset, view.byteLength)`.\n- On Bun 1.4+, use `buffer` when you pass a `DataView` directly to FFI.\n- Use `ptr(view)` only when native code stores the address beyond the call. Before resolving it, access `view.buffer` to\n  move any inline typed-array storage into a stable `ArrayBuffer`, then keep the view alive for the complete native\n  lifetime. The order is required: `const owner = view.buffer; const address = ptr(view)`. Calling `ptr(view)` first and\n  accessing `view.buffer` later can move the storage and invalidate `address`.\n- Model C-string inputs as pointer parameters and pass owned, NUL-terminated byte buffers directly; string returns are\n  not portable. Create callbacks through the loaded library/platform facade, not `new JSCallback(...)`, and assume only\n  same-thread callbacks.\n",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/plugin.json)"},"files":{"AGENTS.md":"# OpenTUI Agent Guide\n\n## Engineering\n\n- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers.\n- For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible,\n  record the evidence and remaining manual verification; do not substitute contract sketches or guesses.\n- Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound\n  input-driven work and test lifecycle failures.\n- Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.\n- `oxfmt` is the formatting source of truth (`semi: false`, `printWidth: 120`); avoid unrelated formatting churn.\n- In delegated tasks, name the local rendering behavior, owned files, and required checks. Describe ordinary\n  renderer work as correctness and compatibility testing; reserve security terminology for actual security work.\n  Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests.\n  Request an independent correctness review and a separate reproduction check of actionable findings.\n\n## Tooling And Runtimes\n\n- Use Bun for dependency management and development commands: `bun install`, `bun run <script>`, `bun test`, and `bun <file>`.\n- Run package scripts from the package directory unless the script is defined at the repository root.\n- Shared runtime code must preserve the supported Bun and Node paths. Keep runtime-specific behavior behind existing\n  platform/runtime/build seams; do not introduce Bun-only APIs into shared modules. Node checks use the minimum\n  version enforced by `scripts/node26.mjs`.\n\n## Verification\n\n- Run the narrowest relevant test first, then the affected package suite.\n- Ordinary TypeScript source changes do not require the root build. Use the affected package's `test`, `typecheck`,\n  `build`, or validation scripts as applicable.\n- Run `bun run build` from the repository root after native or cross-package build/output changes, or when tests report\n  a missing/stale native artifact. It does not build web or examples; use their package scripts.\n- For native changes, run `bun run test:native` from `packages/core`. Filter with `bun run test:native -Dtest-filter=\"test name\"` while iterating.\n- For runtime, FFI, build, or export changes, run the relevant Node and packed-distribution scripts from that package\n  (such as `test:js:node` or `test:dist`) when present.\n- Use root `bun run fmt:check` and `bun run lint` for final static checks when relevant.\n\nPrefer tests and `TestRenderer` for automated debugging. For interactive behavior, load the `terminal-control` skill and\nuse its terminal tool to run, drive, and inspect the app; repository examples bind backtick to\n`renderer.console.toggle()` for captured `console.log` output. Ask for a user-run reproduction only when the required\nterminal or platform is unavailable locally.\n\n## Portable FFI\n\n- Portable symbol signatures must stay within the `node:ffi`/`bun:ffi` intersection. Use explicit widths such as\n  `u32`/`u64`, not backend-only ABI names such as `usize`, `napi_env`, or `napi_value`; represent `i64`/`u64` as `bigint`,\n  native booleans as `0`/`1`, and shared pointers as `number | bigint`.\n- Default to `buffer` for transient, non-null `TypedArray` parameters and pass the view directly. Do not call `ptr()`.\n- For a raw `ArrayBuffer`, create one `Uint8Array` view over it, keep that view, and declare `buffer`. A `buffer` call\n  costs less than a `ptr` call. `buffer` rejects an argument that is not a view with a `TypeError`. `ptr` sends a bad\n  argument to native code as an address.\n- Use `ptr` only when a parameter can be null, accepts a numeric native address, or is a callback. Pass transient owner\n  objects directly to `ptr` parameters. Do not pre-resolve them.\n- Bun 1.3 does not accept `DataView` directly for `buffer` or `ptr` parameters. Pass an equivalent typed array such as\n  `new Uint8Array(view.buffer, view.byteOffset, view.byteLength)`.\n- On Bun 1.4+, use `buffer` when you pass a `DataView` directly to FFI.\n- Use `ptr(view)` only when native code stores the address beyond the call. Before resolving it, access `view.buffer` to\n  move any inline typed-array storage into a stable `ArrayBuffer`, then keep the view alive for the complete native\n  lifetime. The order is required: `const owner = view.buffer; const address = ptr(view)`. Calling `ptr(view)` first and\n  accessing `view.buffer` later can move the storage and invalidate `address`.\n- Model C-string inputs as pointer parameters and pass owned, NUL-terminated byte buffers directly; string returns are\n  not portable. Create callbacks through the loaded library/platform facade, not `new JSCallback(...)`, and assume only\n  same-thread callbacks.\n",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/plugin.json)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/anomalyco/opentui/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# OpenTUI Agent Guide\n\n## Engineering\n\n- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers.\n- For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible,\n  record the evidence and remaining manual verification; do not substitute contract sketches or guesses.\n- Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound\n  input-driven work and test lifecycle failures.\n- Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.\n- `oxfmt` is the formatting source of truth (`semi: false`, `printWidth: 120`); avoid unrelated formatting churn.\n- In delegated tasks, name the local rendering behavior, owned files, and required checks. Describe ordinary\n  renderer work as correctness and compatibility testing; reserve security terminology for actual security work.\n  Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests.\n  Request an independent correctness review and a separate reproduction check of actionable findings.\n\n## Tooling And Runtimes\n\n- Use Bun for dependency management and development commands: `bun install`, `bun run <script>`, `bun test`, and `bun <file>`.\n- Run package scripts from the package directory unless the script is defined at the repository root.\n- Shared runtime code must preserve the supported Bun and Node paths. Keep runtime-specific behavior behind existing\n  platform/runtime/build seams; do not introduce Bun-only APIs into shared modules. Node checks use the minimum\n  version enforced by `scripts/node26.mjs`.\n\n## Verification\n\n- Run the narrowest relevant test first, then the affected package suite.\n- Ordinary TypeScript source changes do not require the root build. Use the affected package's `test`, `typecheck`,\n  `build`, or validation scripts as applicable.\n- Run `bun run build` from the repository root after native or cross-package build/output changes, or when tests report\n  a missing/stale native artifact. It does not build web or examples; use their package scripts.\n- For native changes, run `bun run test:native` from `packages/core`. Filter with `bun run test:native -Dtest-filter=\"test name\"` while iterating.\n- For runtime, FFI, build, or export changes, run the relevant Node and packed-distribution scripts from that package\n  (such as `test:js:node` or `test:dist`) when present.\n- Use root `bun run fmt:check` and `bun run lint` for final static checks when relevant.\n\nPrefer tests and `TestRenderer` for automated debugging. For interactive behavior, load the `terminal-control` skill and\nuse its terminal tool to run, drive, and inspect the app; repository examples bind backtick to\n`renderer.console.toggle()` for captured `console.log` output. Ask for a user-run reproduction only when the required\nterminal or platform is unavailable locally.\n\n## Portable FFI\n\n- Portable symbol signatures must stay within the `node:ffi`/`bun:ffi` intersection. Use explicit widths such as\n  `u32`/`u64`, not backend-only ABI names such as `usize`, `napi_env`, or `napi_value`; represent `i64`/`u64` as `bigint`,\n  native booleans as `0`/`1`, and shared pointers as `number | bigint`.\n- Default to `buffer` for transient, non-null `TypedArray` parameters and pass the view directly. Do not call `ptr()`.\n- For a raw `ArrayBuffer`, create one `Uint8Array` view over it, keep that view, and declare `buffer`. A `buffer` call\n  costs less than a `ptr` call. `buffer` rejects an argument that is not a view with a `TypeError`. `ptr` sends a bad\n  argument to native code as an address.\n- Use `ptr` only when a parameter can be null, accepts a numeric native address, or is a callback. Pass transient owner\n  objects directly to `ptr` parameters. Do not pre-resolve them.\n- Bun 1.3 does not accept `DataView` directly for `buffer` or `ptr` parameters. Pass an equivalent typed array such as\n  `new Uint8Array(view.buffer, view.byteOffset, view.byteLength)`.\n- On Bun 1.4+, use `buffer` when you pass a `DataView` directly to FFI.\n- Use `ptr(view)` only when native code stores the address beyond the call. Before resolving it, access `view.buffer` to\n  move any inline typed-array storage into a stable `ArrayBuffer`, then keep the view alive for the complete native\n  lifetime. The order is required: `const owner = view.buffer; const address = ptr(view)`. Calling `ptr(view)` first and\n  accessing `view.buffer` later can move the storage and invalidate `address`.\n- Model C-string inputs as pointer parameters and pass owned, NUL-terminated byte buffers directly; string returns are\n  not portable. Create callbacks through the loaded library/platform facade, not `new JSCallback(...)`, and assume only\n  same-thread callbacks.\n","isInternal":false,"tokens":1105,"sizeBytes":4840},{"name":"marketplace.json","path":".claude-plugin/marketplace.json","rawUrl":"https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/marketplace.json)","tokens":300,"sizeBytes":196},{"name":"plugin.json","path":".claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/plugin.json","title":"claude-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/plugin.json)","tokens":300,"sizeBytes":182},{"name":"mcp.json","path":".cursor/mcp.json","rawUrl":"https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.cursor/mcp.json","title":"Model Context Protocol (MCP) Configuration","category":"mcp-config","format":"json","content":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.cursor/mcp.json)","tokens":300,"sizeBytes":175}],"systemPromptSnippet":"<yakaai_skills repo=\"anomalyco/opentui\">\n<!-- File: AGENTS.md (Tokens: ~1105 | Category: root-instruction) -->\n# OpenTUI Agent Guide\n\n## Engineering\n\n- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers.\n- For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible,\n  record the evidence and remaining manual verification; do not substitute contract sketches or guesses.\n- Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound\n  input-driven work and test lifecycle failures.\n- Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.\n- `oxfmt` is the formatting source of truth (`semi: false`, `printWidth: 120`); avoid unrelated formatting churn.\n- In delegated tasks, name the local rendering behavior, owned files, and required checks. Describe ordinary\n  renderer work as correctness and compatibility testing; reserve security terminology for actual security work.\n  Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests.\n  Request an independent correctness review and a separate reproduction check of actionable findings.\n\n## Tooling And Runtimes\n\n- Use Bun for dependency management and development commands: `bun install`, `bun run <script>`, `bun test`, and `bun <file>`.\n- Run package scripts from the package directory unless the script is defined at the repository root.\n- Shared runtime code must preserve the supported Bun and Node paths. Keep runtime-specific behavior behind existing\n  platform/runtime/build seams; do not introduce Bun-only APIs into shared modules. Node checks use the minimum\n  version enforced by `scripts/node26.mjs`.\n\n## Verification\n\n- Run the narrowest relevant test first, then the affected package suite.\n- Ordinary TypeScript source changes do not require the root build. Use the affected package's `test`, `typecheck`,\n  `build`, or validation scripts as applicable.\n- Run `bun run build` from the repository root after native or cross-package build/output changes, or when tests report\n  a missing/stale native artifact. It does not build web or examples; use their package scripts.\n- For native changes, run `bun run test:native` from `packages/core`. Filter with `bun run test:native -Dtest-filter=\"test name\"` while iterating.\n- For runtime, FFI, build, or export changes, run the relevant Node and packed-distribution scripts from that package\n  (such as `test:js:node` or `test:dist`) when present.\n- Use root `bun run fmt:check` and `bun run lint` for final static checks when relevant.\n\nPrefer tests and `TestRenderer` for automated debugging. For interactive behavior, load the `terminal-control` skill and\nuse its terminal tool to run, drive, and inspect the app; repository examples bind backtick to\n`renderer.console.toggle()` for captured `console.log` output. Ask for a user-run reproduction only when the required\nterminal or platform is unavailable locally.\n\n## Portable FFI\n\n- Portable symbol signatures must stay within the `node:ffi`/`bun:ffi` intersection. Use explicit widths such as\n  `u32`/`u64`, not backend-only ABI names such as `usize`, `napi_env`, or `napi_value`; represent `i64`/`u64` as `bigint`,\n  native booleans as `0`/`1`, and shared pointers as `number | bigint`.\n- Default to `buffer` for transient, non-null `TypedArray` parameters and pass the view directly. Do not call `ptr()`.\n- For a raw `ArrayBuffer`, create one `Uint8Array` view over it, keep that view, and declare `buffer`. A `buffer` call\n  costs less than a `ptr` call. `buffer` rejects an argument that is not a view with a `TypeError`. `ptr` sends a bad\n  argument to native code as an address.\n- Use `ptr` only when a parameter can be null, accepts a numeric native address, or is a callback. Pass transient owner\n  objects directly to `ptr` parameters. Do not pre-resolve them.\n- Bun 1.3 does not accept `DataView` directly for `buffer` or `ptr` parameters. Pass an equivalent typed array such as\n  `new Uint8Array(view.buffer, view.byteOffset, view.byteLength)`.\n- On Bun 1.4+, use `buffer` when you pass a `DataView` directly to FFI.\n- Use `ptr(view)` only when native code stores the address beyond the call. Before resolving it, access `view.buffer` to\n  move any inline typed-array storage into a stable `ArrayBuffer`, then keep the view alive for the complete native\n  lifetime. The order is required: `const owner = view.buffer; const address = ptr(view)`. Calling `ptr(view)` first and\n  accessing `view.buffer` later can move the storage and invalidate `address`.\n- Model C-string inputs as pointer parameters and pass owned, NUL-terminated byte buffers directly; string returns are\n  not portable. Create callbacks through the loaded library/platform facade, not `new JSCallback(...)`, and assume only\n  same-thread callbacks.\n\n<!-- File: .claude-plugin/marketplace.json (Tokens: ~300 | Category: marketplace) -->\n# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/marketplace.json)\n\n<!-- File: .claude-plugin/plugin.json (Tokens: ~300 | Category: plugin-manifest) -->\n# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.claude-plugin/plugin.json)\n\n<!-- File: .cursor/mcp.json (Tokens: ~300 | Category: mcp-config) -->\n# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/anomalyco/opentui/HEAD/.cursor/mcp.json)\n</yakaai_skills>"}