MA
manager.addict.bestHybrid agent apps · ready to run

Growth Day Agent

MultiPost packs + marketing CRO gates + warm-up + PhasedGrowth + incident/canary controls.

MultiPostCorey skillswarm_upL1–L3canary

Hybrid components (≥5)

Growth day without burning young accounts.

  • MultiPost — platform-native caption pack (X/LI/IG/TT/YT)
  • Corey Haines marketingskills — CRO structure gate (benefit/proof/cta)
  • Warm-up pipeline — feed dwell before engage
  • PhasedGrowth caps — age < 7 / < 21 / mature
  • Incident map — 301 L1 · 308 L2 · 310 L3 48h
  • Shadowban canary — empty chrono → quarantine

Runnable growth agent

python · growth_agent.py
#!/usr/bin/env python3
"""Growth Day Agent
Hybrids: MultiPost packs + Corey marketing skills context + warm_up pipeline
         + incident L1/L2/L3 map + shadowban canary stub + PhasedGrowth caps
"""
from __future__ import annotations
import json, os, random, time
from dataclasses import dataclass, asdict
from datetime import datetime, timezone
from pathlib import Path
from typing import Literal

Verdict = Literal["PASS", "FAIL", "INCONCLUSIVE"]

@dataclass
class Result:
    name: str
    verdict: Verdict
    detail: str
    evidence: dict

def account_age_days() -> int:
    return int(os.environ.get("ACCOUNT_AGE_DAYS", "30"))

def phased_caps(age: int) -> dict:
    # PhasedGrowth-style soft caps for young accounts
    if age < 7:
        return {"likes": 8, "comments": 2, "follows": 3, "posts": 1}
    if age < 21:
        return {"likes": 20, "comments": 6, "follows": 8, "posts": 2}
    return {"likes": 40, "comments": 12, "follows": 15, "posts": 3}

def multipost_pack(caption_core: str) -> Result:
    pack = {
        "x": caption_core[:240],
        "linkedin": caption_core + "\n\n#buildinpublic",
        "instagram": caption_core + "\n.\n.\n#makers",
        "tiktok": caption_core,
        "youtube_short": caption_core[:100],
    }
    path = Path(os.environ.get("OUT_DIR", ".")) / "multipost_pack.json"
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(pack, indent=2))
    return Result("multipost-pack", "PASS", str(path), {"platforms": list(pack)})

def corey_style_cro_check(landing_blurb: str) -> Result:
    # Stand-in for coreyhaines marketingskills /cro thoughts
    needs = ["benefit", "proof", "cta"]
    missing = [n for n in needs if n not in landing_blurb.lower()]
    if missing:
        return Result("corey-cro", "FAIL", f"FIX missing: {missing}", {"verdict": "FIX"})
    return Result("corey-cro", "PASS", "SHIP blurb structure", {"verdict": "SHIP"})

def warm_up_plan(caps: dict) -> Result:
    steps = [
        {"action": "open_home", "dwell_s": random.randint(12, 25)},
        {"action": "scroll_feed", "count": 3, "pause_s": "poisson"},
        {"action": "like", "max": min(5, caps["likes"] // 4)},
        {"action": "stop_if", "signals": ["checkpoint", "shadowban", "429"]},
    ]
    return Result("warm_up", "PASS", "plan ready", {"steps": steps, "caps": caps})

def incident_map(code: int) -> Result:
    # 301→L1 reduce · 308→L2 re-export cookies · 310→L3 halt 48h
    table = {
        301: ("L1", "reduce volume 50% for 24h"),
        308: ("L2", "re-export cookies / refresh session"),
        310: ("L3", "halt 48h quarantine — no ban-loop retries"),
    }
    if code not in table:
        return Result("incident", "PASS", "no incident", {"code": code})
    level, action = table[code]
    verdict: Verdict = "FAIL" if level == "L3" else "PASS"
    return Result("incident", verdict, f"{level}: {action}", {"code": code, "level": level})

def shadowban_canary(tag_chrono_empty: bool) -> Result:
    if tag_chrono_empty:
        return Result("shadowban-canary", "FAIL", "L3 candidate — empty tag chrono", {"halt_hours": 48})
    return Result("shadowban-canary", "PASS", "canary ok", {})

def main():
    age = account_age_days()
    caps = phased_caps(age)
    blurb = os.environ.get("LANDING_BLURB", "benefit: save hours. proof: 1k teams. cta: start free.")
    core = os.environ.get("CAPTION_CORE", "Ship quieter tools. Louder outcomes.")
    incident = int(os.environ.get("INCIDENT_CODE", "0"))
    canary_empty = os.environ.get("CANARY_EMPTY", "0") == "1"

    results = [
        multipost_pack(core),
        corey_style_cro_check(blurb),
        warm_up_plan(caps),
        incident_map(incident),
        shadowban_canary(canary_empty),
    ]
    fails = [r for r in results if r.verdict == "FAIL"]
    inc = [r for r in results if r.verdict == "INCONCLUSIVE"]
    status = "FAIL" if fails else ("INCONCLUSIVE" if inc else "PASS")
    report = {
        "status": status,
        "all_pass": status == "PASS",
        "account_age_days": age,
        "phased_caps": caps,
        "ts": datetime.now(timezone.utc).isoformat(),
        "results": [asdict(r) for r in results],
    }
    print(json.dumps(report, indent=2))
    Path(os.environ.get("REPORT", "growth_report.json")).write_text(json.dumps(report, indent=2))
    raise SystemExit(0 if report["all_pass"] else 2)

if __name__ == "__main__":
    main()
bash · run
export ACCOUNT_AGE_DAYS=12
export CAPTION_CORE="Quiet tools. Loud results."
export LANDING_BLURB="benefit: ship faster. proof: 200 teams. cta: try free."
# export INCIDENT_CODE=308
# export CANARY_EMPTY=1
python3 /var/www/manager.addict.best/agents/growth/growth_agent.py