Skip to main content

How Folders Work

Use slash notation in prompt names

Folders are virtual—they don’t exist as separate entities. Instead, create folders by including forward slashes (/) in prompt names. Each slash-separated segment becomes a folder level.Flat prompt name:
name="customer-support-billing"
Hierarchical folder path:
name="customer-support/billing"
# Creates folder: customer-support/
# Prompt name: billing
Nested folders:
name="customer-support/billing/refund-policy"
# Creates folders: customer-support/ → billing/
# Prompt name: refund-policy
The ABV platform automatically treats everything before the final segment as folder path.

UI automatically creates folder hierarchy

When you create a prompt with slashes in its name, the ABV UI automatically renders the folder structure in the Prompt Management interface.Example hierarchy:
📁 customer-support/
  📁 billing/
    📄 refund-policy
    📄 payment-issues
  📁 technical/
    📄 troubleshooting
    📄 account-access
📁 marketing/
  📄 email-campaign
  📄 social-media
Folders appear as collapsible sections, allowing you to expand and navigate the hierarchy visually.

Navigate through folders in UI

In the ABV dashboard Prompt Management section:
  • Click folder names to expand/collapse them
  • View all prompts within a folder
  • Filter by folder to narrow search results
  • Create new prompts within folders by entering the folder path in the name field
The folder structure provides visual organization without affecting how you reference prompts in code.

Reference prompts with folder paths in code

When fetching prompts via SDK or API, include the full folder path in the prompt name.
# Fetch prompt from nested folder
prompt = abv.get_prompt("customer-support/billing/refund-policy")

# The folder path is part of the prompt name
# No special "folder" parameter required
Folders are purely organizational—they don’t change how you reference prompts, they’re just part of the name.

Organization Patterns

Separate prompts by team ownership to clarify responsibility and prevent conflicts.Folder Structure:
📁 marketing/
  📄 email-campaign-welcome
  📄 email-campaign-renewal
  📄 social-media-post-generator
📁 engineering/
  📄 code-review-assistant
  📄 documentation-generator
📁 customer-support/
  📄 ticket-classifier
  📄 response-assistant
📁 sales/
  📄 lead-qualifier
  📄 proposal-generator
Benefits:
  • Clear ownership: Each team manages their own prompts
  • No naming conflicts: marketing/email-campaign vs. sales/email-campaign
  • Access control: Assign team-specific permissions (if RBAC allows)
Separate prompts by deployment environment to prevent production prompts from mixing with experiments.Folder Structure:
📁 production/
  📄 customer-support-agent
  📄 billing-assistant
📁 staging/
  📄 customer-support-agent-v2
  📄 new-feature-test
📁 experiments/
  📄 gpt4-vs-claude-test
  📄 prompt-engineering-trial
📁 deprecated/
  📄 old-chatbot-v1
  📄 legacy-classifier
Benefits:
  • Environment isolation: Production prompts clearly separated
  • Safe experimentation: Test prompts isolated from production
  • Historical record: Archive deprecated prompts instead of deleting
Note: This pattern complements (but doesn’t replace) ABV’s built-in labels (production, staging). Folders provide organizational structure; labels provide deployment control.
Group prompts by product feature or user-facing functionality.Folder Structure:
📁 onboarding/
  📄 welcome-message
  📄 tutorial-guide
  📄 feature-tour
📁 billing/
  📄 invoice-generator
  📄 payment-reminder
  📄 refund-processor
📁 notifications/
  📄 email-digest
  📄 push-notification
  📄 sms-alert
📁 recommendations/
  📄 product-recommender
  📄 content-suggester
Benefits:
  • Feature clarity: All prompts for a feature in one place
  • Easier refactoring: Update all onboarding prompts together
  • Discoverability: New team members quickly find relevant prompts
Separate prompts by product line when managing multiple products in one ABV account.Folder Structure:
📁 product-a/
  📁 customer-support/
    📄 chat-agent
    📄 email-responder
  📁 marketing/
    📄 campaign-generator
📁 product-b/
  📁 customer-support/
    📄 chat-agent
    📄 email-responder
  📁 analytics/
    📄 report-generator
📁 shared/
  📄 safety-guidelines
  📄 brand-voice
Benefits:
  • Product isolation: Each product’s prompts clearly separated
  • Shared components: Common prompts in shared/ folder
  • Independent evolution: Update product-a prompts without affecting product-b
Combine organizational strategies with nested folders for complex prompt libraries.Folder Structure:
📁 customer-support/
  📁 tier-1/
    📁 billing/
      📄 payment-issues
      📄 refund-requests
    📁 technical/
      📄 password-reset
      📄 login-issues
  📁 tier-2/
    📁 escalations/
      📄 complex-billing
      📄 technical-escalation
  📁 shared/
    📄 greeting-template
    📄 closing-template
📁 experiments/
  📁 2024-q1/
    📄 new-greeting-test
    📄 tone-experiment
  📁 2024-q2/
    📄 multilingual-test
Best Practice: Limit folder depth to 2-3 levels. Deeper hierarchies become difficult to navigate and reference.

