Skip to main content

An agent + CLI giving agents and robots non-TTS (non-speech) audio: express meaning through pleasant sonic signatures — chimes, flutes, pulses, and tonal motifs mapped to intent, confidence, urgency, state, and identity. Turns text/sentences into notes and audio (text-to-notes / text-to-audio).

Project description

harmonics-cli

harmonics-cli gives an agent or robot its own non-speech VOICE. It is the inverse of text-to-speech: instead of turning words into speech, it renders an agent's live meaning into short, pleasant sonic gestures — chimes, flutes, pulses, tonal motifs — that a listener recognizes by who is speaking and what they mean. It reproduces no words or phonemes; it maps meaning, not the sound of words (text-to-notes / text-to-audio).

A recognizable non-speech voice makes a headless agent or robot present and legible by ear: with no screen to read and no speech to synthesize or parse, you can tell who is working, who just succeeded, and who is stuck.

The design spine — intent → sound

Everything the domain renders resolves to five expressive axes:

Axis Example values Sonic mapping
intent ack, question, success, failure, thinking, handoff timbre / motif family (chime vs. flute vs. pulse)
confidence low → high consonance, pitch stability, resolved vs. suspended cadence
urgency calm → urgent tempo, attack sharpness, repetition
state idle, working, blocked, done sustained pad vs. discrete events
identity which agent signature motif / key / instrument per agent

Urgency is carried by tempo, attack, and repetition — never by dissonance or raw loudness — so the palette stays pleasant and non-fatiguing even at the urgent end, playing repeatedly next to a human without becoming an alarm.

Voice, not soundtrack

harmonics is a first-person utterance an agent emits as itself, live and in the moment, driven by its own axes. It is not a third-person spectator soundtrack. The contrast is league-of-agents' replay score, which narrates a match from the outside off an event log; harmonics is the inverse — the agent's own voice, not an ambient bed you tune out. And it is not TTS: no words, no phonemes, only meaning.

Status

The agent-first CLI, mesh identity, skill kit, and CI baseline are in place, and the voice domain has shipped. The pure text→notes core stays dependency-free and offline-testable — tests assert on note sequences, not on a speaker. The text-to-notes verbs:

  • harmonics play --intent success --confidence high --urgency low — render explicit axes to a note sequence (dry-run by default; --play/--out produce sound or a file).
  • harmonics say "done, tests all green" — infer the axes from a sentence, then render.
  • harmonics demo — tour the whole voice in one command: dry-run by default, or --play / --html / --wav / --out / --json to hear it, write a browser-playable gallery, or stream the clips into your own code.

What you get today

  • An agent-first CLI cited from teken (afi-cli) — the runtime package has no third-party dependencies.
  • A mesh identityculture.yaml (suffix + backend) and the matching resident prompt file (AGENTS.colleague.md, since this agent runs backend: colleague).
  • The canonical guildmaster skill kit (11 skills) under .claude/skills/, vendored cite-don't-import. See docs/skill-sources.md.
  • A build + deploy baseline — pytest, lint, the agent-first rubric gate, and PyPI Trusted Publishing wired into GitHub Actions.

Quickstart

uv sync
uv run pytest -n auto                 # run the test suite
uv run harmonics whoami      # identity from culture.yaml
uv run harmonics learn       # self-teaching prompt (add --json)
uv run teken cli doctor . --strict    # the agent-first rubric gate CI runs

CLI

Installed from PyPI as harmonics-cli (uv tool install harmonics-cli); the command you run is harmonics.

Verb What it does
whoami Report this agent's nick, version, backend, and model from culture.yaml.
learn Print a structured self-teaching prompt.
explain <path> Markdown docs for any noun/verb path.
overview Read-only descriptive snapshot of the agent.
doctor Check the agent-identity invariants (prompt-file-present, backend-consistency).
play Render explicit axes to a note sequence (dry-run; --wav/--play for audio, --device to pick the output).
say "<sentence>" Infer axes from a sentence and render it in the agent's voice.
demo Tour the whole voice: --play / --html / --wav / --out / --json (dry-run by default; --device picks --play's output).
cli overview Describe the CLI surface itself.

Every command supports --json. Results go to stdout, errors/diagnostics to stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment error, 3+ reserved.

Live playback (--play)

The core (text→notes plus offline WAV render) is dependency-free, so a plain install can already write audio — --wav/--out/--html need no extra. Live playback (--play) needs a real audio backend, kept out of the core deps and behind an opt-in extra:

uv tool install 'harmonics-cli[audio]'     # or: pip install 'harmonics-cli[audio]'
# already installed? re-run with --force, or inject into the existing tool env:
uv tool install --force --with sounddevice --with numpy harmonics-cli

The audio extra pulls in sounddevice (ships wheels bundling PortAudio) and numpy. A hand-installed simpleaudio also works. With no backend, --play fails with a friendly hint (exit 2) — it never crashes or silently no-ops — so fall back to --wav out.wav to write a file instead.

Contributing

See CLAUDE.md for the full conventions — the design-spine mapping, the offline-testable text→notes rule, dry-run-by-default for audio verbs, version-bump-every-PR, the cicd PR lane, and deploy setup.

License

Apache 2.0 — see LICENSE.

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

harmonics_cli-0.8.0.tar.gz (268.0 kB view details)

Uploaded Source

Built Distribution

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

harmonics_cli-0.8.0-py3-none-any.whl (94.9 kB view details)

Uploaded Python 3

File details

Details for the file harmonics_cli-0.8.0.tar.gz.

File metadata

  • Download URL: harmonics_cli-0.8.0.tar.gz
  • Upload date:
  • Size: 268.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for harmonics_cli-0.8.0.tar.gz
Algorithm Hash digest
SHA256 cce6ed38086bd37296c5d28ec56a81321b65c19daf92a7eb7f2b085f43e8f11a
MD5 6c663f5643ed4cd86f780ca89b6d6902
BLAKE2b-256 00295746d9ee309ccf8ca88b9568404ccf80d2bbc713ae17478ead62b530e038

See more details on using hashes here.

File details

Details for the file harmonics_cli-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: harmonics_cli-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 94.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for harmonics_cli-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8ba906f45d5718c1371c1c50f1437f54886176c9d2a02f867241500c7bd0eb40
MD5 ee5aee70cc2411998e2a5ab9cee89211
BLAKE2b-256 88fa1aa98836136f8096821f3599ec082f3ca55711a467895e94d8f6e7c0aef9

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 Pingdom Monitoring Sentry Error logging StatusPage Status page