Communitygithub.com

Varnan-Tech/opendirectory

Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job descriptions for buyer intent, build a pain map from job listings, extract GTM signals from hiring activity, or prioritize accounts based on hiring data. Trigger when a user says "analyze these job posts", "what pain does this hiring signal", "build a pain map from these listings", "decode this job description", or "score these accounts from their hiring".

opendirectory とは?

opendirectory is a Gemini CLI agent skill that takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job descriptions for buyer intent, build a pain map from job listings, extract GTM signals from hiring activity, or prioritize accounts based on hiring data. Trigger when a user says "analyze these job posts", "what pain does this hiring signal", "build a pain map from these listings", "decode this job description", or "score these accounts from their hiring".

対応~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/linkedin-job-post-to-buyer-pain-map

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

LinkedIn Job Post to Buyer Pain Map

Take LinkedIn job posts. Decode them into a structured buyer pain map with scores, pains, and outreach angles.


Critical rule: Every inferred pain must cite specific language from the job description that supports it. Never hallucinate pains that are not grounded in the text. If a post is too generic to infer pain, say so explicitly and assign a low signal strength score.

Ethical rule: Do not infer personal attributes or protected characteristics about candidates. Focus strictly on company-level operational pain and organizational needs.


Step 1: Setup Check

Confirm required env vars:

echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"

If GEMINI_API_KEY is missing: Stop. Tell the user: "GEMINI_API_KEY is required. Get it at aistudio.google.com. Add it to your .env file."


Step 2: Collect Inputs

The skill needs 3 required inputs. Collect them before proceeding.

2a: Product Brief

Ask: "Describe your product in 2-5 sentences. What do you do, what is your core value prop, and who do you target?"

If the user already included this in their prompt: Extract it. Confirm: "Product brief captured: [summary]."

2b: ICP Description

Ask: "Describe your ideal customer profile in 2-6 bullets: industries, company sizes, roles you sell to, tech stack hints."

If the user already included this in their prompt: Extract it. Confirm: "ICP captured: [summary]."

2c: Hiring Posts

Ask: "Paste the job descriptions you want analyzed. For each post, include the company name, job title, and the full description text. You can paste 1-15 posts."

Accepted formats:

  • Raw pasted text with company name and job title clearly labeled
  • Structured JSON objects with fields: company_name, job_title, location (optional), seniority (optional), team_or_function (optional), job_description_text, job_url (optional)
  • Multiple posts separated by clear delimiters (--- or numbered)

If any field is missing: Infer what you can from the description text. If company_name or job_description_text is missing, ask for it before proceeding.

2d: Optional Inputs

If the user provides any of these, capture them:

  • account_notes: additional context per company (funding, tech stack, known tools, contacts)
  • focus_dimension: "pipeline" (bias toward scoring and prioritization), "positioning" (bias toward messaging angles), or "both" (default)

Step 3: Extract Signals

For each job post, parse and extract:

  1. Team / function: Which team is this role on? (GTM, Product, Infra, Data, RevOps, CS, Engineering, etc.)
  2. Seniority: IC, Senior IC, Manager, Director, VP, C-level
  3. Responsibilities emphasis: Classify the dominant mode:
    • Fire-fighting: "stabilize", "fix", "reduce downtime", "unblock"
    • Building new: "build from scratch", "0→1", "greenfield", "design and implement"
    • Optimizing: "scale", "optimize", "improve efficiency", "automate"
    • Replacing: "replace legacy", "migrate from", "modernize"
  4. Requirement language: Note keywords that signal intent: "first X hire", "critical role", "immediate", "must have"
  5. Tool / stack hints: Any references to specific tools, platforms, or technology categories that overlap with the user's product area

Group by company. If multiple posts come from the same company, group their signals together.

State: "Extracted signals from X posts across Y companies."


Step 4: Score with the LLM

Read references/scoring-rubric.md for the full scoring model.

Build the LLM request:

cat > /tmp/pain-map-score-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a GTM analyst who specializes in decoding hiring signals into buyer intent. For each account provided, you will score three dimensions and infer company context. Rules: (1) Every score must include a one-sentence plain-text explanation. (2) signal_strength measures how many and how specific the hiring signals are relative to the user's product area. (3) urgency measures how time-sensitive the hiring need appears. (4) icp_fit measures how closely the company matches the user's ICP description. (5) Each score is 1-10. (6) overall_score = round((0.4 * signal_strength + 0.3 * urgency + 0.3 * icp_fit) * 10). (7) Infer buy_vs_build from job language. Use EXACTLY one of these labels: 'Leaning build', 'Leaning buy', 'Hybrid (buy-and-build)', 'Unknown'. (8) Infer stage_guess from company clues: funding stage, employee count, company type. (9) Output valid JSON only."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "SCORING_CONTEXT_HERE"
    }]
  }],
  "generationConfig": {
    "temperature": 0.2,
    "maxOutputTokens": 4096
  }
}
ENDJSON
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/pain-map-score-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

Replace SCORING_CONTEXT_HERE with:

  • The product brief and ICP description from Step 2
  • The extracted signals per company from Step 3
  • The scoring rubric rules from references/scoring-rubric.md
  • Instructions to output JSON with: company_name, headline, overall_score, score_breakdown (signal_strength, urgency, icp_fit — each with score and explanation), stage_guess, buy_vs_build_guess

Step 5: Build Pain Map

For each account, use the extracted signals and LLM scoring context to build the buyer pain map.

cat > /tmp/pain-map-analysis-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a B2B pain analyst who reads job descriptions and identifies the operational pains a company is experiencing. Rules: (1) Every pain must have a short label, a 1-3 sentence description, and specific phrases quoted from the job post as supporting evidence. (2) Classify pains as primary (directly relevant to the user's product) or secondary (real pain but tangential to the product). (3) If a post is too generic to infer specific pain, state that explicitly — do not hallucinate. (4) For each account, also generate 1-3 recommended outreach angles. Each angle has: angle_name (short), narrative (1-2 sentences on how to lead), and talk_track_bullets (2-4 concrete talking points). (5) Outreach angles must reference specific pains and evidence, not generic value props. No banned words: synergy, leverage, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, seamless, robust, comprehensive, revolutionize, transform, streamline. (6) Output valid JSON only."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "ANALYSIS_CONTEXT_HERE"
    }]
  }],
  "generationConfig": {
    "temperature": 0.4,
    "maxOutputTokens": 8192
  }
}
ENDJSON
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/pain-map-analysis-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

Replace ANALYSIS_CONTEXT_HERE with:

  • The product brief and ICP description
  • Each company's job posts (full text)
  • The scores and context from Step 4
  • Account notes if provided
  • The focus_dimension preference (pipeline / positioning / both)
  • Instructions to output per-account: buyer_pain_map (primary_pains, secondary_pains) and recommended_outreach_angles

Read references/examples.md to calibrate the expected output quality and depth.


Step 6: Build Handoff Object

For each account, generate a structured handoff block that outreach-sequence-builder can consume directly:

handoff:
  for_outreach_sequence_builder:
    account_summary: 2-3 sentence recap of the company's situation and hiring context
    key_pain: The single most actionable pain in one sentence
    suggested_personas: 2-4 job titles of the people most likely to own this pain
    tone: One sentence describing the recommended outreach tone

The handoff must be concrete enough that someone could paste it into outreach-sequence-builder's prompt and get a usable sequence without re-researching the account.


Step 7: Self-QA

