grok-faf-voice | VML • Voice Memory Layer for Grok • Persistent across sessions, devices, models • LiveKit-enabled
Project description
grok-faf-voice
Voice agents that remember.
The Voice Memory Layer (VML) for Grok Voice. .fafm 🐘🎙️ LiveKit enabled.
Two profiles, one
.fafmformat. This is the voice profile (the Voice Memory Layer). For the knowledge profile — typed, cross-linked agent memory — see claude-fafm-sdk.
The Fast⚡️AF memory setup
pip install grok-faf-voice
from grok_faf_voice import VoiceAgent
VoiceAgent().run()
That's it. First run, your agent gets a namepoint — your @handle
for FAF memory. Auto-generated free, no email needed. Want a branded
handle tied to your email (or your X username)? Claim one anytime at
mcpaas.live/voice/setup — one per
valid email address.
What you need
- Python 3.10+
- An
XAI_API_KEY— get one at x.ai/api
That's it. Namepoint and Voice key are provisioned for you.
Run it:
python my_bot.py console
console mode talks locally — no LiveKit cloud needed.
Deploy to LiveKit later via python my_bot.py start.
How it works
- The agent listens via xAI realtime — five built-in voices: Ara · Eve · Leo · Rex · Sal
- Every session opens already remembering what was etched in past ones
- At session end, new memories consolidate silently
- Cross-session, cross-device, cross-model — your namepoint is the address
Voice swappable, memory permanent. ElevenLabs and Hume land in upcoming releases.
Custom Voices
xAI shipped Custom Voices on 2026-05-01. We shipped support 48h later.
from grok_faf_voice import CustomVoiceClient, VoiceAgent
# Clone a voice from a 90-120s WAV sample
cv = CustomVoiceClient() # uses $XAI_API_KEY
voice = cv.create_voice("sample.wav", name="My Clone", language="en")
# Use the cloned voice in your agent — same two-line shape
VoiceAgent(voice=voice["voice_id"]).run()
Custom voice IDs (8-char lowercase alphanumeric, e.g. nlbqfwie) flow through
VoiceAgent(voice=...) unchanged. The 30 free voices via console.x.ai
work too — paste the voice_id and go.
Local souls (.fafm files)
Read and write souls straight off disk — no MCPaaS, no API key. Great for inspection, tests, backups, and loading souls written by other FAF-family tools (cross-vendor interop).
from grok_faf_voice import FAFMemory
# Load a .fafm soul from disk (any profile — voice or knowledge)
mem = FAFMemory.from_file("soul.fafm")
body = await mem.get() # the soul body
recall = await mem.recall_for_prompt() # ready for the prompt
# Write it back out (byte-identical roundtrip)
await mem.to_file("backup.fafm")
# Typed views — no manual parsing (v0.3.1)
mem.profile # "voice" | "knowledge"
mem.facts # parsed list of memory facts
mem.index # top-level index (knowledge profile)
.fafm is the IANA-registered FAF Memory format (application/vnd.fafm+yaml).
Validate documents against the published JSON Schema.
Want more?
Claim your branded @handle |
mcpaas.live/voice/setup |
Advanced setup — FAFMemory, FAFContext, custom ledgers, env-var configuration, retention tiers |
mcpaas.live/voice/about |
| Source + issues | github.com/Wolfe-Jam/grok-faf-voice |
| Contribute | CONTRIBUTING.md |
Citation
If you use grok-faf-voice or the .fafm format in research or production, please cite the format paper:
Wolfe, J. (2026). Permanent Memory and Instant Recall: The .fafm Standard for Multi-Profile AI Agent Memory. Zenodo. https://doi.org/10.5281/zenodo.20348942
BibTeX
@article{wolfe2026fafm,
title = {Permanent Memory and Instant Recall: The .fafm Standard for Multi-Profile AI Agent Memory},
author = {Wolfe, James},
year = {2026},
month = {may},
publisher = {Zenodo},
doi = {10.5281/zenodo.20348942},
url = {https://doi.org/10.5281/zenodo.20348942}
}
We are the Open-Ended answer to Voice memory, and don't you Forget It. We won't.
.fafm 🐘🎙️ · application/vnd.fafm+yaml (IANA registered)
· part of the FAF.one family · MIT licensed
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 grok_faf_voice-0.3.2.tar.gz.
File metadata
- Download URL: grok_faf_voice-0.3.2.tar.gz
- Upload date:
- Size: 75.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d924e5defc69f2cc7f60dec37734814ef73fce1b1d6561b284fa8e0334246759
|
|
| MD5 |
941545cf90c6ee7a66eb5c466da2a11e
|
|
| BLAKE2b-256 |
deb4c38b9645ee6485bc62aeb54d9b997798a4a67718735cbc5490c9fbbfc6b0
|
Provenance
The following attestation bundles were made for grok_faf_voice-0.3.2.tar.gz:
Publisher:
pypi.yml on Wolfe-Jam/grok-faf-voice
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grok_faf_voice-0.3.2.tar.gz -
Subject digest:
d924e5defc69f2cc7f60dec37734814ef73fce1b1d6561b284fa8e0334246759 - Sigstore transparency entry: 1610453769
- Sigstore integration time:
-
Permalink:
Wolfe-Jam/grok-faf-voice@5b6dc21f744f65aa99423bbc16edee050092ba12 -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/Wolfe-Jam
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@5b6dc21f744f65aa99423bbc16edee050092ba12 -
Trigger Event:
release
-
Statement type:
File details
Details for the file grok_faf_voice-0.3.2-py3-none-any.whl.
File metadata
- Download URL: grok_faf_voice-0.3.2-py3-none-any.whl
- Upload date:
- Size: 49.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7b9e2f657821d7285881c881fc9b78e89cf025209b6ae23d465dc9b322d8b60
|
|
| MD5 |
dd187d3f05b3d9346351f6f14511ce0c
|
|
| BLAKE2b-256 |
a8f3ea5bb168d4be07b18f1fdebb915579a6cab6a37e60ffdd9f30f61b94189b
|
Provenance
The following attestation bundles were made for grok_faf_voice-0.3.2-py3-none-any.whl:
Publisher:
pypi.yml on Wolfe-Jam/grok-faf-voice
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grok_faf_voice-0.3.2-py3-none-any.whl -
Subject digest:
a7b9e2f657821d7285881c881fc9b78e89cf025209b6ae23d465dc9b322d8b60 - Sigstore transparency entry: 1610453859
- Sigstore integration time:
-
Permalink:
Wolfe-Jam/grok-faf-voice@5b6dc21f744f65aa99423bbc16edee050092ba12 -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/Wolfe-Jam
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@5b6dc21f744f65aa99423bbc16edee050092ba12 -
Trigger Event:
release
-
Statement type: