Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
ContextuAI는 데이터를 보유한 인프라 내에서 AI를 실행하고 자체 API 키·클라우드·GPU 모델을 사용해 관리·감시·감사를 지원합니다
Run AI where your data already lives. ContextuAI deploys inside your infrastructure: bring your own API keys, your own cloud, or open models on your own GPUs — governed, observable, audited.
개발 도구Python · HTMLGitHub @contextuai온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Hey Spark, by ContextuAI: a wake-word voice assistant with Claude, Hermes Agent or any OpenAI-compatible model as the brain and MCP servers as connectors
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗by ContextuAI
An always-listening voice assistant for your laptop. Say "Hey Spark", ask a question or give a command, and hear the answer. The wake word, speech recognition and voice all run locally on your CPU. The brain is Claude, Hermes Agent, or any OpenAI-compatible model, including a local one through Ollama. Spark reaches your tools (GitHub, Gmail, Calendar, your own systems) through MCP servers, and it asks out loud before doing anything that changes something.
"Hey Spark, what's on my calendar tomorrow?" "Set a pasta timer for ten minutes." "Summarize the open pull requests on hey-spark." "Let's start a new project called weather-bot." → "I'll create a folder, a git repo and a private GitHub repo called weather-bot. Should I go ahead?"
config.yaml: wake word, VAD, STT, TTS and brain backends,
with no code changes.flowchart LR
mic[Mic 16 kHz] --> wake[Wake word<br/>openWakeWord]
wake --> vad[Record until silence<br/>Silero VAD]
vad --> stt[Speech to text<br/>faster-whisper]
stt --> brain[Brain<br/>Claude or OpenAI-compatible]
brain <--> mcp[MCP connectors<br/>+ spoken confirmation]
brain --> split[Sentence splitter]
split --> tts[Text to speech<br/>Piper / Kokoro]
tts --> spk[Speaker]
Nothing leaves your machine before the wake word. After it, only the text of your request goes to the brain you chose. Audio leaves the machine only if you pick a cloud STT backend.
Requirements: macOS 14 or later on Apple Silicon, or Windows 11 (see Platform support), a microphone, about 1 GB of disk for models, and a brain: Claude Code signed in to your Claude account (or with an Anthropic API key), an OpenAI-compatible key, or Ollama running locally. A USB speakerphone with echo cancellation works best.
Get the latest build from Releases. Each file
has a .sha256 checksum next to it.
macOS (Apple Silicon, macOS 14+)
HeySpark-<version>-macos-arm64.dmg, open it and drag HeySpark into
Applications.xattr -dr com.apple.quarantine /Applications/HeySpark.app once in Terminal.)Settings, logs, models and your .env live in ~/Library/Application Support/HeySpark.
Windows (Windows 11)
HeySpark-Setup-<version>.exe. It installs per-user and needs no admin
rights. The installer isn't code-signed yet, so Windows SmartScreen may warn you: choose
More info → Run anyway.Settings, logs, models and your .env live in %LOCALAPPDATA%\HeySpark.
Then, on either platform:
# 1. Install uv (https://docs.astral.sh/uv/); it manages Python 3.11 for you
git clone https://github.com/contextuai/hey-spark.git
cd hey-spark
uv sync --all-extras # plain `uv sync` skips the optional backends
# 2. Download the speech models into ./.models (about 200 MB)
uv run spark models download
# 3. Add your brain's key
cp .env.example .env # (Windows: copy) then set your key; see "Choose a brain"
# 4. Check everything, then talk to it
uv run spark doctor # every required check should show ✔
uv run spark # say "Hey Spark, what's the capital of Japan?"
No microphone handy? uv run spark --text lets you type questions and read answers, and
uv run spark --brain mock --text runs fully offline with no key at all.
| Brain | Set up | Good for |
|---|---|---|
| Claude (default) | Claude Code installed and signed in (or ANTHROPIC_API_KEY in .env) | The best tool use and connector work. Supports the researcher sub-agent and fast/deep model routing |
| Hermes Agent | Hermes Agent with its API server on, and its API_SERVER_KEY | Giving your Hermes agent a voice: it answers with its own model, tools, memory and skills |
| OpenAI-compatible cloud (OpenAI, Azure, OpenRouter, Groq, Together) | The provider's key in .env, and brain.backend: openai_compat | Using a model or account you already have |
| Local (Ollama, LM Studio, vLLM) | Run the server, pull a tool-capable model (e.g. qwen2.5:7b) | Fully local: with faster-whisper and Piper, nothing leaves your machine |
The easiest way to switch is the desktop app's Brain window, which also tests the connection
and checks that the model can call tools. See docs/openai_brain.md for the
provider presets and the config.yaml settings.
With Claude, brain.mode picks the models: auto (default) sends quick requests to
brain.fast_model and bigger ones to brain.deep_model; deep answers everything with
brain.deep_model and hands tool-heavy lookups to a researcher on a faster model (the best
answers, and the highest API cost). You can also switch by voice
("use the deep model", "back to auto").
The default config.yaml uses the bundled model assets/wakewords/hey_spark.onnx. Nothing to set
up. If it misses you or wakes on its own, tune wakeword.options.openwakeword.threshold.
Want your own wake word? tools/wakeword_trainer.ipynb trains
one for any phrase on a free Colab GPU in about an hour, with no recordings needed.
docs/wakeword.md walks through it step by step, plus the Porcupine
alternative.
attention.awake_s), so you can
keep talking without the wake word. It answers only speech that's meant for it, then plays a
soft chime when it falls asleep.projects.root_dir/weather-bot with git and a first commit, a private GitHub repo and a tracking
issue through your gh login (it never pushes), and can open Claude Code in the folder.shortcuts.json). Fifteen come built in: "rise and shine" for the morning briefing,
"what's next?", "sitrep", "check the post", "run a diagnostic", "house party protocol" and more.
See docs/commands.md.app.barge_in: true, saying the wake word while Spark is talking stops it.
Turn this on only with an echo-cancelling speakerphone.app.persona: butler in config.yaml). See docs/persona.md.Connectors are MCP servers defined in mcp_servers.json (with ${VAR} placeholders only; the
values come from .env). Add them by hand or in the desktop app's Connectors window. Each
server's tool policy lives in config.yaml under connectors::
allowed_tools are read-only and pre-approved.side_effecting tools (send, create, update) need a spoken "yes" every time. Spark says one
line about what it will do and waits. Silence, an unclear answer or "no" means it doesn't happen.destructive tools are blocked unless you set allow_destructive: true for that server.Create a fine-grained token for the repos Spark may see: Issues: Read and write, Pull requests: Read and Contents: Read.
In the Connectors window, open github (under From config files) and click Edit
config. Replace ${SPARK_GITHUB_PAT} with your token and press Save and test. Spark
moves the token to .env.
{
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
Switch it on. Spark uses GitHub's own labels for the tools: reading runs freely, creating an issue asks you first, and deleting is off. Try "What are the open issues in my-repo?"
This is GitHub's official github-mcp-server,
hosted by GitHub. GitHub's docs list Copilot access as a prerequisite for the hosted server
(Copilot has a free plan); if your account is refused, or you'd rather run it on your own
computer, see
docs/connectors.md. Paste the token itself: GitHub's VS Code example uses
${input:...}, a VS Code prompt that Spark can't show.
Choose Add connectors in the Connectors window and paste any MCP server's JSON (the
mcpServers block from its README or from Claude Desktop), or import Claude Desktop's servers in
one click. docs/connectors.md covers servers set up by hand in
mcp_servers.json and config.yaml, including Gmail, Google Calendar and Outlook through
Composio. The claude.ai Gmail and Calendar connectors are off by default: they work only through
a claude.ai login in your own Claude CLI, so they're for personal setups.
--debug-audio..env or the environment. A redaction filter masks them, and common token
shapes, in every log line.logs/transcripts.log, turn off
with logging.transcripts: false) and an activity history (history/, see activity: in
config.yaml). They never leave your machine.Everything is in config.yaml, and every key has a comment. Override any key per run
with an environment variable (SPARK_<SECTION>__<KEY>) or a CLI flag:
wakeword: { backend: openwakeword } # openwakeword | porcupine
stt: { backend: faster_whisper } # faster_whisper | deepgram
tts: { backend: kokoro } # kokoro | piper | elevenlabs | print
brain: { backend: claude_agent } # claude_agent | openai_compat | mock
$env:SPARK_STT__BACKEND = "deepgram"; uv run spark
uv run spark --stt deepgram --tts kokoro
uv run spark # voice mode
uv run spark --text # type questions, print answers (no audio devices)
uv run spark --text --speak # type questions, hear answers
uv run spark --no-tts # voice in, printed answers out
uv run spark --debug-audio # also save the last utterance to debug_audio/
uv run spark -v # debug logging (shows tool calls by name)
uv run spark desktop # the desktop window
uv run spark doctor # environment checks, each with a fix
uv run spark models download # whisper + the configured voice (Kokoro George by default)
uv run spark bench stt|tts|brain # latency benchmarks (median / p90)
uv run spark bench latency # live: wake word to first audio, end to end
uv run spark bench false-wake --minutes 30 # live: count false wakes on background audio
Per-turn latency breakdowns are appended to logs/latency.jsonl.
| Platform | Status |
|---|---|
| macOS 14+, Apple Silicon | Desktop app (.dmg) and source. Every build is self-tested in CI. New in 0.1.0, so please report anything odd. |
| Windows 11 | Desktop app (installer) and source. The platform Hey Spark was developed on (WASAPI audio). |
| Intel Macs, Linux | From source only, untested. The code is cross-platform Python; reports and pull requests are welcome. |
Everything runs on the CPU; no GPU is needed.
macOS (on a Mac with the Xcode command-line tools):
bash scripts/build_macos.sh
This freezes the app into build/dist/HeySpark.app, signs it ad hoc, runs its self-test and
writes build/installer/HeySpark-<version>-macos-arm64.dmg. Set MACOS_SIGN_IDENTITY (plus
APPLE_ID, APPLE_TEAM_ID and APPLE_APP_PASSWORD) to sign with a Developer ID and notarize.
Windows:
powershell -ExecutionPolicy Bypass -File scripts\build_windows.ps1
This freezes the app into build\dist\HeySpark\HeySpark.exe. With
Inno Setup 6 installed (winget install JRSoftware.InnoSetup),
it also writes build\installer\HeySpark-Setup-<version>.exe.
Releases are built by GitHub Actions (build-apps.yml), which
also builds both apps for pull requests that touch packaging or the desktop app.
uv run pytest -q # offline suite: fakes and synthesized audio, about a minute
uv run pytest -q -m live # hits real Claude / cloud APIs (needs keys)
uv run ruff check . && uv run ruff format --check .
The architecture in one line: every component is an abstract class in spark/interfaces.py, and
spark/registry.py maps the backend names in config.yaml to implementations. spark/app.py
is the state machine. CONTRIBUTING.md explains how to add a backend, run the
tests and send a pull request, and docs/design/SPEC.md is the original
design spec. Hardware checks that need a real mic are in
docs/dev/MANUAL_QA.md.
Hey Spark was built with Claude Code. The project's agents and
skills are in .claude/, and the original phase plans and reports are in
docs/dev/history.
Contributions are welcome: see CONTRIBUTING.md and the Code of Conduct. Please report vulnerabilities privately as described in SECURITY.md. Release notes are in CHANGELOG.md.
The code is MIT © 2026 Nagendra Rao Jogi.
The bundled wake-word model (assets/wakewords/hey_spark.onnx) is licensed separately under
CC BY-NC-SA 4.0 (non-commercial), because its training data has mixed licenses. See
assets/wakewords/LICENSE. For commercial use, train your own model on
data you're licensed to use, or use Porcupine. Licenses for the dependencies and the downloaded
speech models are listed in THIRD_PARTY_NOTICES.md.
Hey Spark is an open-source project from ContextuAI, makers of ContextuAI Solo.