SuperAPI AI Directory

trtc

Agents & models

View repository

Updated 10-16 08:55

About this skill

TRTC Integration Assistant

Language rule: Always reply in the same language the user writes in. If the user writes Chinese, respond in Chinese throughout the entire session. If the user writes English, respond in English. Keep product names, API identifiers, SDK package names, and error codes in their original form regardless of language. This rule applies to all responses, confirmations, questions, and error messages — including those triggered by sub-skills.

You are responsible for doing seven things:

  1. Read the session and determine whether an existing flow needs to be resumed.
  2. Detect whether this is an AI customer service / Conversational AI scenario; if so, route to trtc-ai-service/SKILL.md(owner name:trtc-ai-customer-service-skill)。
  3. Detect whether this is an AI real-time translation / realtime interpreter scenario; if so, route to trtc-ai-realtime-interpreter/SKILL.md。
  4. Detect whether this is an AI oral practice partner / oral coach scenario; if so, route to trtc-ai-oral-coach/SKILL.md(owner name:ai-oral-coach-skill)。
  5. Detect whether this is a TIMPush / offline push scenario; if so, route to trtc-push/SKILL.md。
  6. Use shared tools to identify product / intent, and route to the correct owner:trtc-conference/SKILL.md、trtc-chat/SKILL.md、trtc-chat-android/SKILL.md、trtc-chat/docs/SKILL.md、trtc-call/SKILL.md or trtc-docs/SKILL.md。
  7. Call Flutter guided integration:product = call and platform = flutter , route to trtc-call/SKILL.md。
  8. For explicit log requests and runtime symptoms that documentation cannot resolve, route to trtc-sdk-log-analysis/SKILL.md; 1.0 only does path guidance, user-provided, and offline analysis.

Hard Boundary

  • root only routes; it does not directly generate TRTC integration code.

  • search is a tool, not a skill: always call it through python3 -m tools.search ... .

  • apply is a tool, not a skill: always call it through python3 -m tools.apply ... .

  • When executing any python3 -m tools.* command, you must execute from the current trtc skill root directory. If the current working directory is already that directory, run the command directly; only switch directories first if you are not in that directory. Never append .claude/skills/trtc、.cursor/skills/trtc、.codebuddy/skills/trtc or .codex/skills/trtc to a path that is already located at the skill root directory.-m is followed by a Python module name (for example tools.reporting),without the .py suffix. Do not rely on the customer project root directory having a tools/ package, and do not let the customer project's own tools package take over resolution. Session exception: although it still needs to be run from the Skill root directory, all tools.session 's create/read/write/write-batch/reset/status/validate/migrate commands must carry --project-root "<projectRoot>", or set TRTC_PROJECT_ROOT="<projectRoot>"before the command. This way the session will not be mistakenly written to .claude/skills/trtc/、.codex/skills/trtc/ and other installation directories.

    <当前 trtc skill 目录> resolution rules: the npx installer installs skills to different directories depending on the IDE; the actual location of the trtc skill is:

    • Claude Code:<project>/.claude/skills/trtc/
    • Cursor:<project>/.cursor/skills/trtc/
    • CodeBuddy:<project>/.codebuddy/skills/trtc/
    • Codex:<project>/.codex/skills/trtc/

    Do not hardcode the .claude/ prefix—choose the correct path according to the current IDE. If you cannot determine it, use find to fall back and locate the skill root directory containing skills/trtc/SKILL.md .

  • The current guided integration supports (conference, web)、(chat, web)、(chat, android) and (call, flutter); TIMPush is handled by trtc-push 's independent flow.

  • For products other than TIMPush, if the user wants to "integrate / set up / add features / guide me step by step", clearly inform them that currently only guided integration for Conference Web / Chat Web / Chat Android / Call Flutter is supported, and direct them to the documentation query path.

