KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
October 4, 2026
FixVOIPService

KamoPBX users get the password Kazoo requires, and no provider token is ever stored

Kazoo refuses a user that has a username and no password (400 data.password.required), so every KamoPBX extension and AI line failed; Luna's hire fell through t...

Kamo·2w ago
Fixkamo-internal

UI sweep B: theme tokens, plain errors, headings and live approvals on the member, charter, workforce and workstation screens (SP98 T21)

Task 20's harness on 33 screens x 16 shots (light/dark, 1440/390, empty/loading/error/full): axe serious or critical on 255 of 528 shots before, 15 after, all o...

Kamo·2w ago
FixMediaService

The meeting page link is on the organization's console, chosen by OrgLinkHosts

MeetLinks.meetingPage read the console host off the Kamo Meet join URL: meet.<domain> became internal.<domain>. The join URL names whichever host the room's cre...

Kamo·2w ago
FixMediaService

A reply may quote only a message in its own conversation

The member chat send resolved the client's parentId with a bare lookup by id and built the reply quote from whatever it found: the parent's text, its author's n...

Kamo·2w ago
FixEmailService

The AI signature disclosure names the company by its spoken name

An AI member's email disclosure filled {organization} with the organization's title (its letterhead), so Luna's mail said "an AI member of the KamoCRM Inc. team...

Kamo·2w ago
FixKlusterServices

Nothing in the mail namespace reaches the session store

rspamd now keeps its data in its own Redis, so the platform Redis drops its mail_rspamd user and admits only the kamo namespace; rspamd's ConfigMap drops the ke...

Kamo·2w ago
FixSecurityService

Assigning a computer reads the one member, not the whole organization

HostedComputerAccess.isMember loaded every member of the organization to test one id, and emailOf, called right after it on the same assign path, did the same t...

Kamo·2w ago
FixKlusterServices

A member's xrdp desktop shows the organization's wallpaper

xfdesktop draws the backdrop stored under the X server's RandR output name. A member works in an xrdp session, whose xorgxrdp server names its output rdp0, but ...

Kamo·2w ago
FixKlusterServices

A take-over ends only once its VNC password is sealed

VncAccess cleared the take-over in memory and then wrote the password file. When the write failed, x11vnc kept accepting the take-over password while the agent ...

Kamo·2w ago
FixConversionService

A blank internal secret answers 503 on /transcribe too

/transcribe answered 403 when **************** is not configured; master §7 item 13 asks 503 of every internal endpoint, which its sibling /transcribe/detailed ...

Kamo·2w ago
Fixkamo-asterisk-support

The AI endpoint writer does nothing until FreePBX has generated its endpoint file

Without pjsip.endpoint.conf nothing is known about which extensions exist, so Apply wrote empty managed AI sections (and reloaded), which would take every AI ex...

Kamo·2w ago
FixAIService

Note why the ulaw mapping is unreachable today

Review (el-format-review-1.md) flagged that AudioController.SPEECH_FORMATS has no "ulaw" entry, so nothing reaches that arm of ElevenLabsFamily's output_format ...

Kamo·2w ago
FixEmailService

Key the cross-root retry on alias-domain membership, not root-or-not

Round 3 review (email-fix-review-3.md) confirmed round 2's BLOCKER fixed (walked sage@kamouniverse.com through both the app code and Postfix's own platform-alia...

Kamo·2w ago
September 29, 2026
FixAIService

ElevenLabs speaks the format a caller actually asked for

The adapter hard-coded output_format=mp3_44100_128 on every call, so a caller asking E5 for wav (or kamoai-voice asking for pcm, on every phone call) still got ...

Kamo·3w ago
FixEmailService

Retry every owned domain unconditionally, and drop the +tag fold

Round 2 review (email-fix-review-2.md) found the round 1 fix for MAJOR #3 (multiple root domains) still reopened the original bug: - BLOCKER: kamouniverse.com ...

Kamo·3w ago
FixMediaService

Trim the mirrored-alias check, and stop it forcing a lazy load per member

Review findings on the AI-full-name fix (4ea53c5): - LOW: the mirrored-username comparison didn't trim either side, so an alias saved with stray whitespace (...

Kamo·3w ago
FixSecurityService

The AI-dispatch audit trail names people the same way chat does

**************** hand-duplicated MemberDisplayNames' pre-fix precedence (usernameAlias wins unconditionally over the real name), with its own comment warning th...

Kamo·3w ago
FixMCPGatewayService

