← Agent Vente

Agent Vente — Methodology

Charles Dana · Monce AI · April 2026

1. The Dana Theorem

Any indicator function over a finite discrete domain can be encoded as a SAT instance in polynomial time. Decision tree bucketing reduces this to linear time.

f(x) = ∑p⊆{1,...,n} ap · ∏i∈p xi

Snake proves by construction that you don't need to solve SAT to use SAT for classification. The formula is built directly from the data in polynomial time, then evaluated (also polynomial) at inference. The NP-hardness of SAT applies to finding satisfying assignments for arbitrary formulas — Snake never does that.

Complexity

Training: O(L × n × m × b)

Where L = layers, n = samples, m = features, b = bucket size. Linear in samples and features, quadratic in bucket size.

2. Five Independent Classifiers

ModelClassesBest AccuracyBest Iter
scoringA (chaud) / B (tiede) / C (froid) / D (perdu)93.3%7
objectionPrix / Delai / Qualite / Relation / Inertie / Concurrent100.0%2
actionRelancer / Attendre / Contre-offre / Escalade / Abandonner93.3%7
canalEmail / Telephone / Visite / LinkedIn95.6%9
timingImmediat / Sous_3j / Sous_7j / Attendre_signal95.6%9

Each model is a standalone Snake SAT classifier trained on 20 flattened features extracted from CRM data via Claude Haiku. Models are independent — they can be retrained individually without affecting others.

3. The Rare Class Problem

Attendre (action model): 0% across 10 iterations

Only 1.5% of synthetic data qualifies for the Attendre label. The label function requires a narrow conjunction: tone == "negatif" AND jours < 14 AND scoring == C. With 800-1700 samples, this produces 2-9 test examples — not enough for Snake to learn a generalizable pattern.

Visite (canal model): 0-50% on n=1-5

Visite requires tone == "positif" AND has_visite AND jours < 10. Same problem: too rare in random generation.

Proposed fix: Merge Attendre into a "Hold" superclass with Attendre_signal (timing), or oversample deliberately. For Visite, relax the conditions or inject targeted examples. Neither affects the other 3-4 healthy classes.

4. The Double LLM Sandwich

Text in (CRM dump, plain French)
  → Claude Haiku EXTRACTS     → 20 structured features (JSON)
    → Snake SAT CLASSIFIES    → 5 predictions + probabilities
      → Claude Haiku GENERATES  → personalized message
        → JSON response with XAI audit

Why Snake sits between two Claude calls:

Claude extracts (infinite text → 20 features). An LLM is the right tool for turning "Marc said it's too expensive compared to their current supplier, asking for -12%" into {"objection_type": "prix", "gravite": "traitable"}.

Snake classifies (20 features → discrete predictions, explainable). A SAT formula is the right tool for turning 20 features into "Contre-offre with 62% confidence" with a human-readable audit trail. No black box.

Claude generates (predictions + constraints → personalized message). An LLM is the right tool for writing a French business email. But it MUST respect Snake's constraints: remise max -10%, marge min 18%, don't name the competitor. Without Snake as guardrail, the LLM hallucinates discounts.

Key insight: The generated message is constrained, not free. Snake decides the strategy (counter-offer, not abandon). Snake sets the bounds (max -10% discount). Claude executes within those bounds. The commercial reviews a message that already respects business rules.

5. Iteration Improvement

Canal / Telephone: 48% → 84%

IterLayersNoiseTelephone AccOverall Acc
0150.3048.4%85.0%
3150.3058.3%91.8%
5250.5075.6%94.2%
9350.7583.7%95.6%

More layers + noise gave Snake enough stochastic diversity to distinguish Telephone from Email. The 10x method: measure each module's P(success)/ms_on_success, then deploy the winner.

Adaptive hyperparameters across iterations

iter 0-4:  L=15, B=150, noise=0.30  (baseline)
iter 5-7:  L=25, B=150, noise=0.50  (more layers + noise after B/C confusion)
iter 8-9:  L=35, B=100, noise=0.75  (smaller buckets, high noise per LLPS findings)
iter 3+:   borderline edge cases (jours=14/15/21/30/31, CA boundaries)
iter 6+:   contradictory signal combos (high positive + high negative)