Implementation Examples

  1. Navigate to Prompt Management in ABV dashboard
  2. Click Create Prompt
  3. In the Name field, enter the full folder path with slashes:
    customer-support/billing/refund-policy
    
  4. Configure the prompt (type, content, labels, etc.)
  5. Click Save
The UI automatically:
  • Creates the folder structure (customer-support/billing/)
  • Displays the prompt under the nested folders
  • Allows you to expand/collapse folders for navigation
Viewing folders:
  • Expand customer-support/ folder
  • Expand billing/ subfolder
  • See refund-policy prompt listed
Install ABV SDK:
pip install abvdev
Create prompts with folder paths:
from abvdev import ABV

abv = ABV(
    api_key="sk-abv-...",
    host="https://app.abv.dev"
)

# Create shared components
abv.create_prompt(
    name="shared/safety-guidelines",
    type="text",
    prompt="Never provide medical, legal, or financial advice.",
    labels=["production"]
)

# Create customer support prompts
abv.create_prompt(
    name="customer-support/billing/refund-policy",
    type="text",
    prompt="""@@@abvdevPrompt:name=shared/safety-guidelines|label=production@@@

Process refund requests according to the following policy: {{refund_policy_text}}

Customer request: {{customer_request}}""",
    labels=["production"]
)

abv.create_prompt(
    name="customer-support/technical/password-reset",
    type="text",
    prompt="Guide the customer through password reset: {{issue_details}}",
    labels=["production"]
)

# Create marketing prompts
abv.create_prompt(
    name="marketing/email-campaigns/welcome",
    type="text",
    prompt="Generate a welcome email for: {{user_name}}",
    labels=["production"]
)
Fetch prompts from folders:
# Fetch by full path (including folders)
refund_prompt = abv.get_prompt("customer-support/billing/refund-policy")
welcome_email = abv.get_prompt("marketing/email-campaigns/welcome")

# Compile and use
compiled = refund_prompt.compile(
    refund_policy_text="30-day money-back guarantee",
    customer_request="I want to return my order from last week"
)
Install ABV SDK:
npm install @abvdev/client
Create prompts with folder paths:
import { ABVClient } from "@abvdev/client";
import dotenv from "dotenv";
dotenv.config();

const abv = new ABVClient({
    apiKey: process.env.ABV_API_KEY,
    baseUrl: "https://app.abv.dev"
});

async function createOrganizedPrompts() {
    // Create shared components
    await abv.prompt.create({
        name: "shared/safety-guidelines",
        type: "text",
        prompt: "Never provide medical, legal, or financial advice.",
        labels: ["production"]
    });

    // Create customer support prompts
    await abv.prompt.create({
        name: "customer-support/billing/refund-policy",
        type: "text",
        prompt: `@@@abvdevPrompt:name=shared/safety-guidelines|label=production@@@

Process refund requests according to the following policy: {{refund_policy_text}}

Customer request: {{customer_request}}`,
        labels: ["production"]
    });

    await abv.prompt.create({
        name: "customer-support/technical/password-reset",
        type: "text",
        prompt: "Guide the customer through password reset: {{issue_details}}",
        labels: ["production"]
    });

    // Create marketing prompts
    await abv.prompt.create({
        name: "marketing/email-campaigns/welcome",
        type: "text",
        prompt: "Generate a welcome email for: {{user_name}}",
        labels: ["production"]
    });
}

createOrganizedPrompts();
Fetch prompts from folders:
async function useOrganizedPrompts() {
    // Fetch by full path
    const refundPrompt = await abv.prompt.get(
        "customer-support/billing/refund-policy",
        { type: "text" }
    );

    const compiled = refundPrompt.compile({
        refund_policy_text: "30-day money-back guarantee",
        customer_request: "I want to return my order from last week"
    });

    console.log(compiled);
}

useOrganizedPrompts();
If you have existing prompts without folder structure, reorganize them by creating new prompts with folder paths.Migration approach:
# Get list of all existing prompts
existing_prompts = [
    "billing-refund-policy",
    "billing-payment-issues",
    "technical-password-reset",
    "marketing-welcome-email"
]

# Define folder mapping
folder_mapping = {
    "billing-refund-policy": "customer-support/billing/refund-policy",
    "billing-payment-issues": "customer-support/billing/payment-issues",
    "technical-password-reset": "customer-support/technical/password-reset",
    "marketing-welcome-email": "marketing/email-campaigns/welcome"
}

# Migrate each prompt
for old_name, new_path in folder_mapping.items():
    # Fetch existing prompt
    old_prompt = abv.get_prompt(old_name)

    # Create new prompt with folder path
    abv.create_prompt(
        name=new_path,
        type=old_prompt.type,
        prompt=old_prompt.prompt,
        config=old_prompt.config,
        labels=old_prompt.labels,
        tags=old_prompt.tags
    )

    print(f"Migrated {old_name}{new_path}")

# Update application code to use new paths
# Then archive or delete old prompts
Important: Update all code references to use the new folder paths before removing old prompts.

Next Steps