Brief → research → build → validate → launch autonomous tokenized business units (Swarms, Solana)
Project description
LUAF — Large-scale Unified Agent Foundry
One CLI. Brief → research → build → validate → launch.
Turn a business idea (or a blank line for AI-generated alpha) into a tokenized autonomous unit on swarms.world, with optional Solana tokenization.
- Repo: Euroswarms-Institute/LUAF
- PyPI:
pip install luaf→ thenluaf init,luaf doctor,luaf run
What it actually does
The luaf CLI (single entrypoint) runs a pipeline that:
- Takes a brief — You type a use case (or set
LUAF_TOPIC/--topic), or leave it blank and let the LLM generate one. - Researches — DuckDuckGo (and optionally multi-hop RAG) for real-world context; search is biased toward keyless/public APIs when possible.
- Builds — Optional planner (templates) + designer LLM (swarms/ReAct or direct chat) to generate a full agent spec. The designer prefers APIs that do not require API keys; when keys are needed, generated code uses
os.environ.getand comments on where to get/set them. No mock or example data — real code paths and inline comments for where to plug in credentials or data. - Validates — Runs the generated Python in a subprocess; auto
pip installonModuleNotFoundError(with retries); min ~300 substantive lines, no stubs. - Launches —
POST https://swarms.world/api/add-agent; optional Solana tokenization. You can attach an agent image viaLUAF_AGENT_IMAGE_URL, or use keyless AI image generation (LUAF_GENERATE_AGENT_IMAGE=1or--generate-agent-image) to create one from name/description (Pollinations.ai, no API key). After publish, the agent can be run in a new terminal window viaLUAF_RUN_IN_NEW_TERMINAL=1(default). Optional X (Twitter) batch posting vialuaf_x_postwhenLUAF_POST_TO_X=1and X API credentials are set.
So: one command, one brief, one unit on-chain (if you turn off dry-run and have keys).
Quick start (no TOS, just facts)
From PyPI:
pip install luaf
luaf init # setup wizard: .env + API keys
luaf doctor # check config and connectivity
luaf run # single pipeline
luaf persistent # loop until target SOL
From repo (clone or pip install -e .):
pip install -r requirements.txt # or: pip install -e .
luaf init # create .env from env.example and set API keys
luaf doctor # check config and connectivity
luaf run # single pipeline
luaf persistent # loop until target SOL
Other commands: luaf init --check, luaf init --from-example, luaf self-train [TOPIC], luaf --no-tui, luaf --tui (experimental TUI). All config can be overridden via CLI flags (see CLI config flags); flags take precedence over .env.
- Dry run (default):
LUAF_DRY_RUN=1orluaf run --dry-run→ no real POST to add-agent, no SOL spent. - Real publish:
luaf run --no-dry-run(orLUAF_DRY_RUN=0) +SWARMS_API_KEY(+SOLANA_PRIVATE_KEYfor tokenization). - Persistent mode: Generates topics (single/env/file), runs pipeline per topic, publishes until balance ≥ target SOL or you stop (TUI:
sstop,qquit).
Pipeline flow (technical)
-
Brief
FromLUAF_DESIGN_BRIEF/LUAF_TOPICor interactive prompt. If empty,_generate_topic_via_llm()one-shots a single “autonomous business idea” from the LLM. -
Search
search_duckduckgo(brief + random SEARCH_VARIANT_SUFFIX)or, ifLUAF_USE_MULTIHOP_WEB_RAG=1,_multihop_web_rag()(embedding-guided hops, converge threshold, dedup). -
Planner (optional)
IfLUAF_USE_PLANNER=1andplanner/executor/toolboxare importable:plan_from_topic_and_search(brief, snippets)→execute_plan(plan, get_template, required_payload_keys). If the result is a skeleton (<300 lines /NotImplementedError), LUAF can hand off to the designer. For pyclips support, install separately:pip install "pyclips @ git+https://github.com/kyordhel/pyclips3.git@master"(PyPI does not allow git URL deps in published metadata). -
Designer (optional)
IfLUAF_USE_DESIGNER=1: builds a system prompt fromdesigner_system_prompt.txt+SWARMS_AGENT_DOCS+ quality packages for the topic (luaf_quality.json); can use Swarms Agent, ReAct, or direct OpenAI-compatible/chat/completions. Subprocess designer is default (LUAF_DESIGNER_SUBPROCESS=1); writesfinal_agent_payload.jsoninto workspace. Exemplar retrieval (optional) fromdesigner_exemplars.jsonlvialuaf_designer.retrieve_similar_exemplars. -
Parse
parse_agent_payload(raw)(inluaf_designer) — first JSON object, trailing-comma fix, required keys:name,agent,description,language,requirements,useCases,tags,is_free,ticker. -
Validation
run_agent_code_validation(code, VALIDATION_TIMEOUT): temp file, stub rewrites (search/LLM/publish),USE_SEARCH=False,USE_LLM=False,method_whitelist→allowed_methods; onModuleNotFoundError,_pip_install_module+ retry (up toLUAF_MAX_MISSING_IMPORT_RETRIES). On failure, prompt “Publish without validation?” (if TTY). -
Publish
luaf_publish.publish_agent(payload, api_key, private_key, dry_run, ...):POST {BASE_URL}/api/add-agent. If not dry_run and payload nottokenized_on: false, tokenization usesprivate_key; balance fromLUAF_SOLANA_RPC_URL(cached). Success →append_agent_to_registry(AGENTS_REGISTRY_PATH, ...). Ifluaf_x_postis enabled, the agent is added to the X pending queue for batched 2-tweet threads. -
Execution phase
WhenLUAF_RUN_IN_NEW_TERMINAL=1(default), after a successful publish the generated agent is launched in a new terminal window (Windows: new console; Linux: gnome-terminal or xterm) with the brief as the task argument, so you can observe it. Disable withLUAF_RUN_IN_NEW_TERMINAL=0. -
Fee claiming
claim_fees(ca, private_key, api_key)→POST {BASE_URL}/api/product/claimfees. After run, or in persistent loop viarun_delayed_claim_pass(registry_path, pkey, swarms_key, CLAIM_DELAY_HOURS).
CLI reference
Default: Running luaf (or python LUAF.py) with no command shows the CLI menu (1=Pipeline, 2=Persistent, 0=Exit). Use luaf --tui for the experimental TUI.
| Invocation | Behavior |
|---|---|
luaf |
CLI menu (default). |
luaf --tui |
Use experimental TUI (Rich). |
luaf init |
Setup: create/update .env from env.example (or bundled template when pip-installed). Prompts for API keys (OpenAI, Swarms, Solana, X); Enter to skip any. Edit .env for other LUAF_* options. |
luaf init --from-example |
Non-interactive: ensure .env exists from template only. |
luaf init --check |
Verify required env vars; exit 0 if OK, 1 if missing. |
luaf doctor |
Load .env, check required vars and live API health. Keys set in .env (manually or via init) are validated the same. Exit 0/1. |
luaf help |
Show help (same as luaf -h). |
luaf run |
Single pipeline then exit (same as --once). |
luaf persistent |
Run persistent loop until target SOL or stop. |
luaf self-train [TOPIC] |
Self-train pipeline; TOPIC optional (else LUAF_TOPIC). |
luaf --once / -o |
Single pipeline then exit. |
luaf --persistent / -p |
Persistent loop. |
luaf --no-tui / -n |
CLI menu only (default). |
luaf --no-color |
Disable ANSI colors (also NO_COLOR=1). |
If LUAF_MODE=persistent and you don’t pass run or self-train, persistent is used.
CLI config flags
Override .env when passed. Apply to luaf run and luaf persistent.
| Flag | Env | Description |
|---|---|---|
--dry-run / --no-dry-run |
LUAF_DRY_RUN |
Publish as dry-run only vs real. |
--target-sol N |
LUAF_PERSISTENT_TARGET_SOL |
Stop persistent when balance ≥ N SOL. |
--topic TEXT |
LUAF_TOPIC |
Brief / topic for this run. |
--generate-agent-image / --no-generate-agent-image |
LUAF_GENERATE_AGENT_IMAGE |
Keyless AI image (Pollinations.ai). |
--agent-image-url URL |
LUAF_AGENT_IMAGE_URL |
Fixed image URL for published agents. |
--claim-delay-hours H |
LUAF_CLAIM_DELAY_HOURS |
Hours after publish before claiming fees. |
--min-sol-to-tokenize N |
LUAF_MIN_SOL_TO_TOKENIZE |
Below this balance, dry-run only. |
--max-steps N |
LUAF_MAX_STEPS |
Max pipeline retry steps per run. |
--interactive / --no-interactive |
LUAF_INTERACTIVE |
Prompt for brief/name/ticker. |
--run-in-new-terminal / --no-run-in-new-terminal |
LUAF_RUN_IN_NEW_TERMINAL |
Launch agent in new terminal after publish. |
--validation-timeout SEC |
LUAF_VALIDATION_TIMEOUT |
Agent validation subprocess timeout. |
--loop-sleep-seconds SEC |
LUAF_PERSISTENT_LOOP_SLEEP_SECONDS |
Sleep between persistent iterations. |
--topic-file PATH |
LUAF_TOPIC_FILE |
Persistent: one topic per line. |
--topic-list LIST |
LUAF_TOPIC_LIST |
Persistent: comma-separated topics. |
--topic-source single|env|file |
LUAF_PERSISTENT_TOPIC_SOURCE |
Persistent: topic source. |
Examples: luaf run --no-dry-run --topic "DeFi feed" --generate-agent-image · luaf persistent --target-sol 20 --claim-delay-hours 0.25 · luaf persistent --topic-file ./topics.txt --topic-source file
Environment variables
Loaded from cwd first, then repo root (so your .env wins). Can be overridden by CLI config flags.
Required for core run
OPENAI_API_KEY— Used for designer LLM and topic generation. No key → early exit after error.
Publish / Swarms
SWARMS_API_KEY— Bearer forPOST .../api/add-agent. Optional ifLUAF_DRY_RUN=1(default).LUAF_DRY_RUN—1(default): no real publish.0: real publish (and tokenization if key provided).LUAF_SWARMS_BASE_URL— Set byluaf_publish; defaulthttps://swarms.world.
Solana / tokenization
SOLANA_PRIVATE_KEYorSOLANA_PRIVATE_KEY_FILE— For tokenized deploy and fee claiming.SOLANA_PUBKEYorCREATOR_WALLET— Optional; for display and tokenization recipient.LUAF_SOLANA_RPC_URL— Defaulthttps://api.mainnet-beta.solana.com.LUAF_MIN_SOL_TO_TOKENIZE— Below this balance, persistent mode does dry-run publish (default 0.05).
Persistent loop
LUAF_PERSISTENT_TARGET_SOL— Stop when wallet balance ≥ this (default 10).LUAF_PERSISTENT_TOPIC_SOURCE—single(TOPIC + suffix),env(LUAF_TOPIC_LIST), orfile(LUAF_TOPIC_FILE).LUAF_TOPIC_LIST— Comma-separated topics when source=env.LUAF_TOPIC_FILE— Path to file, one topic per line, when source=file.LUAF_PERSISTENT_LOOP_SLEEP_SECONDS— Sleep between loop iterations (default 0).LUAF_CLAIM_DELAY_HOURS— Delay before claiming fees per listing (default 24).
Brief / topic
LUAF_TOPIC/LUAF_DESIGN_BRIEF— Prefilled brief; no prompt if set.LUAF_INTERACTIVE—1(default): prompt for brief and optional name/ticker.0: use env/defaults only.
Designer / LLM
LUAF_LLM_MODEL— e.g.gpt-4.1(default).LUAF_LLM_TEMPERATURE— Default 0.9.OPENAI_BASE_URL— Defaulthttps://api.openai.com/v1.LUAF_DESIGNER_AGENT_ARCHITECTURE—agentorreact.LUAF_DESIGNER_USE_DIRECT_API—1(default): try one-shot/chat/completionsbefore Swarms Agent.LUAF_DESIGNER_SUBPROCESS—1(default): run designer in subprocess.LUAF_USE_PLANNER—1(default): use planner if available.LUAF_USE_DESIGNER—1(default): use designer LLM.LUAF_TRY_SWARMS_CLOUD_FIRST—0(default): try Swarms Cloud before local agent when set.LUAF_TEMPLATE— Template id for designer/planner.LUAF_USE_RETRIEVAL—1(default): use exemplar retrieval fromdesigner_exemplars.jsonl.
RAG (multi-hop)
LUAF_USE_MULTIHOP_WEB_RAG—0(default).1: use embedding-guided multi-hop search.LUAF_RAG_MAX_HOPS,LUAF_RAG_CONVERGE_THRESHOLD,LUAF_RAG_TOTAL_K,LUAF_RAG_DDG_PER_HOP— Tune RAG.
Validation
LUAF_VALIDATION_TIMEOUT— Subprocess timeout seconds (default 600).LUAF_MAX_MISSING_IMPORT_RETRIES— Retries after auto pip install (default 3).
Execution / UX
LUAF_RUN_IN_NEW_TERMINAL—1(default): after publish, launch the agent in a new terminal window for observation.0: skip.LUAF_KEYLESS_API_SEARCH—1(default): append keyless/public-API-focused search snippets for the designer.
Agent image (for publish)
LUAF_GENERATE_AGENT_IMAGE—1: generate a keyless AI image from agent name/description (Pollinations.ai, no API key).0(default): no auto image.LUAF_AGENT_IMAGE_URL— Fixed image URL for all published agents (overrides payload and keyless).LUAF_AGENT_IMAGE_BASE_URL— Override keyless image base (defaulthttps://gen.pollinations.ai).
X (Twitter) posting (optional; requires luaf_x_post.py)
LUAF_POST_TO_X—1to enable batched 2-tweet threads for published agents.X_API_KEY,X_API_SECRET,X_ACCESS_TOKEN,X_ACCESS_SECRET— X OAuth 1.0a credentials (all four required if posting).
Misc
LUAF_MAX_STEPS— Max pipeline steps per run (default 3).LUAF_DESIGNER_MAX_LOOPS— Designer agent max_loops (default 2).LUAF_LOG_FILE—1(default): log tologs/luaf.lognext to script.LUAF_GENERATED_AGENTS_DIR— Where to save generated.py(defaultgenerated_agents).WORKSPACE_DIR— Designer workspace (default./agent_workspace).LUAF_EVOLVE,LUAF_BACKGROUND_TRAIN,LUAF_MOLTBOOK_SOCIAL— Evolution / background self-train / social; only if corresponding code paths exist.
Files LUAF expects (same directory)
luaf_publish.py—publish_agent, balance, registry, claim_fees. Required for publish.luaf_designer.py—parse_agent_payload,retrieve_similar_exemplars. Required for designer flow.luaf_tui.py—create_luaf_app. Optional; experimental Rich TUI (useluaf --tui).luaf_x_post.py— Optional. X (Twitter) batch posting: add agent to pending, post 2–3 agents per 2-tweet thread whenLUAF_POST_TO_X=1and X API credentials are set.luaf_profiles.py— Optional. Profile selection for designer system prompt / topic focus.tui.css— Design reference forluaf_tui. Optional.designer_system_prompt.txt— Full designer system prompt (keyless-API preference, no mocks, comment-based data placement). If missing, designer behavior may be wrong.luaf_quality.json— Optional.design_angles,search_variant_suffixes,quality_packages_by_category,quality_category_keywords. Fallback used if missing.designer_exemplars.jsonl— Optional. One JSON object per line for retrieval..env— Loaded from cwd first, then repo root (your.envwins). Useenv.exampleor.env.exampleas template;luaf initcreates/updates.envfrom it (or uses a bundled template when installed via pip). Edit.envfor allLUAF_*options.
Outputs
tokenized_agents.json— Registry of published units (name, ticker, listing_url, id, token_address, published_at).logs/luaf.log— Rotating log (ifLUAF_LOG_FILE=1).agent_workspace/— Designer workspaces and anyfinal_agent_payload.json.generated_agents/(orLUAF_GENERATED_AGENTS_DIR) — Saved generated agent.pyfiles.
API surface (what LUAF.py hits)
- Publish:
POST https://swarms.world/api/add-agent(vialuaf_publish), JSON body,Authorization: Bearer <SWARMS_API_KEY>. - Claim fees:
POST https://swarms.world/api/product/claimfees(vialuaf_publish). - Solana: RPC
getBalanceatLUAF_SOLANA_RPC_URL(and tokenization via Swarms backend when not dry-run). - LLM: OpenAI-compatible
POST .../chat/completionsand.../embeddingsatOPENAI_BASE_URL(and Swarms Cloud if used).
Degen cheat sheet
-
“First time setup”
luaf init(creates.envfrom template, prompts for API keys), thenluaf doctorto verify. Works from repo orpip install luaf. -
“I just want one unit live”
Set keys in.env(or useluaf init), thenluaf run --no-dry-run --topic "Your brief"(or enter brief at prompt). Add--generate-agent-imagefor a keyless agent image. OptionallySOLANA_PRIVATE_KEY+CREATOR_WALLETin.envfor tokenization. -
“I want it to run until I’m at 10 SOL”
luaf persistent --target-sol 10(or default). With TUI (luaf --tuithen 2):sstop,qquit. -
“I want 50 different topics from a file”
luaf persistent --topic-file ./topics.txt --topic-source file. -
“Validation keeps failing”
Checklogs/luaf.log. LUAF auto-installs missing deps and retries. If it’s stubs/short code, add more context to the brief. You can answer “y” to “Publish without validation?” (TTY only). -
“CLI only / no TUI”
Default. Useluaf(no--tui). Menu: 1 = pipeline, 2 = persistent, 0 = exit. -
“Dry run forever”
Default. Useluaf run --no-dry-runorLUAF_DRY_RUN=0only when you’re ready for real listing and (optionally) SOL.
Summary
LUAF = one CLI: brief → research → build → validate → launch.
Install: pip install luaf or clone + pip install -e .. Commands: luaf init (setup .env and API keys), luaf doctor (check config), luaf run, luaf persistent, luaf help. All config is overridable via CLI flags (e.g. --dry-run, --target-sol, --topic, --generate-agent-image). Default UI is the CLI menu; use luaf --tui for the experimental TUI.
Designer prefers keyless APIs and no mock data; when credentials are needed, generated code uses env and comments for where to get/set them. You can add a keyless agent image per publish (LUAF_GENERATE_AGENT_IMAGE=1 or --generate-agent-image, Pollinations.ai). After publish, agents can be launched in a new terminal (LUAF_RUN_IN_NEW_TERMINAL=1). Optional X (Twitter) batch posting via luaf_x_post when configured.
Requires luaf_publish.py and luaf_designer.py for full flow; luaf_tui.py and luaf_x_post.py are optional.
Publish endpoint: POST https://swarms.world/api/add-agent.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file luaf-1.3.2.tar.gz.
File metadata
- Download URL: luaf-1.3.2.tar.gz
- Upload date:
- Size: 69.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
664c8ee26d8e8e5378dbb7933b5d2a343cbbb56d349b5521acd6ef7c3d0df20c
|
|
| MD5 |
f4805a5fe74899635d21f3113e6262a9
|
|
| BLAKE2b-256 |
666049ccd3b8d63c57a9383ca33dce5070fd2f567799417389880eb8fdd0cb51
|
File details
Details for the file luaf-1.3.2-py3-none-any.whl.
File metadata
- Download URL: luaf-1.3.2-py3-none-any.whl
- Upload date:
- Size: 60.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3e34c7d07afd57cc7118f3426d9cbc727babab755deb84b9824dcfd3e1f8986
|
|
| MD5 |
477c5783f4d770663d97b674031d5a82
|
|
| BLAKE2b-256 |
385656d0836115adb1420bbd5b968632d13d3f1c381468bb262ff7e5f665af7e
|