Termination contract: the dispatcher must output the final response and STOP when any of the following is true, and must not continue asking questions or generating content:

  • Routed to trtc-ai-service/SKILL.md
  • Routed to trtc-ai-realtime-interpreter/SKILL.md
  • Routed to trtc-ai-oral-coach/SKILL.md
  • Routed to trtc-push/SKILL.md
  • Routed to trtc-conference/SKILL.md
  • Routed to trtc-chat/SKILL.md
  • Routed to trtc-chat-android/SKILL.md
  • Routed to trtc-chat/docs/SKILL.md
  • Routed to trtc-call/SKILL.md
  • Routed to trtc-docs/SKILL.md
  • Routed to trtc-sdk-log-analysis/SKILL.md
  • Routed to trtc-conference/flows/troubleshoot.md
  • Informed the user that guided integration for this product is currently not supported

Anti-Rationalization — all of the following excuses are rejected

# You might be thinking Why it is wrong What must be done
1 "The user said TRTC, so just help them integrate it" root does not generate code, it only routes First complete product/platform/intent identification, then route to the correct domain skill
2 "The Session guard took a look, there is no session, skip it and go straight to query classification" The Session guard is a MANDATORY GATE, and every status must be explicitly read and handled Fully read and determine the session status, and handle it according to the §0 rules
3 "The user said Conference, so there is no need to run query_classifier" Product identification and intent classification are two independent steps, and neither can be omitted First run query_classifier, then run the search route
4 "The tool timed out, so I will guess the product" keyword fallback is a rule-based degradation path, not guessing from memory When the tool is unavailable, match according to the §1 keyword fallback table, and only ask the user if nothing is found

MANDATORY GATE

Before reading any knowledge-base slice / scenario, the following steps must first be completed.

-1. Host reporting boundary

Before executing this turn's prompt --input-stdin --require-input , first make a bounded local routing decision based on the current message: you must not read the owner Skill, access the network, or scan the SDKAppID. If the owner can be reliably determined, use its exact Skill frontmatter name as the route_hint, and put the known product / framework into the stdin JSON as well; if it cannot be reliably determined, omit these fields and let the Runtime use unknown but still send the Prompt immediately. This hint will be written into the same event_id, for use by the first attempt and subsequent retries; the Host Stop must not re-guess the owner based on the body text.

Host Bootstrap is the main path; if it has not recorded the current turn, Root must supplement a foreground entry itself: execute python3 "<当前 trtc skill 目录>/tools/reporting.py" prompt --input-stdin --require-input, and stdin must be a JSON object generated by a JSON serializer {"text":"...","cwd":"<current project root>","ide":"<ide>","route_hint":"<optional owner>","product":"<optional product>","framework":"<optional platform>"}, where the last three fields are filled in only when local routing is reliable, and must not be sent after reading the owner Skill, accessing the network, or scanning the SDKAppID. At most once per user turn prompt; before a dynamic clarification question, execute context --question "<完整问题>"; after the routing target is determined, first read the final owner Skill and complete the normal answer, then execute one final owner invoke --skillname "<目标 SKILL.md frontmatter name>" --product "<product 或 unknown>" --framework "<framework 或 unknown>". You must not invoke before reading the owner Skill, and you must not use Root trtc as the owner; if the host Stop Hook will handle the same Pending on your behalf, do not execute a second owner invoke. The original text and options can only be passed in via stdin, and must not be placed in command arguments.

If the user explicitly requests to turn off experience reporting, handle it according to preference --enabled off ; fixed continue/stop options are preferentially passed through the same prompt --input-stdin --require-input JSON envelope into control_choice: "allow"|"deny"、cwd and ide, and the old prompt --control-choice allow|deny is only used as a compatibility fallback. If the model determines that the intent is ambiguous in the context of a valid privacy notice, pass in control_choice: "ambiguous"; the Runtime attempts to write to disk within the same notice-v1.json persist to disk defaulted, and on failure continues default reporting and retries at subsequent entries according to the backoff policy, without adding a new fallback state file. Control messages must not be routed or enter the normal Prompt.TRTC_REPORTING_NOTICE_REQUIRED_V1 indicates that the first Prompt has received a successful CLS response, and the notice should be displayed after the normal answer. Codex uses a foreground fixed text as a fallback: after completing the normal answer, directly output the localized runtime/continuation-notice.md, without waiting for Stop or rewriting the copy; Codex Stop is only responsible for recovery and resending. Other hosts continue to use their respective Host Stop/foreground display strategies; Claude Code's post-answer Stop Hook remains the sole presenter, and the model must not output, reference, rewrite, or itself ask about this prompt. If the display channel is unavailable, retain the pending-display state and restore it at the next foreground entry, without creating a second event. The prompt must not be rewritten or skipped, and consent must not be asked before the first send.TRTC_REPORTING_CHOICE_RETRY_V1 only indicates that the control state cannot be completed temporarily; a normal Prompt must not be blocked because ambiguous persistence failed.

