Skip to main content

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.
  • CLIgenerate-names, validate, cache, and adapters commands with table / JSON / CSV output.
  • Async-first — built on asyncio throughout; pydantic models 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 is onomly.

Quick Start

First-run: choose your model

Onomly needs an LLM. Before the first run, pick one interactively:

onomly configure

This prints a numbered list of available models (9router free models, local Ollama, OpenAI, Anthropic) and saves your choice to onomly/config.json under your config dir (%LOCALAPPDATA%/onomly on Windows, ~/.config/onomly on Linux). No secrets are stored — only the model selection; API keys come from the environment (or 9router, which needs none).

You can also list the catalog non-interactively:

onomly models

If you skip configure, commands fall back to the default model (9router free) and print a one-line hint.

CLI

# Generate candidates from a brief
onomly generate-names \
  --project-codename "my_saas" \
  --description "AI agent orchestration platform" \
  --target-markets "USA,EU" \
  --industry "Technology" \
  --output-format table

# Override the saved model for a single run
onomly generate-names \
  --project-codename "my_saas" \
  --description "AI agent orchestration platform" \
  --target-markets "USA,EU" \
  --industry "Technology" \
  --llm-provider openai --llm-model gpt-4o-mini

# 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

onomly-0.1.1.tar.gz (38.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

onomly-0.1.1-py3-none-any.whl (37.2 kB view details)

Uploaded Python 3

File details

Details for the file onomly-0.1.1.tar.gz.

File metadata

  • Download URL: onomly-0.1.1.tar.gz
  • Upload date:
  • Size: 38.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for onomly-0.1.1.tar.gz
Algorithm Hash digest
SHA256 71f55e7b8b982c1d4a7ca525cdead86e0df060ffa9935e4bdbe240f26089e5cb
MD5 2092485771b46e6570436210c6fa53d7
BLAKE2b-256 5b8337289f87f5152444e885f2ab64ea2f723691b121b2232e76423ea06f0830

See more details on using hashes here.

File details

Details for the file onomly-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: onomly-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 37.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for onomly-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d82c44c36faf53953dce19b4f0732eda49cfe71475341eaccdc7b0815ab5149d
MD5 9233f06c3e1c0f678e28f84abd40bf0c
BLAKE2b-256 1aa1f48fbeac8a7a8b1ecfe25ad85cc0772abff5a4ad6a79a19ac928b068cfe6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page