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
September 28, 2026
FixMediaService

An impersonating admin may not set the member's status text

PUT /api/media/presence/status accepted a sudo session. It is now refused 403: unlike the heartbeat, which nobody chose to send and is ignored quietly, setting ...

Kamo·3w ago
FixMediaService

A session type without its own gate takes no messages, and a session is described only to its readers

POST **************** authorized CHAT, SUPPORT_TICKET and SOCIAL and then simply ended, so a POST, SYSTEM_BUG or EXEC2EXEC session fell through every gate: any ...

Kamo·3w ago
FixMediaService

Another org's agent, topic or AI member is a 400 naming the field

The sales agent and support topic checks threw a bare IllegalArgumentException that nothing caught, so saving one the org does not own answered 500. They, and t...

Kamo·3w ago
FixSecurityService

Close the AI identity edge cases the SP02 review left open

- A never-hired AI relabelled a person no longer keeps ai_state and the pause columns (master 6.1: NULL for a person). They are written only by SQL, so the ...

Kamo·3w ago
FixSecurityService

A lead you may not open takes no status change and no note

PUT /api/security/leads/{id} and POST /api/security/media/posts checked only the lead's organization, so a member without VIEW_UNASSIGNED_LEADS could change the...

Kamo·3w ago
FixAIService

An in-cluster model gets the time to read its prompt, inside the walk's budget

kamo-llm reads a prompt at about 110 tokens a second on k3m1 before it writes a word, so an E2 prompt past ~6k tokens spent E2's whole 60 s per-attempt bound (a...

Kamo·3w ago
FixAIService

A Hugging Face text stream is metered as the router counted it

HuggingFaceAdapter streamed through the interface's text-only default: every chunk was read for its text and nothing else, so no usage ever reached the executor...

Kamo·3w ago
FixAIService

An Ollama model's context is the window the server serves, not the trained one

OllamaDiscovery took model_info.*.context_length from /api/show: the window the model was TRAINED for. The registry listed granite4:tiny-h at 1 048 576 (and qwe...

Kamo·3w ago
FixVOIPService

Read a FreePBX sweep's mailboxes over one manager session

The voicemail sweep runs inside syncInstance's database transaction and asked FreePBX extension by extension, each over a fresh AMI connect and login. A manager...

Kamo·3w ago
FixEmailService

Basic sign-in asks SecurityService's real credential check

DavAuthFilter posted Basic credentials to **************** which never existed (405), so every username-and-password sign-in from iOS or DAVx5 was answered 401 ...

Kamo·3w ago
FixSecurityService

CalDAV and CardDAV sign in with a username and password, through every sign-in gate

EmailService's DavAuthFilter posted Basic credentials to **************** a route that never existed (405), so since 2026-03-19 no phone (iOS, DAVx5) could add ...

Kamo·3w ago
Fixkamo-internal

A retired AI's hiring checklist says Retired, not "Everything is set up"

A retire skips every open hire step and adds TASK_HANDOFF, so by the server's count the hire is COMPLETE and the checklist read "Complete — Everything is set up...

Kamo·3w ago
Fixkamo-internal

The confirmation dialog and the landings' empty state follow a dark theme

ConfirmationDialog was drawn in fixed Tailwind greys: a #1f2937 title, #6b7280 small print, a #f9fafb well and a #f3f4f6 disabled button, so on a dark paper the...

Kamo·3w ago
Fixkamo-internal

Hosted Computers on the App Shelf, and a pinned band that opens it

The launchpad's sectionsForTool had no case for hostedComputers and fell through a default to an empty list. A parent tool with no sections is dropped from the ...

Kamo·3w ago
Fixkamo-internal

The rest of the red on a clean install — registry mocks, shared-lib lookup, a typed fetch mock

- ToolDock and MaximizedTabStrip mocked ../registry/tools without windowIcon, which both now call for every window (af879443f), so 36 tests threw on the fir...

Kamo·3w ago
Fixkamo-internal

Render the dev machine menu hook in a real root, and cover the cloud session row

devMachineSections.test.tsx called useDevMachineSections() bare, outside any render. It worked while useTranslations (mocked) was the hook's only React dependen...

Kamo·3w ago
FixSecurityService

Clear the session cookie on the bare apex, not ".apex"

Logout built the cookie domain as ".kamocrm.com". Tomcat's RFC 6265 cookie processor refuses a leading dot and throws, so logout answered 500 "Logout failed" af...

Kamo·3w ago
Fixkamo-internal

The DNS page opens on the org's primary domain, not whichever row came first

The domains list comes back in database order. The platform organization has three roots (kamocrm.com, kamouniverse.com, localhost), and each of the last two pa...

Kamo·3w ago
FixSecurityService

A platform apex can't be removed from the DNS page

The platform organization gained kamouniverse.com as a second root domain, and the DNS page then offered "Remove" on kamocrm.com. Deleting it took kamocrm.com a...

Kamo·3w ago
FixTranslateService

Send en->es, en->fr and en->pl to LibreTranslate, not Bergamot's tiny models

Bergamot's enes, enfr and enpl models are student.tiny11 builds decoded with beam-size 1, and they write words that do not exist: the charter message "Ask an ad...

Kamo·3w ago
FixMCPGatewayService

A long workstation wake is asked about less often

An AI workstation's wake took 9 min 19 s against ComputeService's 75 s estimate (SP11 Task 30). Every computer_* call on a waking machine answered WORKSTATION_W...

Kamo·3w ago
FixVOIPService

Read FreePBX voicemail over the Asterisk Manager Interface

FreePBX's API has no voicemail messages: its voicemail module serves mailbox settings only. FreePBXProvider.getVoicemails GET /admin/api/api/rest/voicemail, a r...

Kamo·3w ago
FixEmailService

A mail domain, and every account on it, belongs to the organization that proved it

The KamoMail server's virtual_domains and virtual_users are shared by every tenant, and nothing stopped one tenant from writing to another's part of them: - PO...

Kamo·3w ago
FixKlusterServices

An AI's scroll scrolls Chrome

computer-use-linux 0.7.1 aims a scroll with ydotool, whose absolute move passes through 0,0 (the panel) on its way to the target, and sends the whole scroll as ...

Kamo·3w ago
FixSecurityService

Two more root-domain picks follow OrgDomains.primaryDomain

BranchTypeController's parentRootDomain (the create-branch wizard's web-alias zone) and PortalAccountController's api.<root> (borrower-portal sign-in) each took...