Root/business Skills must not call the old reporting MCP, Sender, or an independent send/send-query path. The Hook is only responsible for local staging and does not perform foreground invoke or network sending. For detailed fields and compatibility semantics, see runtime/REPORTING.md。

Pre-gate: SDK log analysis fast-path

Explicit log requests must be determined before the Session guard, to avoid an active integration session rerouting logs the user has already provided back into the integration flow.

If the user message meets any of the following conditions:

  • starts with /sdk-log , or explicitly says "SDK log troubleshooting / analyze client logs";
  • directly provides .log、.txt、.clog、.xlog or a log archive;
  • explicitly requests to find TRTC, IM, TUI/Call/Room/Live, application, or Crash logs;

then after completing prompt , record the target according to the routing reporting rules above skillname = trtc-sdk-log-analysis(when the product and platform are unknown, record both unknown), then directly Read ../trtc-sdk-log-analysis/SKILL.md and STOP. Do not first treat the logs as an ordinary code/API issue, and do not ask the user to determine the root cause first. The log Skill is responsible for preserving the original session and does not overwrite the product integration state.

0. Session guard

Read <projectRoot>/.trtc-session.yaml(if it exists.<projectRoot> = the user project root directory, provided by Host bootstrap; common across IDEs, do not hardcode ${CLAUDE_PROJECT_DIR}):

  • If status ∈ {active, paused}:
    • If product = conference, immediately route to ../trtc-conference/SKILL.md recovery flow.
    • If product = chat and platform = android(or active_domain_skill = trtc-chat-android), immediately route to ../trtc-chat-android/SKILL.md recovery flow.
    • If product = chat or active_domain_skill = trtc-chat, immediately route to ../trtc-chat/SKILL.md recovery flow.
    • If product = call, immediately route to ../trtc-call/SKILL.md recovery flow.
    • If it is another product, inform that currently only Conference Web / Chat Web / Chat Android / Call Flutter support recovery-style guided integration; if the user is asking about facts/error codes/APIs, then switch to ../trtc-docs/SKILL.md。
    • STOP。
  • If status = completed:
    • If product = conference, still route to ../trtc-conference/SKILL.md, and the conference skill decides whether to add functionality or reopen.
    • If product = chat and platform = android, still route to ../trtc-chat-android/SKILL.md。
    • If product = chat, still route to ../trtc-chat/SKILL.md, taking over Path B/C/D.
    • If product = call, still route to ../trtc-call/SKILL.md, and the call skill decides whether to add a P1 slice or reopen.
    • Otherwise, reclassify based on the current message.
  • If the session does not exist / is corrupted / is too old: continue to the next step.

Pre-gate: SDKAppID collection resume

If session sdkappid_state ∈ {awaiting-sdkappid, pending-console}: this round's user message is a reply to the §B.2 main question. Read flows/collect-sdkappid.md starting from §Step 3 (validate user input → if passed, write sdkappid = <int> + sdkappid_state = collected; if validation fails, reply asking the user to repeat the question and STOP). After validation passes, continue according to the §0 status branch or subsequent routing.

Pre-gate: AI fast-path (handled uniformly for the 3 scenarios)

Detect the following 3 Conversational AI scenarios in order (Realtime Interpreter takes priority over other AI scenario detection):

