LinkedIn Outreach Message Generation Mode and Personalization in Career-Ops
The contacto mode generates personalized LinkedIn outreach messages using a rigid three-sentence template that shifts emphasis based on whether you are contacting a recruiter, hiring manager, peer, or interviewer, while enforcing a strict 300-character limit and stripping corporate jargon.
The contacto mode (also referred to as the LinkedIn Power Move) is a specialized workflow in the santifer/career-ops repository that automates the creation of concise, highly targeted outreach messages. This mode analyzes the target contact type and dynamically adjusts the message content to maximize relevance and response rates, all while maintaining the conversational constraints of LinkedIn's connection request interface.
How the Contacto Mode Works
The LinkedIn outreach message generation mode follows a structured execution pipeline defined in modes/contacto.md. When invoked, the system executes a five-step process to produce the final message.
Target Discovery and Classification
First, the mode uses WebSearch functionality to identify the most relevant contacts at a target company, including hiring managers, recruiters, peers, or potential interviewers. The system then classifies the contact into one of four specific types, either by asking the candidate directly or inferring from the available context.
Message Generation Framework
Once the primary target is selected, the mode applies a three-sentence template that remains structurally consistent across all contact types. According to lines 19-38 of modes/contacto.md, the template enforces:
- A Fit/Hook/Interest opening sentence
- A Proof sentence with quantifiable achievements
- A Call-to-Action (CTA) sentence
The specific emphasis of each sentence shifts based on the contact type, but the overall skeleton remains identical.
Localization and Constraints
The mode enforces a hard limit of 300 characters (line 48 of contacto.md) to comply with LinkedIn's connection request constraints. It also strips corporate buzzwords, removes phrases like "I'm passionate about...", and excludes phone numbers (lines 49-52). The system supports both English (default) and Spanish outputs (lines 41-44), with extensibility for additional locales.
Personalization Logic by Contact Type
The personalization engine in modes/contacto.md applies distinct strategies for each of the four contact categories:
Recruiter
- Sentence 1 (Fit): Direct alignment with the role, citing specific experience, location, and availability
- Sentence 2 (Proof): Quantified evidence answering typical screening questions (e.g., "5 years building ML pipelines, Berlin, available immediately")
- Sentence 3 (CTA): "Happy to share my CV if this aligns with what you're looking for"
Hiring Manager
- Sentence 1 (Hook): Specific reference to a challenge the team faces, extracted from the job description, company blog, or recent news
- Sentence 2 (Proof): The candidate's biggest quantifiable achievement that solves a similar problem
- Sentence 3 (CTA): "Would love to hear how your team is approaching
{specific challenge}"
Peer (Referral)
- Sentence 1 (Interest): Genuine reference to the peer's work (blog post, talk, open-source contribution, or publication)
- Sentence 2 (Connection): What the candidate is doing in the same space, explicitly avoiding job pitches
- Sentence 3 (CTA): "I've been working on similar problems at
{company}, would love to hear your take on{topic}"
Interviewer (Pre-Interview)
- Sentence 1 (Research): Concrete reference to the interviewer's work or career path
- Sentence 2 (Context): Light link to the candidate's experience in that specific area
- Sentence 3 (CTA): "Looking forward to our conversation on
{date}"
If the primary contact is unavailable, the mode can suggest secondary contacts with justification (line 45 of contacto.md).
Usage Examples
Command Line Invocation
Execute the mode from your terminal to generate a message for a specific company:
career-ops contacto AcmeCorp
Sample Output (Recruiter target, English):
5 years building ML pipelines, Berlin, available immediately. Happy to share my CV if this aligns with what you're looking for.
Programmatic Integration
You can invoke the mode programmatically within Node.js applications:
import { execSync } from 'child_process';
// Generate LinkedIn outreach message
const message = execSync('career-ops contacto AcmeCorp', { encoding: 'utf8' });
console.log('Generated message:', message);
Customizing for New Locales
To add support for a new language, create a localized template file (e.g., modes/contacto.es.md for Spanish) and modify the loader logic in modes/contacto.md:
if (userLocale === 'es') {
template = loadTemplate('contacto.es.md');
}
System Integration and Architecture
The contacto mode is registered as a core skill in the Career-Ops ecosystem. It appears in the skill manifest at .agents/skills/career-ops/SKILL.md and is documented as a system-layer feature in DATA_CONTRACT.md.
Higher-level workflows such as auto-pipeline, apply, and followup (defined in modes/followup.md) reuse the same three-sentence framework to ensure consistent tone across all outreach activities. This modular design allows the personalization logic to remain centralized while supporting multiple entry points in the job application workflow.
Summary
- The
contactomode generates LinkedIn outreach messages using a strict three-sentence template that adapts emphasis based on four contact types: recruiter, hiring manager, peer, and interviewer. - All messages are constrained to 300 characters and automatically strip corporate jargon and phone numbers.
- The mode supports English and Spanish localization out of the box, with extensible architecture for additional languages.
- Integration points include the CLI command
career-ops contacto {company}, programmatic execution via Node.js, and reuse by higher-level modes likefollowupandapply. - Source configuration and templates reside in
modes/contacto.md, with system registration in.agents/skills/career-ops/SKILL.md.
Frequently Asked Questions
What is the maximum length for messages generated by the contacto mode?
The mode enforces a strict 300-character limit (line 48 of modes/contacto.md) to ensure compatibility with LinkedIn's connection request message field. This constraint forces concise, high-impact language and prevents the inclusion of unnecessary contact information like phone numbers.
How does the contacto mode handle different languages?
The mode supports English as the default and Spanish through localized template files (lines 41-44 of modes/contacto.md). To add a new language, you create a localized markdown file (e.g., contacto.fr.md for French) and extend the conditional loader logic to select the appropriate template based on the user's locale setting.
Can I customize the message templates for specific industries?
While the base template structure remains fixed (three sentences), you can customize the content for specific industries by modifying modes/contacto.md. The personalization logic allows you to adjust the "Proof" sentence content and the specific challenges referenced in the "Hook" sentence to align with industry-specific terminology and priorities.
How does the contacto mode integrate with other Career-Ops workflows?
The mode is designed as a reusable component that higher-level workflows invoke via the CLI or programmatic API. According to modes/followup.md, the apply, followup, and auto-pipeline modes all leverage the same three-sentence framework to maintain tone consistency across different stages of the job application process, ensuring that outreach messages remain coherent regardless of which automation entry point triggers them.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →