This repo currently contains a minimal Next frontend scaffold and a Python SAMM backend foundation.
SAMM is built around a real LangGraph StateGraph: the CLI and API invoke/resume the graph directly, including native interrupt() checkpoints and Command(resume=...) resume.
python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'.venv/bin/python -m samm demo --company "Celsius" --idea "hydration gummy for students and gym-goers" --mock
.venv/bin/python -m samm checkpoint --run-id <id> --decision approve
.venv/bin/python -m samm chat --mock
.venv/bin/python -m samm artifact --run-id <id>
.venv/bin/python -m samm events --run-id <id>
.venv/bin/python -m samm integrations --run-id <id>
.venv/bin/python -m pytestFor live OpenAI text generation, create a local .env with MOCK_MODE=false,
OPENAI_API_KEY, and optionally OPENAI_MODEL. The research and asset upload
integrations still use mock adapters until their real credentials are wired.
For live Composio + Exa research, also set COMPOSIO_API_KEY, EXA_API_KEY,
COMPOSIO_EXA_AUTH_CONFIG_ID, COMPOSIO_EXA_CONNECTED_ACCOUNT_ID, and
COMPOSIO_TOOLKIT_VERSION_EXA. The app can create the Composio Exa auth config
and connected account at runtime if the IDs are missing, but storing the IDs in
local .env avoids creating duplicate Composio connections.
Research depth is configurable with SAMM_EXA_SEARCH_TYPE, SAMM_EXA_BRAND_RESULTS,
SAMM_EXA_MARKET_RESULTS, SAMM_EXA_FETCH_CONTENTS, SAMM_EXA_CONTENT_RESULTS,
and SAMM_EXA_TEXT_MAX_CHARACTERS. With Composio's current Exa toolkit, SAMM
uses staged EXA_SEARCH calls plus EXA_GET_CONTENTS_ACTION for deeper source
context.
.venv/bin/python -m uvicorn samm.api:app --reloadThe API exposes /health, run creation, conversational messages, checkpoint resume, iteration, artifact inspection, event timelines, and integration events.
New runs first pause at an idea_calibration checkpoint so the orchestrator can ask how to explore the concept before starting Brand Intelligence and Market Opportunity research. Submit run_it to infer defaults, or pass a selected direction/free-text message to store as intake context before research.