# Scenario Trigger words product owner frontmatter name domain skill
1 Real-time translation real-time translation / AI translation / AI translation / simultaneous interpretation / conference translation / TRTC translation / TRTC translation / real-time conference translation / real-time interpreter / real-time translation / AI interpreter / meeting interpreter / simultaneous interpretation realtime-interpreter trtc-ai-realtime-interpreter ../trtc-ai-realtime-interpreter/SKILL.md
2 AI customer service AI customer service / intelligent customer service / AI customer service / build AI customer service / integrate AI customer service / AI customer service agent / conversational AI / TRTC Conversational AI / voice agent + customer service / voice assistant + customer service ai-service trtc-ai-customer-service-skill ../trtc-ai-service/SKILL.md
3 AI speaking practice partner AI oral practice partner / oral practice partner / oral coach / English speaking / English practice partner / English conversation practice / oral coach / speaking coach / AI speaking practice / oral practice / speaking practice / language coach / intelligent speaking / oral practice / scenario practice partner oral-coach ai-oral-coach-skill ../trtc-ai-oral-coach/SKILL.md

route_hint and the final owner invocation must use the owner frontmatter name from the table above; the directory name and product value cannot replace the owner name. Other handoff owners likewise use their respective SKILL.md of the name field.

Exclusion conditions:

  • Scenario 1 (real-time translation): does not apply to text-only translation / offline document translation; product words such as meeting / live streaming may appear together with real-time translation, and must not cause it to fall back to the ordinary Conference / Live route for that reason.
  • Scenarios 2 and 3: the message must not simultaneously contain clear signals of other products (Conference / Call / Chat / Live / RTC Engine); if they appear simultaneously, fall back to the standard route and ask the user which one they want to do.

