v1.6.8
First community PR ever merged on Frogman. Thanks to Kieran Byrne (FreePBX UK / @kierknoby).
How this one happened
We launched an AI section on the FreePBX forum on May 11th. Kieran showed up a couple of days later, started poking at Frogman, and decided to write something. On May 15th he opened a PR- the first the repo has ever had adding a natural-language layer in front of the chat parser. Seventeen commits later, all in one afternoon, every review note was addressed. He was pair-coding with his own AI; I review alongside Claude; the back-and-forth ran through forum DMs as paste-ready prompt blocks his pair could chew on. We tested it on the dev box, the audit log captured the chain from raw English to executed tool end-to-end, and it merged today.
Two humans, two AIs, one merged PR.
What it adds
Tools/Interpret.php — a deterministic, regex-driven layer that sits between users and ChatParser's strict pattern waterfall. It rewrites conversational, polite, urgent, or otherwise human phrasing into the canonical command forms ChatParser already understands, then re-parses with fuzzy matching disabled.
Pure text-in / text-out. No database, no session state, no LLM, no schema changes.
Risk-gated confidence
Rewrites only auto-run when both the rule and the resulting command-shape agree it's safe:
| Risk class | Threshold |
|---|---|
| read | 0.78 |
| write | 0.88 |
| state | 0.91 |
| unknown | 0.95 |
Partial matches surface a "tried reading that as X — please rephrase" prompt instead of guessing.
What it handles
- Request wrappers — "please", "could you", "i would like to", "just"
- Phrasal verbs — "have a look at" →
show, "switch off" →disable, "spin up" →create, "decommission" →delete - Assistant-directed abuse — "you idiot show extension 247020" →
show extension 247020 - Trailing urgency — "… ASAP", "… right away", "… when you can"
- Numeric shorthand — "delete 247020" →
delete extension 247020(anchored to leading write verbs) - State phrases (anchored on a 3–6 digit extension number):
<ext> is sick / off / out / away→enable dnd on <ext><ext> is back / available→disable dnd on <ext><ext> is wfh / working from home / remote→set followme <ext>
- Correction-aware cancel — "no no", "that's not what I meant", "wrong command", "cancel that", "you misunderstood" cancel a pending confirm instead of being read as a wizard answer
Audit log integration
The v1.6.7 columns light up automatically. Chat-origin rows in oc_audit_log now show both forms end-to-end:
chat_input— raw user messageinterpreted_as— canonical command after rewrite
Non-chat invocation paths (HTTP API, GraphQL, CLI, MCP) leave both NULL.
Off-switch
Set kvstore key frogman_interpret_mode to off and Interpret short-circuits cleanly to existing behaviour.
Also
Removed a raw ANSI escape from the frogman> prompt in fwconsole frogman:chat that displayed as literal \033[36m...\033[0m on some terminals.
220 tools, unchanged.