Solution Page
Discover competitors from Slack, research the market live, and generate Barndoor-centric security and platform battle cards.
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
Identify relevant competitors from Slack and connected context.
Research the market and security posture using live external sources.
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"