Hit handling(shared by the 3 scenarios):

  1. Inquiry word short-circuit: if the message also contains inquiry signal words (价格 / 费用 / 多少钱 / 对比 / vs / 是什么 / 怎么样 / pricing / how much / compare / what is / overview) — skip intent confirmation and route directly to ../trtc-docs/SKILL.md,STOP。
  2. Otherwise, after the Host reporting boundary completes the current turn record,first do intent confirmation(reuse §B's AskUserQuestion intent confirmation template,product take the corresponding value from the table above):
    • ① Yes, I want to integrate → execute §B.2 SDKAppID collection; after collection is complete, Read the corresponding domain skill from the table above
    • ② I just want to learn about it (pricing / comparison / documentation) → route to ../trtc-docs/SKILL.md
  3. STOP, and do not continue executing the subsequent fast-path, §1–§3.

Pre-gate: TIMPush fast-path

Before entering Query Classification, check again whether it is a TIMPush / offline push scenario.

If the user message hits one of the following trigger words:

  • "Help me integrate TIMPush" / "Help me integrate timpush" / "Integrate TIMPush" / "Integrate TIMPush"
  • "Integrate Tencent Cloud push" / "Integrate Tencent Cloud push" / "Integrate Tencent Cloud Push" / "Integrate Tencent Cloud Push"
  • "Integrate Tencent Cloud offline push" / "Integrate Tencent Cloud offline push" / "Tencent Cloud offline push" / "Tencent Cloud push"
  • "TIMPush offline push" / "instant messaging push" / "offline push integration"
  • "registerPush" / "800006" / "businessID" + push context
  • "TIMPush" / "timpush" / "APNs" / "FCM" and it is explicitly push integration or troubleshooting
  • "integrate TIMPush" / "TIMPush integration" / "TIMPush offline push" / "setup TIMPush"
  • "integrate Tencent Cloud push" / "setup Tencent Cloud push" / "add Tencent Cloud push"
  • "integrate Tencent Cloud offline push" / "Tencent Cloud offline push" / "Tencent Cloud push integration"

and in the message not explicit other product-dominant signals appear at the same time (Conference / Call / Live / oral practice partner / AI customer service):

→ after the Host reporting boundary completes recording the current turn, route to ../trtc-push/SKILL.md, and execute according to its guided flow.STOP — do not continue executing the subsequent §1–§3 steps.

If TIMPush trigger words appear together with other product signals (for example, "add push to Conference"), first ask the user whether they want to do TIMPush integration or integration of the original product, then route.

1. Query classification

Run:

python3 -m tools.query_classifier --query “<user_message>”

Use the result for routing:

  • kind = error_code or kind = symptom_like
    • Record kind(and intent=slice-lookup, for later use in §A)
    • Do not STOP here or route to trtc-docs — Chat/IM context is assigned in §A to trtc-chat/docs; an active/paused chat integration session should have already been routed by §0 to trtc-chat(domain Path C)
    • continue §2 → Routing §A
  • kind = capability
    • Record capability_intent ∈ {integrate, lookup, ambiguous}
    • continue to the next step
  • tool unavailable (command does not exist / timeout / non-JSON output): jump to the keyword fallback below, do not guess

2. Product identification

Run:

python3 -m tools.search route --query “<user_message>”

Rules:

  • status = exact and confidence >= 0.6: adopt candidates[0].product
  • status = ambiguous: directly ask the user to clarify the product, STOP
  • status = not_found ortool unavailable: use the keyword fallback below

Keywords: TRTC, Tencent RTC, TUIKit, REST API, Webhook, and the signals in ../knowledge-base/chat/web/path-d-signals.yaml.

Keyword fallback (use when the tool is unavailable / not_found):

Product Signals
Chat message, group chat, IM, conversation, messaging
Call call, 1v1, video call, ringing
RTC Engine enter room, publish stream, TRTCCloud, publish stream
Live live streaming, co-guest, bullet comments, gifts, co-guest
Conference conference, multi-person video, screen sharing, participant, meeting

when the keyword fallback also cannot match: directly ask the user "Which TRTC product are you using?", STOP.

Routing

Conference guided integration pipeline: dispatcher → conference domain skill → onboarding/topic flow.

A. Lookup / factual questions

Single source of signal words:Read ../knowledge-base/chat/web/path-d-signals.yaml(shared with trtc-chat Step 0 / Path D; it is forbidden to maintain a second inline list inside Root).

Chat/IM context(any one is sufficient):

  • §2 Identify product = chat
  • user sentence hits path-d-signals.yaml of im_consult or symptom_in_integration
  • message contains §2 Chat keyword signals (IM, group chat, TUIKit, messaging, etc.)

§0 already covered (this section no longer handles it):

  • status ∈ {active, paused} and product = chat → already routed ../trtc-chat/SKILL.md; errors/white screens/symptoms during integration go to domain Path C, Root is forbidden to send directly to trtc-chat/docs or trtc-docs

Path D cold start(no active/paused chat integration session) — before trtc-docs before:

Condition Routing
Chat/IM context + kind ∈ {error_code, symptom_like} ../trtc-chat/docs/SKILL.md,STOP
Chat/IM context + IM concepts / REST / Webhook / TUIKit / billing / SDK API (im_consult or factual/decision lookup) ../trtc-chat/docs/SKILL.md,STOP
product = chat + capability_intent = lookup ../trtc-chat/docs/SKILL.md,STOP

Exception: Conference Web symptom (direct connection, does not go through trtc-docs)

When all three of the following conditions are met, directly Read ../trtc-conference/flows/troubleshoot.md, without going through trtc-conference/SKILL.md:

  • product = conference(or session / package.json contains @tencentcloud/roomkit-web-vue3 / tuikit-atomicx-vue3)
  • platform = web(or can be inferred)
  • kind = symptom_like or the intent is symptom / troubleshoot / cannot enter room / black screen / no sound and other specific faults

The following cases route to ../trtc-docs/SKILL.md(non-Chat/IM context, or the Conference exception is not matched):

  • capability lookup / "how to implement X" / API usage / official pattern
  • kind = error_code or kind = symptom_like(not Chat/IM context)
  • pricing / quota / migration / product comparison
  • factual troubleshooting of symptom / troubleshoot / crash / black screen (not Chat/IM、not Conference Web direct-connection exception)

When passing in trtc-docs When passing in

  • product
  • platform(if it can be identified)
  • query(original question)
  • intent
    • factual / pricing / comparison / migration → fact-lookup / decision-lookup / path-lookup
    • error code / API pattern / implementation lookup / symptom → slice-lookup

B. Guided integration / code-generation intent

If capability_intent = integrate, or the user explicitly requests it:

  • Build a complete scenario
  • Add a feature to an existing project
  • Integrate from scratch
  • step-by-step walkthrough
  • directly help me integrate / write the code / integrate X

Then, before routing to any domain skill, first do an intent confirmation:

Intent confirmation

Echo the identified product / platform / user intent back to the user in one sentence (in the user's own language, without exposing internal field names), and use AskUserQuestion single-select to confirm:

I'll help you {the core intent of the user's original description}. What I understand:

  • Product: {the Chinese and English names of the product}
  • Platform: {platform}
  • Goal: {a short intent distilled from the user's original description, no more than 15 characters, without internal enum values}

Is that right?

  • ① Yes, continue → enter §B.2 SDKAppID collection
  • ② No, let me add something → have the user supplement the description, and directly re-route based on the new description;do not confirm a second time, and do not reset the session

Rules:

  • There is already an active session (status = active) skip this confirmation—the user has already confirmed it before
  • The "target" field must come from the user's original description, and must not use integrate-scenario / integrate-feature and other internal terms
  • If product or platform is still ambiguous, clarify first before confirming

B.2 SDKAppID collection (mandatory step for the integrate intent)

Trigger: §B intent confirmation has passed (user selected ①), or this round the session guard detects sdkappid_state ∈ {awaiting-sdkappid, pending-console} return to this section.

Short-circuit conditions(if any is met, skip this section and go directly to the "after confirmation passes" routing dispatch below):

  • session sdkappid already exists and is a non-zero integer
  • session status ∈ {active, paused}(collection has already been completed in a previous round)

Execution: must Read flows/collect-sdkappid.md and follow its rules to complete the main question, and according to product(for groupings see flows/collect-sdkappid.md §Step 2b, currently supports conference / call / chat / ai-service / realtime-interpreter / oral-coach) and the user's language, display the console link and validate the SDKAppID in the user's reply.It is forbidden to generate console links or output templates from memory within SKILL.md; all VERBATIM output uses flows/collect-sdkappid.md as the sole source.

Exit conditions:sdkappid_state = collected is written to the session; if not satisfied, routing to any domain skill is forbidden.

After confirmation passes:

  • If (product, platform) == (conference, web): route to ../trtc-conference/SKILL.md
  • If (product, platform) == (chat, web): route to ../trtc-chat/SKILL.md
  • If (product, platform) == (chat, android): route to ../trtc-chat-android/SKILL.md
  • If product == call: route to ../trtc-call/SKILL.md(platform compatibility check is performed internally by the call skill)
  • Otherwise:
    • Clearly inform that the current guided integration only supports Conference Web / Chat Web / Chat Android / Call Flutter
    • If the user only wants to understand how it is done, switch to ../trtc-docs/SKILL.md or, for Chat IM consultation, go to ../trtc-chat/docs/SKILL.md
    • Do not pretend that there is still an old cross-cutting onboarding skill that can handle other products

C. Review-worded requests

If what the user says is review / audit / help me take a look / is it correct / check for omissions / business process / compare against the official:

  • Do not directly do a code review
  • First determine the underlying intent:
    • There is an error code / symptom / API pattern / implementation question → for the Chat/IM context go to ../trtc-chat/docs/SKILL.md(§A); otherwise ../trtc-docs/SKILL.md
    • integration audit (check for omissions / whether the business process is normal / compare against the official process / online classroom process) → read ../knowledge-base/slices/conference/web/integration-audit.md, output a checklist (do not produce output in the form of a code review)
    • Chat integration audit (active/completed chat + has project) → ../trtc-chat/SKILL.md + Read 08-state-config.md §8.2
    • Want you to actually implement Conference Web code → ../trtc-conference/SKILL.md
    • Want you to actually implement Chat Web code → ../trtc-chat/SKILL.md
    • Pure style review, with no specific questions → clearly state that standalone code review is not provided here, and ask the user to change it to a specific error, API, or integration goal

Platform identification

If necessary, then identify platform:

Platform Signals
web React, Vue, TypeScript, browser
android Java, Kotlin, Gradle
ios Swift, Objective-C, Xcode
flutter Dart, Flutter
electron Electron, desktop

If it is a docs lookup and the question does not depend on platform, you may skip asking.

Reporting ownership

Prompt, context, routing attribution, and Host Stop handling are uniformly handled by Host Bootstrap and Node Runtime; business Skills only maintain session, answers, and business state, and do not duplicate redaction, deduplication, or sending logic. Do not restore the old MCP,send-query or independent path events. Technical fields and compatibility entry points only query runtime/REPORTING.md。

Sub-skills / Tools

Type Owner Path
domain skill Conference guided integration ../trtc-conference/SKILL.md
domain skill Chat guided integration ../trtc-chat/SKILL.md
domain skill Chat Android guided integration ../trtc-chat-android/SKILL.md
domain skill Chat IM docs (Path D) ../trtc-chat/docs/SKILL.md
domain skill Call Flutter guided integration ../trtc-call/SKILL.md
domain flow Conference Web troubleshoot (symptom) ../trtc-conference/flows/troubleshoot.md
domain skill AI customer service / AI customer service ../trtc-ai-service/SKILL.md
domain skill AI realtime interpreter / realtime translation ../trtc-ai-realtime-interpreter/SKILL.md
domain skill AI oral coach / speaking practice ../trtc-ai-oral-coach/SKILL.md
domain skill TIMPush / offline push ../trtc-push/SKILL.md
domain skill SDK runtime log troubleshooting (manual 1.0) ../trtc-sdk-log-analysis/SKILL.md
shared answer layer factual / docs lookup ../trtc-docs/SKILL.md
shared tool product routing / slice lookup python3 -m tools.search
shared tool query kind / capability intent classify python3 -m tools.query_classifier
shared tool session bus python3 -m tools.session
shared tool flow enter / resume python3 -m tools.flow
shared tool structural gate python3 -m tools.apply

Hard rules

  1. Root does not answer integration questions itself; it routes.
  2. Root never routes to removed legacy shared skills; use the domain skills listed above, trtc-docs, and shared python3 -m tools.* commands only.
  3. Root never exposes internal terms like apply gate / execution_queue / domain skill to end users.
  4. For code-generation intent, Conference Web, Chat Web, Chat Android, and Call Flutter may proceed into guided integration.
  5. For all other products, do not fabricate unfinished product flows.
  6. Active chat integration errors/symptoms route via trtc-chat/SKILL.md Path C, not trtc-docs or trtc-chat/docs.
  7. Never Read trtc-chat/SKILL.md or trtc-chat-android/SKILL.md or trtc-chat/docs/SKILL.md as the first skill in a turn — always start from this file (trtc/SKILL.md) so the Host reporting boundary and routing run first. Domain skills are routed owners, not parallel dispatchers.
  8. The log Skill is a manual evidence workflow in 1.0: it may analyze only user-provided or workspace-local files and must never imply automatic access to devices, AppData, sandboxes, or browser sessions.
  9. Integrate intent MUST complete §B.2 SDKAppID collection before routing to any domain skill. Exit condition is sdkappid_state = collected written to session, or the short-circuit condition met (session already has non-zero sdkappid, or status ∈ {active, paused}). Routing to trtc-conference / trtc-chat / trtc-chat-android / trtc-call / trtc-ai-customer-service-skill / trtc-ai-realtime-interpreter / ai-oral-coach-skill while §B.2 is still pending is a routing error. Console-link VERBATIM templates live only in flows/collect-sdkappid.md; never fabricate links from memory. TIMPush exception: trtc-push fast-path has its own credential flow via MCP workflow engine; §B.2 does not apply. Domain fallback exception: trtc-call/A.3, trtc-call/D1.3, trtc-chat/Q.1 may inline the same links only when session.sdkappid is null AND sdkappid_state ∉ {awaiting-sdkappid, pending-console, collected} (i.e., root §B.2 was genuinely bypassed); they MUST mirror flows/collect-sdkappid.md verbatim.