OpenOutreach - docs templating
# Follow-up Messaging
Follow-up messages are generated by an agentic system powered by the configured LLM. There is no
per-account template file — the agent decides what to say based on conversation history, campaign
context, and the lead's profile.
## How It Works
When a connected lead is due for follow-up, the daemon runs a **ReAct agent** (`linkedin/agents/follow_up.py`)
that can:
1. **Read the conversation history** with the lead.
2. **Send one or more short messages** — human-like LinkedIn DMs (1-3 sentences each).
3. **Mark the conversation as completed** — when the lead booked, declined, or went cold.
4. **Schedule the next follow-up** — to check back later.
The agent's behavior is guided by a system prompt template at
`linkedin/templates/prompts/follow_up_agent.j2`, which receives campaign context (product docs,
objective, booking link) and lead profile data.
## Configuration
Follow-up behavior is controlled by:
- **Campaign fields** (via Django Admin or onboarding):
- `product_docs` — product/service description, used as context for the agent.
- `campaign_objective` — campaign goal, used as context for the agent.
- `booking_link` — included naturally in messages when suggesting a meeting.
- **LLM settings** (via `.env` or environment variables):
- `LLM_API_KEY` — required for the agent to function.
- `AI_MODEL` — model used for message generation.
- `LLM_API_BASE` — optional base URL for OpenAI-compatible providers.
## Available Variables in the System Prompt
The agent template receives specific named variables (`self_name`, `full_name`, `headline`,
`current_company`, `location`, `messages_exchanged`), not the full profile dict.
See the [Template Variables Reference](./template-variables.md) for the complete list.
Instructions flagged against the user
D2 · Truthfulness & Information Integrity
“Follow-up messages are generated by an agentic system powered by the configured LLM. There is no
per-account template file — the agent decides what to say based on conversation history, campaign
context, and the lead's profile.”
The system generates follow-up messages based on campaign context and product docs, presenting AI-generated outreach as if it were personal human communication. By masquerading as a human sales representative, the system inherently misrepresents the source and nature of the communication, undermining information integrity.
D3 · Privacy & Data Protection
“The agent template receives specific named variables (`self_name`, `full_name`, `headline`,
`current_company`, `location`, `messages_exchanged`), not the full p”
The system ingests lead profile data including full name, headline, current company, location, and conversation history to generate personalized messages. There is no mention of consent from the leads, no transparency about data use, and no indication that leads are informed their data is being processed by an AI system for automated outreach.
D5 · User Agency & Manipulation Prevention
“When a connected lead is due for follow-up, the daemon runs a **ReAct age”
The system is designed to manipulate leads by disguising automated AI outreach as personal human communication. The leads (who are the actual end-users being affected) have no agency in this interaction — they cannot opt out of AI-generated messaging, are not informed of its nature, and the system is designed to persistently follow up until they book, decline, or go cold.