post-to-linkedin Skill
name: post-to-linkedin description: Generate and post business updates to LinkedIn for sales generation. Creates professional posts about projects, achievements, industry insights, client success stories, and service offerings. Automatically drafts content using templates, applies brand voice guidelines, adds relevant hashtags, and creates approval requests. Use when user mentions "post to linkedin", "share on linkedin", "create linkedin post", "social media update", "generate business post", "linkedin content", or when scheduling automatic business updates for lead generation. user-invocable: true allowed-tools: [Read, Write, Bash, Glob, Grep] context: fork
Purpose
Automatically generate professional LinkedIn posts for business development and lead generation. This skill creates engaging content about your work, achievements, and expertise while maintaining brand consistency and requiring human approval before publishing.
When to Use This Skill
This skill activates when:
- •User asks to "post to LinkedIn" or "share on LinkedIn"
- •Creating social media content for business updates
- •Generating posts about completed projects or milestones
- •Scheduling regular LinkedIn content
- •Promoting services or achievements
- •Sharing industry insights or tips
- •Building thought leadership presence
Workflow Overview
Business_Goals.md → Content Generation → Template Selection
↓ ↓
Recent Achievements ← Content Draft ← Brand Guidelines
↓ ↓
Hashtag Strategy → Final Post → Approval Request
↓ ↓
Human Approval → LinkedIn Publishing → Dashboard Log
Step-by-Step Process
Phase 1: Content Discovery (Gather Information)
Objective: Identify content-worthy activities and achievements.
- •
Read Business_Goals.md
bash# Location: Vault/Business_Goals.md # Look for: Active projects, recent milestones, Q1 objectives
- •Identify current business priorities
- •Check active projects and their status
- •Review key metrics and achievements
- •Note any specific content themes
- •
Scan Recent Completed Tasks
bash# Location: Vault/Done/ # Pattern: Files from last 7 days
- •Look for completed project deliverables
- •Identify client wins or successful outcomes
- •Find interesting technical challenges solved
- •Note any learning moments or insights gained
- •
Check for Explicit Content Requests
bash# Location: Vault/Needs_Action/ # Pattern: Files requesting LinkedIn posts
- •Process any direct requests to create LinkedIn content
- •Extract specific topics or angles requested
- •Note any deadlines or timing preferences
Output: Content theme and key points identified
Phase 2: Content Generation (Create Draft)
Objective: Generate engaging, professional post content.
- •
Select Appropriate Template
Refer to post-templates.md and choose based on content type:
- •Project Milestone: For completed deliverables, launches, achievements
- •Client Success Story: For positive outcomes, testimonials, case studies
- •Industry Insight/Tip: For sharing expertise, lessons learned, advice
- •Service Offering: For highlighting capabilities, solutions, specializations
- •Behind-the-Scenes: For process insights, tools, methodologies
- •
Apply Content Guidelines
Follow content-guidelines.md:
- •Brand Voice: Professional, approachable, expert (not arrogant)
- •Length: 150-300 words (optimal for LinkedIn engagement)
- •Structure: Hook → Value → Call-to-Action
- •Tone: Helpful, insightful, authentic
- •Emoji Usage: Minimal and professional (1-2 max)
- •
Draft Post Content
Template structure:
markdown[Hook - attention-grabbing opening] [Context - what happened / why it matters] [Value - insight, lesson, or benefit] [Call-to-Action - invite engagement] #hashtag1 #hashtag2 #hashtag3
- •
Add Relevant Hashtags
Use hashtag-strategy.md:
- •Select 3-5 relevant hashtags
- •Mix: 2 industry-specific + 1 broad professional + 1-2 trending
- •Examples: #SoftwareDevelopment #AI #ProductivityHacks #TechLeadership
Output: Complete drafted LinkedIn post with hashtags
Phase 3: Quality Review (Validate Content)
Objective: Ensure post meets quality standards before approval request.
- •
Check Against Company_Handbook.md
bash# Location: Vault/Company_Handbook.md # Section: Social Media Rules (if exists)
- •Verify compliance with brand guidelines
- •Check for prohibited topics
- •Confirm tone alignment
- •Validate professional standards
- •
Content Quality Checklist
- • Length: 150-300 words
- • Clear value proposition (insight/lesson/benefit)
- • Professional tone maintained
- • No typos or grammatical errors
- • Call-to-action included
- • Hashtags relevant (3-5 total)
- • No controversial or prohibited topics
- • Authentic and genuine voice
- •
Metadata Validation
- •Platform: LinkedIn
- •Post type: Text update (image/video if specified)
- •Timing: Optimal posting time if scheduling
- •Target audience: Professional network
Output: Validated post ready for approval
Phase 4: Approval Request Creation
Objective: Create formal approval request for human review.
- •
Integrate with handle-approval Skill
This skill MUST use the
handle-approvalskill (from Branch 1) to create approval requests.Reference: handle-approval thresholds
- •
Create Approval File
Use approval-template.md as base:
markdown--- type: approval_request action: social_media_post platform: linkedin created: [timestamp ISO 8601] expires: [72 hours from creation] priority: normal status: pending --- ## Action Summary Publish LinkedIn post: [One-line description of content] ## Post Content [Full drafted post with hashtags] ## Metadata - **Platform:** LinkedIn - **Post Type:** Text update - **Word Count:** [X words] - **Hashtags:** #tag1 #tag2 #tag3 - **Character Count:** [X/3000] ## Context & Rationale - **Content Source:** [Project milestone / Achievement / Insight] - **Business Goal:** [Lead generation / Thought leadership / Engagement] - **Target Audience:** [Potential clients / Industry peers / General professional network] ## Risks & Considerations - Risk: Low (standard business update) - Compliance: Follows brand guidelines - Timing: [Optimal posting window if scheduled] ## To Approve Move this file to `/Approved` folder. ## To Reject Move this file to `/Rejected` folder and add reason at bottom. --- ## Human Edits (Optional) [Space for human to edit post content before approval]
- •
File Naming Convention
codeAPPROVAL_LINKEDIN_[short-description]_[YYYY-MM-DD].md Examples: - APPROVAL_LINKEDIN_ProjectAlphaMilestone_2026-01-11.md - APPROVAL_LINKEDIN_IndustryInsightAI_2026-01-11.md - APPROVAL_LINKEDIN_ClientSuccessStory_2026-01-11.md
- •
Save to Pending Approval Folder
bash# Location: Vault/Pending_Approval/ # File: APPROVAL_LINKEDIN_[description]_[date].md
Output: Approval request file created in /Pending_Approval
Phase 5: Dashboard Logging
Objective: Maintain audit trail and activity log.
Update Vault/Dashboard.md with structured entry:
## Recent Activity - [YYYY-MM-DD HH:MM:SS] **LinkedIn Post Created** - Topic: [Brief description] - Template: [Template type used] - Word Count: [X words] - Status: Pending Approval - Approval File: APPROVAL_LINKEDIN_[description]_[date].md - Action: Human review required in /Pending_Approval
Output: Dashboard updated with pending post status
Phase 6: Post-Approval Execution (After Human Approval)
Note: This phase executes ONLY after human moves approval file to /Approved folder.
- •
Detect Approved Post
bash# Monitor: Vault/Approved/ # Pattern: APPROVAL_LINKEDIN_*.md
- •
Execute LinkedIn Publishing
Call LinkedIn API helper script:
bashpython scripts/linkedin_api_helper.py --approval-file "Vault/Approved/APPROVAL_LINKEDIN_xxx.md"
The script (located at
.claude/skills/post-to-linkedin/scripts/linkedin_api_helper.py) will:- •Extract post content from approval file
- •Authenticate with LinkedIn API
- •Publish the post
- •Return success/failure status
- •
Handle Execution Results
If Success:
- •Move approval file from
/Approvedto/Done - •Update Dashboard with success log
- •Record LinkedIn post URL (if available)
If Failure:
- •Keep file in
/Approved - •Log error to Dashboard
- •Create alert in /Needs_Action for troubleshooting
- •Move approval file from
- •
Final Dashboard Update
markdown- [YYYY-MM-DD HH:MM:SS] **LinkedIn Post Published** ✓ - Topic: [Brief description] - Post URL: [LinkedIn post URL] - Engagement: [Track later if analytics available] - Status: Complete
Output: Post published to LinkedIn and logged
Integration with Other Skills
Required Dependencies
- •handle-approval Skill (Branch 1)
- •MUST be used for all approval request creation
- •Enforces security thresholds
- •Manages expiration policies
Optional Integrations
- •
create-plan Skill (Branch 1)
- •Use for content calendar planning
- •Break down multi-post campaigns
- •
process-tasks Skill (Bronze)
- •Process explicit LinkedIn post requests from /Needs_Action
Security & Safety Protocols
Never Auto-Approve
- •All LinkedIn posts REQUIRE human approval (zero exceptions)
- •Social media is public and permanent
- •Brand reputation risk is HIGH
- •Approval expiration: 72 hours (3 days)
Content Validation Required
Before creating approval request:
- • No confidential information disclosed
- • No client names without permission
- • No controversial or political content
- • No negative comments about competitors
- • Professional language throughout
- • Aligned with brand voice guidelines
Rate Limiting
- •Maximum Frequency: 3 posts per week (per Business_Goals.md)
- •Minimum Spacing: 24 hours between posts
- •Optimal Timing: Tuesday-Thursday, 9-11 AM or 4-6 PM (business hours)
Error Handling
Common Issues
- •
No Recent Content Found
- •Action: Suggest creating general industry insight post
- •Template: Use "Industry Insight/Tip" template
- •Source: Company_Handbook expertise areas
- •
Business_Goals.md Missing
- •Action: Alert user to create file
- •Fallback: Use Company_Handbook for content themes
- •
LinkedIn API Authentication Failure
- •Action: Log error to Dashboard
- •Alert: Create troubleshooting task in /Needs_Action
- •Reference: Setup guide for re-authentication
- •
Approval File Format Invalid
- •Action: Validate YAML frontmatter
- •Fix: Auto-correct common formatting issues
- •Log: Warning in Dashboard if corrections made
Testing & Validation
Dry-Run Mode
When testing, use the --dry-run flag in linkedin_api_helper.py:
python scripts/linkedin_api_helper.py --dry-run --approval-file "path/to/file.md"
This will:
- •Parse the approval file
- •Validate content
- •Show what would be posted
- •NOT actually publish to LinkedIn
Success Criteria
- • Post content generated successfully
- • Template selection appropriate
- • Hashtags relevant and not excessive
- • Approval request created in correct format
- • Dashboard logging complete
- • Content passes quality checklist
Trigger Phrases for Auto-Activation
This skill should activate when user says:
- •"post to linkedin"
- •"share on linkedin"
- •"create linkedin post"
- •"generate linkedin content"
- •"social media update"
- •"publish to linkedin"
- •"draft linkedin post"
- •"schedule linkedin post"
- •"create business post"
- •"share [project/achievement] on linkedin"
Reference Files
- •Post Templates - 5+ template examples with structure
- •Content Guidelines - Brand voice, tone, length standards
- •Hashtag Strategy - Industry tags, trending topics
Examples
Example 1: Project Milestone Post
User: "Create a LinkedIn post about completing Project Alpha" Skill Actions: 1. Reads Business_Goals.md → finds Project Alpha 2. Checks Done/ folder → finds completed tasks 3. Selects "Project Milestone" template 4. Generates draft with achievement highlights 5. Adds hashtags: #ProjectManagement #SoftwareDevelopment #AgileDelivery 6. Creates APPROVAL_LINKEDIN_ProjectAlphaCompletion_2026-01-11.md 7. Logs to Dashboard 8. Waits for human approval
Example 2: Industry Insight Post
User: "Share a tip about AI automation on LinkedIn" Skill Actions: 1. Selects "Industry Insight/Tip" template 2. Crafts post about AI automation best practices 3. Adds hashtags: #ArtificialIntelligence #Automation #TechTrends 4. Creates approval request 5. Human reviews and approves 6. Posts to LinkedIn via API 7. Logs success to Dashboard
Notes
- •LinkedIn character limit: 3,000 characters (optimal: 150-300 words)
- •Include line breaks for readability (every 2-3 sentences)
- •Emoji usage: 1-2 max, professional context only
- •Links: Include if relevant (LinkedIn auto-generates preview)
- •Images/Video: Supported but requires additional configuration
Skill Version: 1.0 Created: 2026-01-11 Branch: feat/linkedin-automation Dependencies: handle-approval (Branch 1)