KamoCRM

Live Change Log

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

18,397
Total Changes
6,532
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,397AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService621InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,693kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,826kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,532Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
October 5, 2026
FixVOIPService

The phone badge counts voicemails in your own mailbox, not the whole phone server

The nav phone icon's voicemail line counted every unread message on the member's phone server **************** on the premise that the softphone's Voicemail tab...

Kamo·1mo ago
Fixkamo-internal

Items of a section the editor does not know survive load and save (KamoCollab CP03 T1)

parseCharterItems dropped every item whose section the static mirror does not list, and every host (roles, departments, job titles, teams, the member card, the ...

Kamo·1mo ago
FixEmailService

A provisioning race Yugabyte reports as a serialization conflict no longer 500s the calendar widget (SP98 T26)

listCalendars provisions the shared and the personal calendar find-then-create, each in its own transaction, and treated a lost race as done only when it surfac...

Kamo·1mo ago
FixVOIPService

A shared voicemail box tells only members who manage the phone server (SP98 T26, final review M-2)

The box's list, audio, read and delete answer only MANAGE_VOIP_SETTINGS (or a god-mode window), and Settings' picker offers only those members, but SharedVoicem...

Kamo·1mo ago
Fixkamo-internal

A second Verify says a check is already running, not "something went wrong" (SP98 T26, final review M-1)

AIService answers a Verify while the provider's check lease is held with 409 verify_in_progress, and one whose lease cannot be taken with 503 verify_unavailable...

Kamo·1mo ago
FixKlusterServices

A help article no longer OOMKills the Tamil engine

KBService sends a help article's Lexical JSON to be translated: one long line with few sentence ends, ~0.46 model tokens a character. A 3,980-character article ...

Kamo·1mo ago
FixMCPGatewayService

A colleague call refused for consent or hours says how to cite their own request (SP95-T29-1)

Task 29 step 3, live: the owner asked an AUTONOMOUS AI to call them. The model called phone_call without onRequestOf (nothing needed approval), K6 refused NO_VO...

Kamo·1mo ago
FixMCPGatewayService

A perception read that hands over nothing from outside taints the run INTERNAL, so a cited request can stand (SP95-F-1)

Every run's PERCEIVE calls notifications_list, mail_list_unread and calendar_list_events with the run id. All three are untrusted and none said where its conten...

Kamo·1mo ago
Fixkamo-internal

On a phone the date and its prev/today/next cluster share the toolbar without overlapping (SP98 T22)

Found live at 390px as the sp00verify owner: the app's rail leaves the toolbar about 280px, and the month title ran on under the prev/today/next cluster, so it ...

Kamo·1mo ago
Fixkamo-internal

On a phone the date and its prev/today/next cluster share the toolbar without overlapping (SP98 T22)

Found live at 390px as the sp00verify owner: the app's rail leaves the toolbar about 280px, and the month title ran on under the prev/today/next cluster, so it ...

Kamo·1mo ago
Fixkamo-internal

The countdown chip reads at AA on an unread row and in a producer's own colour (SP98 T22)

Found live as the sp00verify owner: on /notifications an overdue chip on an unread row read 4.32:1 (#c62828 on #e8dfe7). The chip was see-through, so the row's ...

Kamo·1mo ago
Fixkamo-internal

The countdown chip reads at AA on an unread row and in a producer's own colour (SP98 T22)

Found live as the sp00verify owner: on /notifications an overdue chip on an unread row read 4.32:1 (#c62828 on #e8dfe7). The chip was see-through, so the row's ...

Kamo·1mo ago
FixMediaService

Build each chat snapshot from a graph loaded now, so a lost org-graph event costs one minute, not two (KamoCollab CP02 T17)

The chat policy snapshot is itself a 60 s cache of member facts. Built from OrgGraphCache.get, it could start from a graph already up to 60 s old and keep it fo...

Kamo·1mo ago
FixSecurityService

The failed-recalculation log names the repair path as /teams/{id}/recalculate-rights

SLF4J has no brace escape, so "{{id}}" was logged literally. "{id}" is not a placeholder and prints as written; the test now pins the path an operator would typ...

Kamo·1mo ago
Fixkamo-internal

An AI with no computer, or whose computer cannot be read, keeps the AI room's heading outline (SP98 T21)

The live look after the sweep found an AI with no computer: the Workstation card's h3 was followed by EmptyState's h6 title, a two-level skip (axe heading-order...

Kamo·1mo ago
Fixkamo-internal

An AI with no computer, or whose computer cannot be read, keeps the AI room's heading outline (SP98 T21)

The live look after the sweep found an AI with no computer: the Workstation card's h3 was followed by EmptyState's h6 title, a two-level skip (axe heading-order...

Kamo·1mo ago
FixTranslateService

A long text that lost a protected name is translated whole, not piece by piece

Rebuilding a reply around the names takes one engine call per piece. For a help article that is dozens of calls, past KBService's 120-second read timeout, so a ...

Kamo·1mo ago
FixTranslateService

Ask LibreTranslate again when it copies a Title-Case label

Argos reads a short capitalised label as a name and hands it back untranslated: live on 2026-10-05, en->tr "Delete" -> "Delete" and "Cancel" -> "Cancel", en->ar...

Kamo·1mo ago
FixTranslateService

Never send a brand name to an engine, for every caller

The es locale rendered RingCentral as "RingConexión central" and JustCall as "SóloCall"; zh read "AI Members" as Amnesty International members. The dictionary's...

Kamo·1mo ago
Fixkamo-internal

An AI member's line has an outside-calls switch in the extensions table, so one hired while new extensions were denied can be allowed (SP93 final fix)

The AI chip now sits beside the switch instead of replacing it, with the hint that the line starts with the phone server's setting for new extensions. VOIPServi...

Kamo·1mo ago
FixVOIPService

An AI member's line has an outside-calls switch like anyone's, so one hired while new extensions were denied can be allowed (SP93 final fix)

V12 (PUT **************** no longer refuses an AI line with 409 AI_LINE. A new AI line starts as the phone server's setting for new extensions says (SP93-T5-1),...

Kamo·1mo ago
FixVOIPService

Recordings and voicemail audio are written, not refused with a 500

The recording and voicemail audio endpoints are declared ResponseEntity<?>, because they also answer JSON, and returned a StreamingResponseBody lambda. Spring p...

Kamo·1mo ago
FixVOIPService

Recordings and FreePBX voicemail play: the pod reaches MinIO

VOIPService streams every call recording and every FreePBX voicemail in Settings out of MinIO, but it never configured MinIO: the shared MinIOConfig defaults ap...

Kamo·1mo ago
Fixkamo-internal

UI sweep C: theme tokens, plain errors, empty states and keyboard reach on calls, meetings, notifications, chat, tasks, notes, calendar and mail (SP98 T22)

- Light materials (chat, SMS, softphone, compose, the notes board) are declared to MUI by LightSurface, and draw from one palette each (chatColors, notesPalet...

Kamo·1mo ago
Fixkamo-internal

UI sweep C: theme tokens, plain errors, empty states and keyboard reach on calls, meetings, notifications, chat, tasks, notes, calendar and mail (SP98 T22)

- Light materials (chat, SMS, softphone, compose, the notes board) are declared to MUI by LightSurface, and draw from one palette each (chatColors, notesPalet...

Kamo·1mo ago
FixSecurityService

A created member's activation welcome waits for the commit, so a swallowed 40001 can no longer turn the create into a silent rollback

POST **************** answered 200 with a member id and a user id that never existed (KamoCollab CP00 Task 0, 2026-10-05, sp00verify). The activation welcome ra...

Kamo·1mo ago
October 4, 2026
FixSecurityService

A rename clears the phonetic spelling of the name it changed (SP94-F-1)

The AI's speech pairs the org's CURRENT name with whatever spelling is stored. The Getting-Started wizard renames through PUT /org/{id} without sending a spelli...

Kamo·1mo ago
FixVOIPService

A FreePBX address is judged when it is set or moved, and amiPort must be a port

The FreePBX settings form sends back every field it shows. Judging each submitted baseUrl and amiHost refused K1M1, whose two addresses are cluster-internal bec...

Kamo·1mo ago
FixKlusterServices

Rotate the kamo_ops password

The operator password (Secret kamo/redis-ops-auth) reached an agent transcript in KamoAI SP01 Task 38 and had never been rotated (SP98-M-2). It was rotated live...

Kamo·1mo ago
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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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·1mo 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