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

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

onomly-0.1.0.tar.gz (35.4 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.0-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

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

Hashes for onomly-0.1.0.tar.gz
Algorithm Hash digest
SHA256 eac832a0825fd20f27fdccf5c29a509deca9d3da563fb63f3cd71cdd6c98b722
MD5 34cac2d744d7093f243bfb5c04d64c8e
BLAKE2b-256 715fb75084ce8a8591e39425f1b1aee8fa15d7df7ab15d41384b143e59a3ad5d

See more details on using hashes here.

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

Hashes for onomly-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9a8783ca8a9f2196e7ad92e647abcda1dfb1f7db857e24adcc3024faf5520ae
MD5 d100a6caa5336c3339c48db220ae7a67
BLAKE2b-256 583da6d2f4dc9db9b04a35c056256d748a53fcc9d00a59e8157f4233fabcee51

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