382 lines
Market Intelligence

Solution Page

Competitive Intelligence

Discover competitors from Slack, research the market live, and generate Barndoor-centric security and platform battle cards.

Founders
Product marketing
Strategy
Slack discovery
Security matrix
Battle card

Overview

For Founders, Product marketing, Strategy

Integrations: Slack discovery, Security matrix, Battle card

Battle card

Security matrix

Competitive summary

Shortens the time from request to competitive brief.

Creates a more consistent point of view for the field.

Keeps market context tied to verifiable research inputs.

What It Solves

Competitive research is usually fragmented across conversations, browser tabs, and one-off notes.

Workflow

1

Identify relevant competitors from Slack and connected context.

2

Research the market and security posture using live external sources.

3

Assemble a reusable comparison package for field and strategy teams.

Implementation

Review the underlying plan definition, inspect the template when available, and see how the workflow is encoded for repeatable execution.

Plan Code

Markdown Report

competitors.yaml

382 lines

## COMPETITIVE INTELLIGENCE - SLACK DISCOVERY + SECURITY BATTLE CARD
## Pull competitor mentions from Slack over the last 90 days, research each company,
## compare them against Barndoor.ai, and generate a security/platform battle card.

requiredTools:
  - name: slack
    type: mcp

parameters:
  - name: slackChannelId
    schema:
      type: string
      description: "Slack channel ID to crawl for competitor mentions"
  - name: lookBackDays
    schema:
      type: string
      default: "90"
      description: "How many days of Slack history to inspect for competitor mentions"
  - name: maxCompetitors
    schema:
      type: string
      default: "4"
      description: "Maximum number of competitors to research in depth"

transformers:
  - name: cleanup_slack_history
    onFunctionOutput: conversations_history
    jmesPath: 'structuredContent.messages || result.messages || messages'

components:
  schemas:
    company_profile:
      type: object
      required:
        - name
        - general_information
        - category
        - business_model
        - target_customer
        - moat
        - strengths
        - weaknesses
        - security_posture_summary
        - deployment_model
        - pricing_summary
      properties:
        name: { type: string, description: "Name of the company" }
        website_url: { type: string, description: "Official website URL" }
        general_information: { type: string, description: "Short overview of what the company does" }
        category: { type: string, description: "Primary market category or business type" }
        business_model:
          type: string
          enum: [b2b, b2c, b2b2c, marketplace, enterprise, smb, developer, hybrid, unknown]
        target_customer: { type: string, description: "Core buyer or customer segment" }
        moat: { type: string, description: "Potential competitive advantage or defensibility" }
        strengths:
          type: array
          items: { type: string }
        weaknesses:
          type: array
          items: { type: string }
        security_posture_summary:
          type: string
          description: "Plain-English summary of the company's visible security positioning"
        deployment_model:
          type: string
          description: "Hosted, hybrid, on-prem, self-hosted, or unknown"
        pricing_summary:
          type: string
          description: "Observable pricing or packaging posture"

    discovered_competitor:
      type: object
      required: [name]
      properties:
        name: { type: string }
        mention_context:
          type: array
          description: "Slack snippets or themes explaining why this company was mentioned"
          items: { type: string }
        mention_count:
          type: integer
          description: "Approximate number of mentions or repeated discussions in Slack"
        reason_relevant:
          type: string
          description: "Why this competitor matters to Barndoor.ai"

    security_control_row:
      type: object
      required: [control, category, barndoor_status, competitor_statuses]
      properties:
        control: { type: string, description: "Security control being compared" }
        category: { type: string, description: "Control family, for example Infrastructure Security or Access Control" }
        barndoor_status: { type: string, description: "Barndoor.ai status" }
        competitor_statuses:
          type: array
          items:
            type: object
            required: [competitor_name, status, evidence]
            properties:
              competitor_name: { type: string }
              status: { type: string, description: "confirmed, inferred, not-evidenced, or unknown" }
              evidence: { type: string, description: "Short source note or rationale" }

    platform_comparison_row:
      type: object
      required: [dimension, barndoor_position, competitor_positions]
      properties:
        dimension: { type: string, description: "Dimension being compared" }
        barndoor_position: { type: string, description: "How Barndoor.ai stands on this dimension" }
        competitor_positions:
          type: array
          items:
            type: object
            required: [competitor_name, position, advantage, notes]
            properties:
              competitor_name: { type: string }
              position: { type: string }
              advantage: { type: string, enum: [barndoor, competitor, neutral] }
              notes: { type: string }

    commercial_comparison_row:
      type: object
      required: [dimension, barndoor_position, competitor_positions]
      properties:
        dimension: { type: string, description: "Commercial or GTM comparison dimension" }
        barndoor_position: { type: string }
        competitor_positions:
          type: array
          items:
            type: object
            required: [competitor_name, position, advantage, notes]
            properties:
              competitor_name: { type: string }
              position: { type: string }
              advantage: { type: string, enum: [barndoor, competitor, neutral] }
              notes: { type: string }

    battle_card:
      type: object
      required: [executive_summary, how_to_win, win_themes, major_risks]
      properties:
        executive_summary: { type: string, description: "High-level summary of how Barndoor.ai stacks up" }
        how_to_win:
          type: array
          minItems: 3
          description: "Concrete recommendations for Barndoor.ai to win against the competitive set"
          items:
            type: object
            required: [move, rationale, target_segment, urgency]
            properties:
              move: { type: string }
              rationale: { type: string }
              target_segment: { type: string }
              urgency: { type: string, enum: [immediate, near-term, long-term] }
        win_themes:
          type: array
          items: { type: string }
        major_risks:
          type: array
          items: { type: string }


