Skip to content
Back to skills

Ttai Agent Apps

ASecurity

Creates and maintains Agent Desktop apps for Tough Tongue AI voice agents: small packages (spec.json, React code, and one editable data file) that the agent displays and updates beside a live session, such as a board, checklist, or scorecard. Creates, writes, verifies, previews, enables, and deletes apps with ttai:create_app, ttai:write_app_files, ttai:get_app_files, ttai:get_app_url, ttai:update_app, and ttai:delete_app, then attaches one to a Scenario's agent_desktop tool with ttai:update_s...

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 3, 2026
ai-agentsreactgit

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned October 3, 2026

npx -y skills add tough-tongue/toughtongue-skills --skill ttai-agent-apps --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ttai Agent Apps?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ttai Agent Apps
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tough-tongue-ttai-agent-apps/badge)](https://www.skillsdirectory.com/skills/tough-tongue-ttai-agent-apps)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ttai-agent-apps
description: >-
  Creates and maintains Agent Desktop apps for Tough Tongue AI voice agents:
  small packages (spec.json, React code, and one editable data file) that the
  agent displays and updates beside a live session, such as a board,
  checklist, or scorecard. Creates, writes, verifies, previews, enables, and
  deletes apps with ttai:create_app, ttai:write_app_files,
  ttai:get_app_files, ttai:get_app_url, ttai:update_app, and
  ttai:delete_app, then attaches one to a Scenario's agent_desktop tool with
  ttai:update_scenario. Use when the user says "build an app my voice agent
  can edit", "make a board the agent updates during the call", "attach this
  app to my scenario", or "preview my app". Not for designing the Scenario's
  conversation (ttai-agent) or analyzing sessions (ttai-session-analyst).
when_to_use: >-
  Also when the user asks to change what an existing app shows or who can
  open it.
---

# Tough Tongue AI Agent Apps

Design → create → write files → verify → open → attach. An app is a file package
rendered next to a live voice session; the voice agent rewrites only its
**data** file.

## Contents

- Prerequisites
- Tool map
- Workflow
- Rules
- Checklist
- Key Files

## Prerequisites

- Resolve scope first: omit `org_id` for the personal workspace. For an
  organization, call `ttai:list_organizations` and pass the chosen `id` as
  `org_id`; an app created there belongs to it and is visible to its members.
- Load each tool's input schema before calling; the live `tools/list` wins.
- Read [references/app-structure.md](references/app-structure.md) before writing
  any file.

## Tool map

| Intent             | Tool                                                                   |
| ------------------ | ---------------------------------------------------------------------- |
| Discover           | `ttai:list_apps`, `ttai:get_app` (`app_id`)                            |
| Create             | `ttai:create_app`                                                      |
| Edit catalog entry | `ttai:update_app` (`title`, `description`, `visibility`, `is_enabled`) |
| Read / write files | `ttai:get_app_files`, `ttai:write_app_files`                           |
| Editor / preview   | `ttai:get_app_url`                                                     |
| Remove             | `ttai:delete_app` — destructive, confirm first                         |

## Workflow

### 1. Design

One round of questions; skip what is stated: what the app shows, which values
the voice agent changes mid-call, who may open it (me / my organization /
public), and which Scenario uses it. Split before writing:

- **Code** — `src/**`, fixed; the agent never edits it.
- **Data** — one small, flat JSON file the agent rewrites whole.

### 2. Create

`ttai:create_app` with `app_name`, `title`, optional `description`, and optional
`visibility` (`private` default, `org`, `public`).

- `app_name`: lowercase letters, digits, and hyphens; 2–64 characters; starts
  with a letter or digit. Sessions look apps up by name, so pick one no other
  app in `ttai:list_apps` uses, and never a built-in name (`canvas`, `maxx`,
  `brainstorm`).
- Inside an organization the app always starts as `org`, and every member sees
  it whatever `visibility` says. To open it to everyone, set `public` afterwards
  with `ttai:update_app`.
- Keep the returned `id`; every later call takes it as `app_id`.

### 3. Write files

`ttai:write_app_files` with `app_id` and a map of **package-relative** paths
(`spec.json`, `src/App.tsx`, `data/board.json`) to contents.

- `spec.json` **must** list every other file in `files`. Unlisted files never
  load, and a listed file that is missing stops the whole app from loading.
  Adding a file means adding it to `files` in the same write.
- Writes upsert per path and delete nothing. Later edits send only the changed
  files.

### 4. Verify

`ttai:get_app_files` and check: `spec.json` parses; every `files` entry was
returned; every `filesystem.editableGlobs` pattern matches an existing file;
`src/App.tsx` is listed and default-exports a component.

### 5. Open

`ttai:get_app_url` → give the user the **editor** link (sign-in required;
iterate on code) and the **preview** link (render check). Preview links expire
after 20 minutes; request a fresh one instead of reusing it. The preview link
carries an access token, so share it only with the user.

### 6. Attach to a Scenario

Fetch the Scenario first. `ttai:update_scenario` merges `tools_config.tools` per
tool, so other tools stay as they are, but it replaces `tool_settings` whole:
copy the existing `agent_desktop.tool_settings` keys (such as `mode`) into your
write. Send `id` and:

```json
{
  "tools_config": {
    "tools": {
      "agent_desktop": {
        "should_register": true,
        "tool_settings": { "apps": { "idea-board": true } }
      }
    }
  }
}
```

`apps` maps `app_name` to `true`; the first key is the app that opens at start.
Then add usage rules to `ai_instructions`: which file the agent may rewrite and
when to show the app. The app must be enabled and visible to the session's
participant; otherwise the session silently falls back to the default canvas.

### 7. Iterate or retire

- Content change → `ttai:write_app_files` on the data file only.
- Hide → `ttai:update_app` with `is_enabled: false`; Scenarios that list it fall
  back to the canvas.
- `ttai:delete_app` → confirm, and warn which Scenarios still list the app.

## Rules

- Confirm scope and visibility before creating or widening access.
- No secrets, tokens, or personal data in app files.
- The agent's edits during a session stay in that session. Every new session
  starts from the stored files, including code changes.
- Do not invent `spec.json` keys; unknown keys are ignored.

## Checklist

- [ ] `spec.json` `files` lists every file, including `src/App.tsx`
- [ ] Data file is the only `editableGlobs` target
- [ ] `spec.json` `instructions` name the exact file to rewrite
- [ ] Re-read verified; user has editor + preview links
- [ ] `agent_desktop.tool_settings` merged, not replaced; `ai_instructions`
      updated
- [ ] Destructive or visibility-widening actions confirmed

## Key Files

- [references/app-structure.md](references/app-structure.md) — package layout,
  `spec.json`, worked example, limits

Files in this skill

  • SKILL.md6.2 KB
  • agents/openai.yaml464 B
  • references/app-structure.md5.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…