An upstream image follows the wrapped text instead of filling it (SP98 T25A)

A workstation screenshot is an MCP image block of about 250 KB of base64. The untrusted wrap serialized it into the result text, so the text budget held base64 ...

Kamo·3w ago
Fixkamo-internal

Name the unknown recipient instead of a generic send failure

Review round-1 MAJOR: EmailService's RecipientDomainValidator now answers 422 RECIPIENTS_UNKNOWN before a send is attempted whose recipient names one of the org...

Kamo·3w ago
FixEmailService

Close three false-refusal paths the review found in RecipientDomainValidator

Independent review of D-luna-1 (email-fix-review-1.md) found two BLOCKERs and a MAJOR, each a real false refusal of legitimate mail, demonstrated from code alre...

Kamo·3w ago
FixMCPGatewayService

Use the RECIPIENTS_UNKNOWN constant instead of a string literal

Review round-1 NIT: the constant was declared and never referenced, so it and the literal in withDirectoryHint could silently drift apart if either were ever ed...

Kamo·3w ago
Fixkamo-asterisk-support

AI extensions offer G.711 only, so the AI leg is never G.722

livekit-sip answers an offer with the codec it ranks highest, not the first one offered (media-sdk sdp.SelectAudio: G722 -5 > PCMU -10 > PCMA -20). With allow=!...

Kamo·3w ago
FixMediaService

An AI member's chat name is the full name, same as a human's

**************** trusted Member.usernameAlias over the account's own full name whenever the alias was non-blank. MemberCreationService mirrors the account's use...

Kamo·3w ago
Fixkamo-internal

UI sweep A: theme tokens, plain errors, empty states and phone layouts (SP98 T20)

AI settings (registry, routing, MCP, workforce controls, Security & Models), personas, Platform admins and the assistant's model picker, from a static-harness s...

Kamo·3w ago
FixKlusterServices

The platform main line survives a boot, and 8200 is the team line

Luna's go-live (2026-09-28) wrote [kamo-main-luna] into extensions_custom.conf and KAMO_LUNA_EXT / KAMO_LUNA_MAX_RING into globals_custom.conf by hand on the ho...

Kamo·3w ago
FixAIService

The brief words an action class it has no case for, so a new shared-lib class never breaks the build

CharterCompiler.actionClass gains default -> words(name): the enum name in lower-case words, first letter capitalised (PLACE_INTERNAL_CALL reads "Place internal...

Kamo·3w ago
FixMCPGatewayService

A rejected guessed recipient tells the model to look the person up

EmailService now refuses a send whose recipient names one of the organization's own mail domains but matches no mailbox, alias or member (RECIPIENTS_UNKNOWN, a ...

Kamo·3w ago
FixEmailService

Refuse a guessed recipient at the org's own domain before it reaches the mail server

Luna (AI member) asked to email the owner and guessed **************** instead of looking up the real address (sage@kamocrm.com). kamouniverse.com is one of the...

Kamo·3w ago
FixAIService

A contact never touched before is held to quiet hours, in the organization's zone

SP98-A-11. The outreach gate returned right after consent when the contact had no state row, so a cold first touch skipped quiet hours (and the touch budget): a...

Kamo·3w ago
FixAIService

A copilot tool call's idempotency key carries its turn

SP98-A-12. Member chat keyed a Tool Plane call chat:<session guid>:<tool call id>. A call id is unique only within its turn: HuggingFaceAdapter numbers id-less ...

Kamo·3w ago
FixAIService

Record-sent and record-failed answer 400 like evaluate when the call names no sender

SP98-A-10. With neither agentId nor memberId, the two record calls fell into the persona branch with a null agent: an unattributed touch was written, and a send...

Kamo·3w ago
FixAIService

A widget turn is not one transaction, so a swallowed read no longer fails the send at commit

SP98-A-9. PublicAiChatService.sendMessage ran the whole visitor turn in one @Transactional. The hand-off tool's escalation titles (the persona's version or agen...

Kamo·3w ago
FixMCPGatewayService

An AI's task without an assignee is its own

tasks_create without an assignee left an AI's task unassigned in its Inbox. SP02's TASK_HANDOFF moves only tasks assigned to the retiring AI, so self-planned wo...

Kamo·3w ago
FixMCPGatewayService

An approved action runs past its run's call cap; a dry run names read-all

SP98-K-1 (SP05 final review M1): SP10 re-executes an approved action under the run id that asked for it. A run that worked on to its maxToolCallsPerRun answered...

Kamo·3w ago
FixMCPGatewayService

Calendar_free_busy answers who is busy when, never what the block is called

A busy block's title (and its event id) can come from an outside invitation, and calendar_free_busy is not an untrusted tool (SP13's voice bookings call it, and...

Kamo·3w ago
FixMCPGatewayService

An MCP server's refresh no longer closes the client calls are using

The 10-minute refresh (I3) and an admin's test evicted the pooled client before listing, which dropped a legacy SSE stream or DELETEd a Streamable HTTP session ...

Kamo·3w ago
FixKlusterServices

An AI workstation sleeps with its desktop stopped, and wakes to a fresh one

Measured on a throwaway -ai4 workstation (SP98 Task 16), the wake stalled because Xorg does not survive a resume: with no KMS driver it drives the console throu...

Kamo·3w ago
FixMediaService

The missed-message sweep reads the recipient's link hosts before its transaction

SP98-D-9. prepareSend read the recipient organization's domain rows lazily, as a late statement of the sweep's transaction, to choose the letter's console host;...

Kamo·3w ago
FixMediaService

Chat cards queue boundedly, give up on a hung EmailService in seconds, and never double a mention

SP98-D-7: ChatNoticeDispatcher ran on two threads with an unbounded queue while MemberNotificationClient waited up to 5 s + 30 s (the letter client's chat.email...

Kamo·3w ago
FixMediaService

A send looks up its AI turn limit and its sender's photo before its transaction opens

SP98-D-5 and D-9. A chat send asked SecurityService for an AI member's charter limit (up to 1 s + 2 s) inside the open send transaction, and read the sender org...

Kamo·3w ago
FixAIService

An access policy and its lists are one write, and tenants never see a Kamo service's in-cluster address

SP98 Task 1 A-7 and A-8. - A-7: AccessPolicyWriter saves the policy and replaces its lists in one transaction, retried whole on a Yugabyte conflict (@RetryOnD...

Kamo·3w ago
FixAIService

One verification run per provider across both pods

SP98 Task 1 A-6. A provider's verification (up to 200 probes on the tenant's key) holds a Redis lease, SET NX with a 10-minute TTL renewed before every probe an...

Kamo·3w ago
FixAIService

Feedback only under its own conversation, no folder cycles, logged and key-free failures, and a visitor's conversation searches the public knowledge base

SP98 Task 1 (A-1 to A-5, and the controller's knowledge-audience addition): - A-1: rating a message answers 404 unless the message belongs to the {guid} conve...

Kamo·3w ago
September 28, 2026
FixAIService

A reworded GPT-6 tool refusal is warned once, and a full effort memory forgets the oldest

Review follow-ups for the reasoning_effort none fix: - A 400/422 that names reasoning_effort and tools but is not the refusal ToolEffortFallback reads logs on...

Kamo·3w ago
FixKlusterServices

A quiet meeting keeps its AI (media_timeout 20m), again

Reapplies 960331f, reverted in 5d70873 on the wrong suspicion: the RTP loss seen right after that deploy was fail2ban's ban on 47.181.8.84 (fixed in the previou...

Kamo·3w ago
FixKlusterServices

Livekit-sip's RTP never takes the router, and its hairpin is never banned

FreePBX names its public address (pbx.k1.kluster.kamocrm.com) in the SDP and the Contact it gives livekit-sip, which is outside local_net, so RTP and in-dialog ...

Kamo·3w ago
Fixkamo-internal

A chat box or tool window no longer takes the wall's keys (SP98 T18)

/notes treated any role="dialog" as a modal, so while the owner's Exec2Exec chat box (or any chat box or tool window, a floating note among them) was open, N, C...

Kamo·3w ago
FixAIService

A chat turn that offers tools requires TOOL_CALLING, and a failed probe clears supports_tool_use

Member chat and the public widget routed TEXT_GENERATION only and attached tools afterwards, so gpt-6-luna (TOOL_CALLING FAILED) took every tool-bearing - The ...

Kamo·3w ago
FixAIService

A GPT-6 tool call is asked once more at reasoning_effort none, and the model is learned

reasoning_effort "none" and refuse the default effort they apply when none is sent, so every TOOL_CALLING probe and agent step on gpt-6-luna/sol failed. - Reas...

Kamo·3w ago
Fixkamo-internal

Name the image pickers' Scale sliders too (SP98-Q-1)

The harness's axe pass over the image pickers found the Scale slider beside each select unnamed the same way (axe label, critical). Its caption now names it.

Kamo·3w ago

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing