The Agentic Sales & Marketing system has two configuration surfaces: the LLM connection inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/vrashmanyu605-eng/Agentic_Sales-Markerting/llms.txt
Use this file to discover all available pages before exploring further.
llm.py, which controls the model and inference settings, and the initial_state dictionary in main.py, which defines your company profile, campaign inputs, and runtime controls. This page documents every field in both.
LLM configuration
The LLM client is defined inllm.py using langchain_openai.ChatOpenAI pointed at a locally running LM Studio server. All agents in the pipeline share this single client instance.
The model name as it appears in LM Studio. This must match the model you have loaded and serving. Change this value if you want to use a different locally hosted model.
The base URL of the LM Studio local server. LM Studio exposes an OpenAI-compatible API at this address by default. Update this if you have configured LM Studio to use a different port.
A placeholder API key required by the
ChatOpenAI client. LM Studio does not validate this value, so "lm-studio" is used as a convention. Do not change it unless your LM Studio configuration requires a specific key.Controls the randomness of the model’s outputs.
0.3 produces focused, consistent responses suitable for structured sales content. Increase toward 1.0 for more creative variation in outreach copy.When
true, the LLM streams token-by-token responses. This does not affect the final output but allows the terminal to print content progressively during long agent runs.Workflow state
Theinitial_state dictionary in main.py seeds the SalesMarketingState TypedDict that flows through the LangGraph pipeline. Every field listed here maps directly to a key in graph/state.py.
Task and identity
A plain-text description of the workflow objective. Agents use this as the top-level instruction when constructing their prompts. Changing this value changes what the supervisor and agents understand as the goal.
Your company name. Set to
null in initial_state because the discovery agent populates active_lead for each lead. If you want to hard-code a specific company context, set this field.The industry vertical the discovery agent searches for leads in. For example:
"IT Services / AI Automation", "FinTech", or "Healthcare SaaS". This is the primary filter the discovery agent uses when running web searches.Your name or the name of the person sending outreach. The outreach generation agent includes this in email signatures, LinkedIn messages, and call scripts.
A generic label for the lead used in early pipeline stages before the discovery agent identifies real company names. The lead research agent replaces this with the actual company name from
active_lead.Input data
The full text content of your company’s credentials or sales deck PDF, extracted by
src.services.pdf_parsing.extract_pdf_text. The proposal generation agent draws from this to write proposals in your company’s voice and with your actual services and differentiators.The full text content of
jd.txt, your client requirements document. The discovery agent uses this to identify matching companies. The ICP matching and proposal generation agents also reference it when evaluating fit and scoping proposals.A description of your known competitors in the target market. The competitor analysis agent uses this as a baseline when mapping the competitive landscape for each lead. You can provide a simple label like
"Standard AI/ML Services Competitors" or a detailed breakdown of specific vendors.Business profile
A comma-separated list of your core service offerings. Used by the outreach generation and proposal generation agents to position your capabilities against the lead’s needs.
A longer description of your services and delivery approach. Used to add substance to proposals and outreach content beyond the high-level
company_services list.A description of your ideal customer. The ICP matching agent compares each discovered lead against this profile to produce an
icp_analysis score and recommendation. Be specific: include company size, industry signals, technology investments, and pain points.A brief summary of your pricing range or model. For example:
"Projects range $10k-$50k." Used by the proposal generation agent to include indicative pricing in proposals.Additional pricing context for the proposal agent, such as how pricing is structured. For example:
"Custom pricing based on scope." Complements pricing_information in proposal documents.A newline-separated list of past project summaries or outcomes. The proposal generation agent includes relevant case studies in proposals to demonstrate proven delivery. Each entry should be one or two sentences describing the engagement and result.
A transcript from a prior discovery or sales call with the prospect. At the start of a fresh workflow this is a placeholder. If you have an existing call transcript, paste it here to give the outreach and proposal agents richer context.
Google Sheets CRM
The Google Sheets spreadsheet ID from the sheet URL. For example, in the URL
https://docs.google.com/spreadsheets/d/1MsG4jkVacHwuw2cxTQ_Vt5cW5qKoBgGJH1IqfDCdRto/edit, the ID is 1MsG4jkVacHwuw2cxTQ_Vt5cW5qKoBgGJH1IqfDCdRto. Replace this with your own sheet’s ID.The A1 notation range where the CRM update agent starts appending data. The agent uses the
append method, so existing rows are preserved and new rows are added below. Change the sheet name if your sheet tab is named differently.Workflow control
The initial stage label for the workflow. Set to
"start" when beginning a fresh run. The supervisor and agents update this field as the pipeline progresses. Do not change this value manually.Whether the workflow has finished processing all leads. The supervisor sets this to
true when the discovered_leads queue is exhausted and it routes to END. Used to detect successful completion in the run loop.An integer from
0 to 100 representing overall pipeline completion. Updated by agents as they complete. You can use this value to drive progress indicators if you extend main.py with a UI or logging layer.Input files
jd.txt — Client requirements
jd.txt is a plain-text file in the project root that describes what kind of partner or solution the target client is looking for. Write it from the perspective of the prospect’s requirements, not your company’s pitch. The discovery agent uses it to find relevant leads, and the ICP matching and proposal agents reference it when evaluating fit.
There is no required structure — plain prose works. A typical jd.txt might look like:
Sales deck PDF
Place your company’s credentials or capabilities deck PDF in the project root. Updatesales_deck_path in main.py to match the file name:
extract_pdf_text utility (defined in src/services/pdf_parsing.py) uses PyMuPDF (import fitz) to open the PDF, iterate over every page, and concatenate the extracted text into a single string stored in sales_deck_text. The proposal generation agent uses this text to write proposals that reflect your actual services, delivery methodology, and credentials rather than generic content.