KamoCRM

Live Change Log

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

17,395
Total Changes
5,910
Features
5,260
Fixes
30
Projects
Filter by project
All Projects17,395AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,830TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,328kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,637kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,910Fix5,260Other993Performance165Refactor278Revert23Style42Test159Upgrade1
September 29, 2026
FeatureSecurityService

SP96 hire options to leave out the phone extension and the workstation

An AI hire's create body takes aiPhoneExtension and aiWorkstation (JSON booleans, true when absent). A step left out is created SKIPPED with NOT_REQUESTED_AT_HI...

Kamo·3w ago
Docskamo-internal

SP98 T20 rulings (UI sweep A)

Kamo·3w ago
Docskamo-internal

Ledger — 1 entries

Kamo·3w ago
Docskamo-internal

Ledger — 1 entries

Kamo·3w ago
Docskamo-internal

Ledger — 1 entries

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
FeatureAIService

A voice's gender, from its record, a curated table or its style, and vendors' genders kept by the probe

SP96 Task 7. VoiceGender {FEMALE, MALE, NEUTRAL, UNKNOWN} with a lenient parse, and VoiceGenders.of(type, model, record) applying spec 5.3 in order: the convent...

Kamo·3w ago
FeatureSecurityService

SP96 sex on the member profile and at creation, gated as personal data

GET /api/security/members/{id} names sex (FEMALE, MALE or null) only to a caller who may read it (MemberSexAccess, spec D3); the key is absent for anyone else. ...

Kamo·3w ago
DocsMCPGatewayService

The Tool Plane needs per-member sticky routing before a second replica

The replicas comment said scaling needed only a PodDisruptionBudget. Since SP05 Task 31 each pod pools its own clients, and an AI workstation's bridge runs one ...

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
Docskamo-internal

Ledger — 1 entries

Kamo·3w ago
Docskamo-internal

Ledger — 1 entries

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
Featurekamo-shared-library

SP96 MemberSex, Member.sex and a gender on the voice record

members.sex is a nullable STRING column (FEMALE | MALE, null = not specified), so an AI member can speak with a matching voice. The TTS and REALTIME_AUDIO voice...

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
PerformanceMediaService

A turn-only fan-out reads no roster, ticket id or conversation title

SP98-D-6. ChatFanoutService.prepare resolved the roster, the support ticket's id and the conversation's title for every request, including the turn-only ones (a...

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
FeatureAIService

The ai_member_voices table and the charter voice-pin migration, as hand-applied SQL

SP96 Task 2. The table remembers an AI member's voice per TTS model (spec 5.1); the migration moves every charter VOICE pin to a CHOSEN, MIGRATED, preferred row...

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
FeatureSecurityService

SP96 DDL for members.sex, pinned by a contract test

A member's sex is a nullable VARCHAR(16) (FEMALE | MALE, NULL = not specified), hand-applied in SP96 Task 3. The contract test keeps the file re-runnable, with ...

Kamo·3w ago
September 28, 2026
Docskamo-internal

Ledger — 1 entries

Kamo·3w ago
Docskamo-internal

Ledger — 1 entries

Kamo·3w ago
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
RevertKlusterServices

Media_timeout back to livekit-sip's default

957fc4f re-applied a 20-minute media timeout for a quiet meeting's AI leg. With the fail2ban ban on 47.181.8.84 lifted and FreePBX sending RTP straight over the...

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