Onomly
AI brand-naming and validation engine — generate, score, and clear candidate names across domain, trademark, and social channels.
Onomly (internal package: launch_engine) is a Python framework that turns a naming brief into a defensible shortlist. It generates brand-name candidates with an LLM, applies phonetic and semantic filters, scores each candidate, and then validates availability through pluggable adapters (RDAP domain lookup, trademark gateway, social-handle checks) with SQLite caching, token-bucket rate limiting, and retry-with-backoff.
The brand name Onomly is a real-word blend (from onomatics / onomastics — the study of names — plus a friendly "-ly" suffix). It was chosen after the first coined name ("KLYDRIX") read as too invented; see NAMING.md for the full brief, shortlist, validation evidence, and decision record.
Features
- Divergent → Convergent generation — LLM generates diverse candidates across 8 name typologies, then scores and ranks them.
- Phonetic filtering — syllable, length, and avoided-sound constraints applied mid-pipeline.
- Pluggable validation adapters — Domain (RDAP), Trademark (manual-review gateway), and Social (X / Instagram / LinkedIn).
- Resilient pipeline — per-adapter rate limiting (token bucket), exponential-backoff retry on transient errors, and TTL-based SQLite caching.
- CLI —
generate-names,validate,cache, andadapterscommands with table / JSON / CSV output. - Async-first — built on
asynciothroughout;pydanticmodels for all I/O contracts.
Installation
pip install onomly
For development:
git clone https://github.com/EAbaracus/onomly.git
cd onomly
pip install -e ".[dev]"
Note on package naming: the importable package is
launch_engine(kept stable to avoid breaking the existing module graph). The installed console script and published distribution name isonomly.
Quick Start
CLI
# Generate candidates from a brief
onomly generate-names \
--project-codename "my_saas" \
--description "AI agent orchestration platform" \
--target-markets "USA,EU" \
--industry "Technology" \
--llm-provider ollama \
--llm-model qwen3:14b \
--output-format table
# Validate a previously generated candidate file
onomly validate \
--candidates-file candidates.json \
--target-markets "USA,EU" \
--industry "Technology" \
--output-format json
Python
import asyncio
from launch_engine.engine import LaunchEngine
from launch_engine.modules.naming.brief import NamingBrief
async def main():
engine = LaunchEngine(
llm_provider="ollama",
llm_model="qwen3:14b",
cache_db_path="klydrix_cache.db",
)
brief = NamingBrief(
project_codename="my_saas",
description="AI agent orchestration platform",
target_markets=["USA", "EU"],
industry="Technology",
candidate_count=10,
)
candidates, results = await engine.run_full_pipeline(brief)
for c in candidates.candidates:
print(c.name, c.typology, c.internal_assessment.score)
asyncio.run(main())
Architecture
KLYDRIX follows a modular pipeline architecture:
- Brand Naming Module (
launch_engine/modules/naming/) — brief parsing, divergent LLM generation, phonetic mid-filter, convergent LLM scoring. - LLM Adapter (
launch_engine/llm.py) — provider-agnostic calls via LiteLLM (ollama, openai, anthropic, 9router). - Validation Pipeline (
launch_engine/validation/) — orchestrates adapters with concurrency control, rate limiting, retry, and caching. - Cache Layer (
launch_engine/cache.py) — SQLite-backed TTL cache keyed by content hash. - CLI (
launch_engine/cli/) — Typer-based command surface.
Data Flow
NamingBrief
│
▼
BrandNamingModule.run()
├─ _divergent_generate() → LLM → NameCandidate[]
├─ _midfilter() → phonetic + avoid-term filter
└─ _convergent_score() → LLM → scored & ranked NameCandidateList
│
▼
ValidationPipeline.validate_all()
└─ for each (candidate, adapter): rate-limit → retry → cache → ValidationResult
Development
pip install -e ".[dev]"
pytest # run the suite
black --check . # formatting
ruff check . # lint
mypy . # types
Documentation
- NAMING.md — how the KLYDRIX name was chosen (brief, shortlist, validation, decision).
- CONTRIBUTING.md — dev setup and PR process.
License
Apache 2.0 — see LICENSE.
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 onomly-0.1.0.tar.gz.
File metadata
- Download URL: onomly-0.1.0.tar.gz
- Upload date:
- Size: 35.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eac832a0825fd20f27fdccf5c29a509deca9d3da563fb63f3cd71cdd6c98b722
|
|
| MD5 |
34cac2d744d7093f243bfb5c04d64c8e
|
|
| BLAKE2b-256 |
715fb75084ce8a8591e39425f1b1aee8fa15d7df7ab15d41384b143e59a3ad5d
|
File details
Details for the file onomly-0.1.0-py3-none-any.whl.
File metadata
- Download URL: onomly-0.1.0-py3-none-any.whl
- Upload date:
- Size: 33.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9a8783ca8a9f2196e7ad92e647abcda1dfb1f7db857e24adcc3024faf5520ae
|
|
| MD5 |
d100a6caa5336c3339c48db220ae7a67
|
|
| BLAKE2b-256 |
583da6d2f4dc9db9b04a35c056256d748a53fcc9d00a59e8157f4233fabcee51
|