Kamo·3w ago
FixEmailService

An organization's NoReply domain is chosen by name, not by row order

The campaign From, the transactional Reply-To and the provider default domain each took "the first root org_domains row". Organization.getDomains() is unordered...

Kamo·3w ago
Fixkamo-internal

The MCP server form refuses an Expect header while it is typed

AIService's McpServerConfigs has refused an Expect header since SP05 Task 15, but the form's copy of that list (which says it is the same) lacked it, so the nam...

Kamo·3w ago
FixAPIService

Give a public chat's own turns the message rate limit, not the session one

Every public-chat path lives under /sessions/, so the limiter's contains("sessions") test put the conversation itself on the session-creation budget: 3 requests...

Kamo·3w ago
Fixkamo-shared-library

Keep the meeting transcript's ciphertext columns out of JSON

**************** has failed on main since f92765b1 added MeetingTranscript: transcriptTextCipher, transcriptVttCipher and summaryCipher had neither @JsonIgnore ...

Kamo·3w ago
FixAIService

Member chat offers the member's tools on Hugging Face models

HuggingFaceAdapter has sent tools and read tool calls since ff1f0ed, and the router routes TOOL_CALLING to it, but supportsToolUse() still answered false. ChatO...

Kamo·3w ago
FixMCPGatewayService

Name K3's NOT_ENROLLED and a missing phone system instead of misreading them

Found by SP05 Task 36 in production (sp00verify): - ApprovalClient read every 404 from K3 as "not deployed". SP10's K3 is deployed and answers 404 {reason:"N...

Kamo·3w ago
FixKlusterServices

Registry prune waits for CI before garbage-collect

garbage-collect sweeps every blob the tags didn't reference when it marked, so a push that lands mid-sweep keeps its tag and loses its manifest. On 2026-09-28 t...

Kamo·3w ago
FixMCPGatewayService

An approved action that met a "try again" answer keeps its approval

An approved re-execution on its original key that answered a notice (WORKSTATION_WAKING) or a definitive UNAVAILABLE/RATE_LIMITED released the key and its :appr...

Kamo·3w ago
FixAIService