Run every check and fix violations before presenting:

  • Every inferred pain cites at least one specific phrase from the job description
  • No pains hallucinated for generic/low-signal posts (check posts with signal_strength ≤ 3)
  • All three scores (signal_strength, urgency, icp_fit) have a one-sentence explanation
  • Overall score matches the formula: round((0.4 × signal + 0.3 × urgency + 0.3 × icp_fit) × 10)
  • Buy-vs-build label is one of: "Leaning build", "Leaning buy", "Hybrid (buy-and-build)", "Unknown"
  • No banned words in outreach angles: synergy, leverage, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, seamless, robust, comprehensive, revolutionize, transform, streamline
  • Each outreach angle has 2-4 talk track bullets, not generic value statements
  • Out-of-ICP accounts are flagged with a clear recommendation to deprioritize
  • Handoff objects are complete with all 4 fields (account_summary, key_pain, suggested_personas, tone)
  • No personal attributes or protected characteristics inferred about candidates
  • Posts grouped by company when multiple posts are from the same company

Fix any violation before presenting.


Step 8: Output and Save

Human-readable output

Present the full analysis in this format:

## Buyer Pain Map — [YYYY-MM-DD]

**Product:** [product name from brief]
**Posts analyzed:** X posts across Y companies
**Focus:** [pipeline / positioning / both]

---

### [Company Name] — Score: [N]/100

**Headline:** [one-line summary of what the hiring reveals]

| Dimension | Score | Explanation |
|-----------|-------|-------------|
| Signal Strength | N/10 | [one sentence] |
| Urgency | N/10 | [one sentence] |
| ICP Fit | N/10 | [one sentence] |

**Stage:** [stage guess] | **Buy-vs-Build:** [posture label]

#### Primary Pains
- **[Pain label]:** [1-3 sentence description]
  - Evidence: "[quoted phrase from job post]"

#### Secondary Pains
- **[Pain label]:** [1-3 sentence description]
  - Evidence: "[quoted phrase from job post]"

#### Recommended Outreach Angles
1. **[Angle name]:** [narrative]
   - [bullet 1]
   - [bullet 2]
   - [bullet 3]

#### Handoff → outreach-sequence-builder
> **Summary:** [2-3 sentences]
> **Key pain:** [one sentence]
> **Suggested personas:** [list]
> **Tone:** [one sentence]

---

[repeat for each company, ordered by overall_score descending]

Save to file

mkdir -p docs/pain-maps
OUTFILE="docs/pain-maps/$(date +%Y-%m-%d).md"
cat > "$OUTFILE" << 'EOF'
REPORT_CONTENT_HERE
EOF
echo "Pain map saved to $OUTFILE"

If multiple companies are analyzed, also save individual files using slugified company names (lowercase, replace spaces and special characters with hyphens, strip trailing hyphens):

e.g., "ACME, Inc." → acme-inc.md, "CoolStartup Inc" → coolstartup-inc.md

SLUG=$(echo "COMPANY_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/-$//')
cat > "docs/pain-maps/${SLUG}.md" << 'EOF'
INDIVIDUAL_ACCOUNT_CONTENT_HERE
EOF

When to Use

  • You have 1-15 pasted job descriptions and want to know what pain each company is feeling
  • You are planning account-based outreach and need structured pain analysis before writing sequences
  • You want to prioritize which hiring-signal accounts to pursue first
  • A PMM wants real-world pain language from job posts to refine positioning

When NOT to Use

  • You need to find companies that are hiring (use linkedin-hiring-intent-scanner or yc-intent-radar-skill instead)
  • You need to write outreach messages (use outreach-sequence-builder instead — feed it the handoff from this skill)
  • You want to monitor a platform for signals over time (use reddit-icp-monitor or twitter-GTM-find-skill instead)
  • You need contact information or email enrichment (this skill does not provide that)

Plays Well With

  • outreach-sequence-builder: Pass the handoff.for_outreach_sequence_builder block directly as context when building a sequence.
  • noise-to-linkedin-carousel: Use the primary pains and evidence quotes as source material for a carousel about buyer problems.
  • reddit-icp-monitor: Cross-reference pain themes from job posts with pain themes showing up in Reddit discussions.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

関連スキル