Skip to content
Back to skills

198 Designing D1a0d50e

ASecurity

Guide to designing topics, routing patterns, and transitions in Agentforce agents.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
businessgo

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 198-designing_d1a0d50e --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 198 Designing D1a0d50e?

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

Security grade badge for 198 Designing D1a0d50e
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-198-designing-d1a0d50e/badge)](https://www.skillsdirectory.com/skills/tools-only-198-designing-d1a0d50e)

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

SKILL.md
# Topics Design Guide

Guide to designing topics, routing patterns, and transitions in Agentforce agents.

## Table of Contents

- [Topic Fundamentals](#topic-fundamentals)
- [Topic Structure](#topic-structure)
- [Topic Transitions](#topic-transitions)
- [Topic Delegation vs Transition](#topic-delegation-vs-transition)
- [Routing Patterns](#routing-patterns)
- [Multi-Topic Agents](#multi-topic-agents)
- [Bidirectional Routing](#bidirectional-routing)
- [Best Practices](#best-practices)

---

## Topic Fundamentals

**Topics** are conversation modes that group related actions and reasoning logic. Think of them as "skill areas" or "conversation contexts" for your agent.

### Why Use Topics?

| Benefit | Description |
|---------|-------------|
| **Separation of Concerns** | Group related functionality (e.g., "Order Management", "Support") |
| **Focused Instructions** | Each topic has its own reasoning instructions |
| **Action Scoping** | Actions defined in a topic are available only in that topic |
| **Persona Switching** | Topics can override system instructions for different modes |

---

## Topic Structure

### Required Fields

Every topic MUST have:
- `label:` - Display name for the topic
- `description:` - What the topic does (used by LLM for routing)

```agentscript
topic order_lookup:
   label: "Order Lookup"
   description: "Helps customers look up their order status and details"

   reasoning:
      instructions: ->
         | Help the user find their order.
```

### Optional Blocks

| Block | Purpose | Example |
|-------|---------|---------|
| `system:` | Override global system instructions | Persona switching |
| `actions:` | Define topic-specific actions | Flow/Apex actions |
| `reasoning:` | Topic reasoning logic | Instructions + action invocations |

---

## Topic Transitions

### `@utils.transition to @topic.[name]`

Permanently move to another topic. The user CANNOT return to the previous topic without explicit routing.

```agentscript
start_agent topic_selector:
   label: "Topic Selector"
   description: "Routes users to topics"

   reasoning:
      instructions: ->
         | What would you like to do?
         | 1. Check order status
         | 2. Get support
      actions:
         go_orders: @utils.transition to @topic.order_lookup
         go_support: @utils.transition to @topic.support
```

**When to Use:**
- **Permanent mode switches** (e.g., "I want to check my order" → order_lookup)
- **One-way transitions** where user won't return to previous topic
- **Entry point routing** (start_agent → specific topics)

---

## Topic Delegation vs Transition

There are TWO ways to reference other topics:

### 1. `@utils.transition to @topic.[name]` - Permanent Transition

**Behavior:**
- Permanently moves to the target topic
- User CANNOT automatically return
- Current topic is abandoned
- Target topic becomes the active context

**Use Cases:**
- Main menu routing (start_agent → feature topics)
- Mode switches (FAQ → Support)
- One-way workflows

```agentscript
# Permanent transition
actions:
   go_to_orders: @utils.transition to @topic.order_management
```

### 2. `@topic.[name]` - Topic Delegation (Sub-Agent Pattern)

**Behavior:**
- Temporarily delegates to target topic
- Target topic can "return" control to caller
- Original topic resumes after delegation completes
- Like calling a subroutine

**Use Cases:**
- Specialist consultation (Main Agent → Tax Expert → Main Agent)
- Reusable sub-workflows (Address Collection)
- Modular agent design

```agentscript
# Topic delegation (can return)
actions:
   consult_specialist: @topic.tax_specialist
```

**Example: Bidirectional Routing**

```agentscript
topic main_agent:
   label: "Main Agent"
   description: "General assistant"

   reasoning:
      instructions: ->
         | I can help with general questions.
         | For tax questions, I'll consult our tax specialist.
      actions:
         consult_tax: @topic.tax_specialist   # Delegation - can return

topic tax_specialist:
   label: "Tax Specialist"
   description: "Tax expert sub-agent"

   reasoning:
      instructions: ->
         | Provide tax advice.
         | When done, return control to main agent.
      actions:
         back_to_main: @utils.transition to @topic.main_agent  # Return
```

**Key Difference:**

| Pattern | Control Flow | Returns? |
|---------|--------------|----------|
| `@utils.transition to @topic.x` | Permanent move | No |
| `@topic.x` | Temporary delegation | Yes (if target topic transitions back) |

---

## Routing Patterns

### Pattern 1: Hub-and-Spoke (Recommended)

```agentscript
start_agent topic_selector:
   label: "Topic Selector"
   description: "Main menu / router"

   reasoning:
      instructions: ->
         | What can I help you with?
      actions:
         go_orders: @utils.transition to @topic.order_management
         go_support: @utils.transition to @topic.support
         go_faq: @utils.transition to @topic.faq

topic order_management:
   label: "Order Management"
   description: "Order lookup and tracking"

   reasoning:
      instructions: ->
         | Help with orders.
      actions:
         back: @utils.transition to @topic.topic_selector

topic support:
   label: "Support"
   description: "Customer support"

   reasoning:
      instructions: ->
         | Provide support.
      actions:
         back: @utils.transition to @topic.topic_selector
```

**Benefits:**
- Clear entry point
- Easy to add new topics
- Users can always "go back to menu"

### Pattern 2: Linear Workflow

```agentscript
start_agent onboarding:
   label: "Onboarding"
   description: "Collect user information"

   reasoning:
      instructions: ->
         | Welcome! Let's get started.
      actions:
         next: @utils.transition to @topic.collect_address

topic collect_address:
   label: "Collect Address"
   description: "Get shipping address"

   reasoning:
      instructions: ->
         | What's your address?
      actions:
         next: @utils.transition to @topic.confirm_details

topic confirm_details:
   label: "Confirm Details"
   description: "Review and confirm"

   reasoning:
      instructions: ->
         | Please confirm your information.
```

**Benefits:**
- Guided, step-by-step experience
- Prevents users from skipping steps
- Good for onboarding or multi-step processes

### Pattern 3: Contextual Routing

```agentscript
topic order_lookup:
   label: "Order Lookup"
   description: "Look up order by number"

   reasoning:
      instructions: ->
         | if @variables.order_found == False:
         |    | I couldn't find that order.
      actions:
         lookup: @actions.get_order
         # Conditional routing based on outcome
         go_support: @utils.transition to @topic.support
            available when @variables.order_found == False
         back: @utils.transition to @topic.topic_selector
            available when @variables.order_found == True
```

**Benefits:**
- Dynamic routing based on data
- Handles error cases gracefully
- Provides context-aware navigation

---

## Multi-Topic Agents

### When to Use Multiple Topics

| Scenario | Topics Needed |
|----------|---------------|
| **Multi-feature agent** | 1 topic per feature + 1 router topic |
| **Workflow with steps** | 1 topic per step + 1 entry topic |
| **Persona switching** | 1 topic per persona + 1 selector |
| **Specialist delegation** | 1 main topic + N specialist topics |

### Example: Multi-Feature Agent

```agentscript
system:
   instructions: "You are a customer service agent for an e-commerce store."

config:
   agent_name: "Customer_Service_Agent"
   agent_label: "Customer Service"
   description: "Handles orders, returns, and support"

variables:
   EndUserId: linked string
      source: @MessagingSession.MessagingEndUserId
      description: "Messaging End User ID"
   RoutableId: linked string
      source: @MessagingSession.Id
      description: "Messaging Session ID"
   ContactId: linked string
      source: @MessagingEndUser.ContactId
      description: "Contact ID"
   order_number: mutable string
      description: "Current order number"
   return_requested: mutable boolean
      description: "Whether user wants to return an order"

language:
   default_locale: "en_US"
   additional_locales: ""
   all_additional_locales: False

start_agent topic_selector:
   label: "Topic Selector"
   description: "Routes customers to the right feature"

   reasoning:
      instructions: ->
         | Hello! I can help you with:
         | - Order status and tracking
         | - Returns and refunds
         | - General support questions
         |
         | What do you need help with?
      actions:
         go_orders: @utils.transition to @topic.order_management
         go_returns: @utils.transition to @topic.returns_processing
         go_support: @utils.transition to @topic.general_support

topic order_management:
   label: "Order Management"
   description: "Order lookup, tracking, and status updates"

   actions:
      get_order:
         description: "Retrieves order details by order number"
         inputs:
            inp_OrderNumber: string
               description: "Order number"
         outputs:
            out_OrderStatus: string
               description: "Current order status"
         target: "flow://Get_Order_Details"

   reasoning:
      instructions: ->
         | I can help you check your order status.
         | What's your order number?
      actions:
         lookup: @actions.get_order
         back: @utils.transition to @topic.topic_selector

topic returns_processing:
   label: "Returns Processing"
   description: "Handles return requests and refunds"

   actions:
      create_return:
         description: "Creates a return request"
         inputs:
            inp_OrderNumber: string
               description: "Order number to return"
         outputs:
            out_ReturnNumber: string
               description: "Return authorization number"
         target: "flow://Create_Return_Request"

   reasoning:
      instructions: ->
         | I can help you return your order.
         | What's your order number?
      actions:
         process_return: @actions.create_return
         back: @utils.transition to @topic.topic_selector

topic general_support:
   label: "General Support"
   description: "Answers general questions and provides support"

   reasoning:
      instructions: ->
         | I'm here to help with any questions.
         | What can I answer for you?
      actions:
         back: @utils.transition to @topic.topic_selector
         escalate: @utils.escalate
            description: "Transfer to human agent if needed"
```

---

## Bidirectional Routing

**Pattern: Specialist Consultation**

```agentscript
topic main_agent:
   label: "Main Agent"
   description: "General assistant that can consult specialists"

   reasoning:
      instructions: ->
         | I can help with most questions.
         | For specialized topics, I'll consult our experts.
      actions:
         # Delegation - specialist can return control
         consult_tax: @topic.tax_specialist
         consult_legal: @topic.legal_specialist

topic tax_specialist:
   label: "Tax Specialist"
   description: "Expert on tax questions"

   reasoning:
      instructions: ->
         | [Tax Specialist Mode]
         | Provide detailed tax guidance.
      actions:
         # Return to main agent when done
         return_to_main: @utils.transition to @topic.main_agent

topic legal_specialist:
   label: "Legal Specialist"
   description: "Expert on legal questions"

   reasoning:
      instructions: ->
         | [Legal Specialist Mode]
         | Provide legal information.
      actions:
         return_to_main: @utils.transition to @topic.main_agent
```

**Benefits:**
- Main agent stays in control
- Specialists provide focused expertise
- Clean separation of concerns
- Reusable specialist topics

---

## Best Practices

### Topic Design Principles

1. **Single Responsibility**: Each topic should have ONE clear purpose
2. **Clear Labels**: Use descriptive labels that users understand
3. **Comprehensive Descriptions**: LLM uses description for routing - make it detailed
4. **Provide Exit Routes**: Always give users a way to go back or exit
5. **Avoid Orphaned Topics**: Every topic should be reachable from start_agent

### Naming Conventions

| Element | Convention | Example |
|---------|------------|---------|
| Topic name | snake_case | `order_management` |
| Topic label | Title Case | "Order Management" |
| Action name | snake_case | `get_order_status` |

### Common Mistakes

| Mistake | Fix |
|---------|-----|
| Missing `label` or `description` | Add both to every topic |
| Orphaned topics (unreachable) | Ensure all topics have incoming transitions |
| No way to go back | Add transition to topic_selector or escalation |
| Too many topics | Combine related functionality |
| Too few topics | Split complex topics into focused ones |

### Topic Transitions Checklist

- [ ] `start_agent` transitions to at least one topic
- [ ] All topics are reachable from `start_agent` (directly or indirectly)
- [ ] Each topic has at least one outbound transition (or escalation)
- [ ] Users can navigate back to main menu or exit
- [ ] Topic descriptions are clear and detailed for LLM routing

---

## References

For additional information, see:
- [agent-script-reference.md](agent-script-reference.md) - Full Agent Script syntax
- [../docs/patterns-and-practices.md](../docs/patterns-and-practices.md) - Pattern decision tree
- [../templates/patterns/bidirectional-routing.agent](../templates/patterns/bidirectional-routing.agent) - Bidirectional routing example

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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.