E2's streamed usage chunk reports the metered usage, never zeros

Hugging Face, Google and Cohere text streams carry no usage event, so the assembled response counts 0 input and 0 output tokens. E2 built its stream_options.inc...

Kamo·3w ago
FixKlusterServices

The load verdict's budget is the amended acceptance bound, 9.0 s

Task 18 A-3 asked for p95 <= 4.0 s with 4 realtime streams and a batch. k3m1's Haswell CPU cannot reach it with faster-whisper-small: with the language given (S...

Kamo·3w ago
FixAIService

F1 takes back the auto it answers as its source language

A caller that echoes F1's from:"auto" is translated with detection instead of refused, and F2's placeholder name says why it exists. Ruling SP05-T32 (e).

Kamo·3w ago
FixConversionService

Claim a staged recording before processing it, so a long call is never stored twice

DaemonService hands ConversionService every row that is still unprocessed: on its poll tick, on every voip.recording.received message (which does not wait for a...

Kamo·3w ago
FixMediaService

One call per AI per meeting — a dial is claimed before kamoai-service is asked

Two overlapping requests to dial the same AI into the same meeting (a double click, two organizers, a person and the auto-join sweep) could each pass the not-li...

Kamo·3w ago
FixKlusterServices

Measure realtime load as SP13 calls it, and give each transcription 8 threads

The load probe's realtime sessions sent no language, so every turn paid Whisper's language detection (9.4 s alone at 3 threads on k3m1), a call shape no product...

Kamo·3w ago
FixKlusterServices

Run llama-server with one thread per core of its CPU limit

Ollama starts llama-server without --threads, so it counted k3m1's 24 physical cores and ran 24 compute threads inside the container's 8-core quota. The contain...

Kamo·3w ago
FixAIService

An AI member's own chat session routes, budgets and meters as actor AI

Member chat (/api/ai/sessions/**, /ws/ai-chat) routed every member as HUMAN, so an AI member's session (its SP11 workstation browser) reached UNVERIFIED models,...

Kamo·3w ago
September 27, 2026
FixKlusterServices

Ydotool's pointer lands where the AI aims it

ydotool 1.0 aims an absolute move by pushing its relative device to 0,0 and then by (x, y), and libinput's default adaptive profile doubled that second push. co...

Kamo·3w ago
Fixkamo-internal

A computer can be removed from the Computers tab

The remove dialog pins its challenge to the computer's own name ('Workstation'), and ConfirmationDialog upper-cased only what was typed before comparing, so no ...

Kamo·3w ago
FixKlusterServices

The gateway may frame its own resize sensor

Guacamole 1.5.5 notices a resize through an <object> that loads its own **************** The gateway's X-Frame-Options: DENY blocked it (ERR_BLOCKED_BY_RESPONSE...

Kamo·3w ago
FixKlusterServices

An AI workstation shows its organization's wallpaper

KubeVirt's console runs Xorg's VESA driver (RandR 1.1, no named output), so xfdesktop keys the AI desktop's backdrop by index, monitor0, and never read the moni...

Kamo·3w ago
FixKlusterServices

The AI's console X server takes the AI's clicks

LightDM's Xorg on :0, the AI workstation's desktop, adds udev input devices only through an input driver, and the golden image had none. It logged 'No input dri...

Kamo·3w ago
FixSecurityService

Watch and Take over open their connection in the gateway's client

Guacamole 1.5.5's client reads the #/client/<id> fragment with atob (one character per byte) and btoa's every connection name it lists, so a name outside Latin-...

Kamo·3w ago
Fixkamo-shared-library

An AI workstation's take-over and MCP token are written only by their own UPDATEs

control_member_id/_started_at and **************** are now updatable = false, and HostedComputerRepository gains the only writes they get: recordControl, clearC...

Kamo·3w ago
Fixkamo-internal

Keep the heading outline in order: section titles are h5, template names are not headings

The screenshot harness's axe pass found two heading-order faults. A job or persona template's name was an h6 inside its card's button (a heading may not sit ins...

Kamo·3w ago
Fixkamo-internal

The AI workstation panel says what is on screen only after the screen was read

ComputeService answers screen-state with 200 {state:'WAKING'} while the guest restarts after a wake or refuses the read, and {state:'ASLEEP'} just after a sleep...

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