Conversation
Users can add custom tools and system prompt extensions by creating a voice-config.json file. Supports declarative shell-based tools with parameter interpolation, an optional built-in runCommand tool, and extra system prompt text appended to the default Kimaki prompt.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e05d3a3f84
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return template.replace(/\{\{(\w+)\}\}/g, (_, key) => { | ||
| const value = args[key] | ||
| if (value === undefined || value === null) return '' | ||
| return String(value) | ||
| }) |
There was a problem hiding this comment.
Escape interpolated arguments before executing shell tools
The command templating currently injects raw tool arguments directly into a shell string, so placeholders containing quotes or shell metacharacters can break out of the intended command and run arbitrary extra commands (for example a query value like foo' && rm -rf ~ # in a quoted template). This means a supposedly constrained custom tool can become equivalent to unrestricted shell execution even when enableRunCommand is off, and benign inputs with apostrophes can also fail unexpectedly.
Useful? React with 👍 / 👎.
| if (config.tools) { | ||
| for (const toolConfig of config.tools) { |
There was a problem hiding this comment.
Guard non-array
tools config before iterating
Because loadVoiceConfig() trusts parsed JSON shape, getVoiceCustomization() assumes config.tools is iterable and does a for...of directly; if a user writes an invalid but parseable config such as "tools": {} or "tools": "...", this throws at runtime and aborts voice setup instead of gracefully falling back to defaults. Since this file is intended for manual user editing, malformed shapes should be handled defensively.
Useful? React with 👍 / 👎.
|
Really cool thank you! I was using this feature a lot with the previous Google Voice model too, then they removed it and replaced it with a much worse one. I really hope they release a new better model soon |
I customized the voice assistant to be able to do more than orchestrating the openagents sessions. Now it can check my emails, calendar etc etc too!