preCalls:
  - name: computeCutoff
    in: vars
    var: oldestTs
    args:
      days: "{{ .params.lookBackDays }}"
    code: |-
      const days = parseInt(args.days, 10);
      const safeDays = Number.isFinite(days) && days > 0 ? days : 90;
      const nowSec = Math.floor(Date.now() / 1000);
      nowSec - (safeDays * 86400);

  - name: conversations_history
    in: vars
    var: competitorSlackRaw
    args:
      channel: "{{ .params.slackChannelId }}"
      oldest: "{{ .vars.oldestTs }}"
      limit: 50

sessions:
  discover-competitors-from-slack:
    prompt: |-
      You are analyzing Slack history to discover Barndoor.ai competitors.

      Here is the Slack history:
      ```json
      {{ json .vars.competitorSlackRaw }}
      ```

      Barndoor.ai is always the reference company.

      Identify competitor companies mentioned in Slack during this time window.
      Exclude Barndoor.ai itself.
      Merge duplicates, normalize company names, and only keep real competitors relevant to MCP,
      agent infrastructure, AI gateways, agent security, or adjacent platform alternatives.
      Return only the top {{ .params.maxCompetitors }} competitors by combined relevance and mention frequency.

      Map the output exactly to the competitors_from_slack schema.
      For each competitor include:
      - name
      - mention_context
      - mention_count
      - reason_relevant

  research-competitors:
    dependsOn:
      - session: discover-competitors-from-slack
    context: true
    iterateOn: context.competitors_from_slack
    prePrompt: |-
      Research {{ .it.name }} as a competitor to Barndoor.ai.
      Be concise and high-signal. Prefer official company pages, product docs, trust/security pages,
      and one or two highly relevant third-party sources if needed.
      Focus on:
      - company overview
      - product/platform scope
      - target customers
      - moat
      - visible strengths and weaknesses
      - deployment model
      - pricing posture
      - security positioning and public control evidence
    prompt: |-
      Return a company_profile object for {{ .it.name }}.
      Rules:
      - business_model must be one of: b2b, b2c, b2b2c, marketplace, enterprise, smb, developer, hybrid, unknown
      - strengths and weaknesses must be non-empty arrays when evidence exists, otherwise use 1-2 cautious items
      - do not leave business_model, deployment_model, pricing_summary, or security_posture_summary blank
      - if a fact is not clearly evidenced publicly, use "unknown" for enums and concise "Not clearly evidenced publicly." language for strings instead of inventing specifics
    tools:
      - type: internet_search

  synthesize-barndoor-profile:
    dependsOn:
      - session: discover-competitors-from-slack
    context: true
    prompt: |-
      Produce a company_profile object for Barndoor.ai.
      Use Barndoor.ai's official website, product pages, docs, and trust/security pages if available.
      You may use the Slack-discovered competitor context to understand how Barndoor.ai is being compared in-market,
      but do not invent capabilities that are not clearly evidenced.

      Anchor the profile to this baseline unless official public evidence clearly contradicts it:
      - Barndoor.ai is an enterprise platform for MCP, AI agents, and secure tool access
      - it is positioned around AI agent infrastructure, governance, security, and operational control
      - it is not a generic business intelligence, predictive analytics, or broad horizontal AI/ML insights company
      - its buyers are likely technical and business stakeholders evaluating secure enterprise AI adoption

      Focus on Barndoor.ai's actual positioning in MCP, AI agent infrastructure, security, governance,
      and enterprise deployment.

      Rules:
      - Barndoor.ai is the reference company in this report
      - do not describe Barndoor.ai as a generic business intelligence or predictive analytics platform unless explicitly evidenced
      - prefer a specific MCP / AI agent infrastructure framing over "Not clearly evidenced publicly." when the official positioning is directionally clear
      - business_model must be one of: b2b, b2c, b2b2c, marketplace, enterprise, smb, developer, hybrid, unknown
      - deployment_model, pricing_summary, and security_posture_summary must never be blank
      - if public evidence is limited, use "unknown" for enums and cautious, specific MCP/enterprise-security wording for strings instead of generic SaaS boilerplate
      - strengths and weaknesses should be grounded in observable product positioning and public claims
    tools:
      - type: internet_search

  build-competitive-report:
    dependsOn:
      - session: research-competitors
      - session: synthesize-barndoor-profile
    context: true
    prompt: |-
      Using the researched competitor profiles and Barndoor.ai profile in context, produce the full
      competitive report in one pass to minimize runtime.

      Return all of the following fields exactly:
      - security_controls_matrix
      - platform_comparison_matrix
      - commercial_comparison_matrix
      - battle_card

      For security_controls_matrix:
      Include the highest-value controls customers actually care about in enterprise security reviews.
      Prioritize concise, decision-useful evidence over exhaustive coverage.
      Include control families such as:
      - infrastructure security
      - access control
      - secrets management
      - auditability
      - deployment isolation
      - customer data handling
      - change management
      - incident response

      For platform_comparison_matrix:
      Compare across product depth, deployment model, admin controls, observability, integration posture,
      security posture, buyer fit, and operational complexity.
      Every row must include one competitor_positions item for every researched competitor.
      Preserve a consistent competitor order across every row, matching competitors_from_slack.
      Every competitor_positions item must set advantage to exactly one of:
      - barndoor
      - competitor
      - neutral
      Do not leave advantage blank.

      For commercial_comparison_matrix:
      Focus on pricing posture, sales motion, implementation friction, enterprise readiness,
      and buyer objection profile.
      Every row must include one competitor_positions item for every researched competitor.
      Preserve a consistent competitor order across every row, matching competitors_from_slack.
      Every competitor_positions item must set advantage to exactly one of:
      - barndoor
      - competitor
      - neutral
      Do not leave advantage blank.

      For battle_card:
      Write from Barndoor.ai's perspective and return:
      - executive_summary
      - how_to_win
      - win_themes
      - major_risks
      Additional rules:
      - every how_to_win item must set urgency to exactly one of: immediate, near-term, long-term
      - return at least 3 how_to_win items
      - major_risks should be specific to the current competitive set, not generic startup risks
      - executive_summary should explicitly describe where Barndoor wins, where specialists beat it, and what must improve next
      Keep the recommendations concrete and suitable for product marketing, sales, or founder use.

      General comparison rules:
      - for Barndoor.ai, avoid repeating "Not clearly evidenced publicly." unless the field truly cannot be responsibly characterized
      - when public evidence is partial, prefer concise directional language such as "Enterprise-focused MCP / agent infrastructure positioning with limited public detail on X"
      - choose an advantage value for every comparison item based on buyer perception in competitive deals, not just feature count

schema:
  type: object
  required:
    - competitors_from_slack
    - competitor_profiles
    - barndoor_profile
    - security_controls_matrix
    - platform_comparison_matrix
    - commercial_comparison_matrix
    - battle_card
  properties:
    competitors_from_slack:
      x-session: discover-competitors-from-slack
      type: array
      items:
        $ref: "#/components/schemas/discovered_competitor"

    competitor_profiles:
      x-session: research-competitors
      type: array
      items:
        $ref: "#/components/schemas/company_profile"

    barndoor_profile:
      x-session: synthesize-barndoor-profile
      $ref: "#/components/schemas/company_profile"

    security_controls_matrix:
      x-session: build-competitive-report
      type: array
      items:
        $ref: "#/components/schemas/security_control_row"

    platform_comparison_matrix:
      x-session: build-competitive-report
      type: array
      items:
        $ref: "#/components/schemas/platform_comparison_row"

    commercial_comparison_matrix:
      x-session: build-competitive-report
      type: array
      items:
        $ref: "#/components/schemas/commercial_comparison_row"

    battle_card:
      x-session: build-competitive-report
      $ref: "#/components/schemas/battle_card"