KamoCRM

Live Change Log

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

18,391
Total Changes
6,526
Features
5,537
Fixes
30
Projects
Filter by project
All Projects18,391AIService276APIService177BillingService161ConversionService117DaemonService146DocsService240ESigService93EmailService619InitializerService344KBService162KlusterServices769MCPGatewayService277MediaService620RAGService79SecurityService1,995TranslateService62VOIPService265VectorService11kamo-apps26kamo-asterisk-support28kamo-capcha17kamo-capcha-widget4kamo-internal8,691kamo-login342kamo-marketing642kamo-nowww20kamo-register213kamo-shared-library1,824kamo-signer-monorepo57kamolos114
Filter by type
All TypesBuild23CI525Chore794Docs3,286Feature6,526Fix5,537Other1,001Performance174Refactor281Revert23Style45Test175Upgrade1
October 11, 2026
FeatureAIService

The voices an SI not hired yet may speak with, for the hire wizard and the draft check (KamoCollab CP10 Task 4)

V1 GET /api/ai/voices/options (a person holding MANAGE_MEMBERS, MANAGE_MEMBER_SECURITY or MANAGE_AI_WORKFORCE, god counting; never an SI's own session) and its ...

Kamo·4w ago
FeatureAIService

The leak check, one fail-closed SI review of a draft against withheld excerpts (KamoCollab CP07 Task 14)

POST **************** (KamoAI secret only) answers {verdict: CLEAN|LEAKS|UNSURE, reason}. LeakCheckService builds a fixed, provider- and tenant-neutral prompt a...

Kamo·4w ago
FixAIService

The first-contact approval rule says it is about reaching out, not saving a contact

"Contacting someone for the first time" read to an SI as "creating a contact needs approval", and it deferred an owner's request to save a contact record. The b...

Kamo·4w ago
TestAIService

Golden files of today's briefs, captured before any personality change (KamoCollab CP06 Task 3)

Four charter views in the shape SecurityService serves (a full member, a voice-only SI member, a job-title persona, and a member view carrying CP03's unconfigur...

Kamo·4w ago
FeatureAIService

The brief names team chat and releases only once a charter does (KamoCollab CP05 Task 8, R1-3)

CharterSnapshot.Approval reads the resolved approval's source level (absent reads DEFAULT). CharterCompiler renders no "What needs approval" line for SEND_INTER...

Kamo·4w ago
FeatureAIService

The brief's words for team chat, SEND_INTERNAL_MESSAGE (KamoCollab CP04 Task 12)

An SI's brief now reads "Messaging colleagues in team chat" for the new action class in its approvals and escalation sections, instead of the default arm's "Sen...

Kamo·4w ago
October 6, 2026
FeatureAIService

An AI member's call and meeting options, beside its voices (SP92 calls)

keywordTransfer (default on), keepFullTranscript (default off) and meetingMode COMPANION | CONVERSATION (default COMPANION), in ai_member_call_options (hand-app...

Kamo·1mo ago
October 5, 2026
TestAIService

Pin Luna's voice view before and after Task 21 sets her sex (SP96)

Sp96LunaVoiceExpectationsTest runs the resolver over production's inputs, read 2026-10-05: her migrated Eleven Flash v2.5 / Bella row and the five TTS voice lis...

Kamo·1mo ago
FeatureAIService

The brief leads a team's purpose with the team's name (KamoCollab CP01 T17)

A TEAM PURPOSE line now reads "As a member of the {title} team: ", after the job title, like the ROLE, DEPARTMENT and JOB_TITLE leads. VERSION stays (D19): no b...

Kamo·1mo ago
FeatureAIService

The brief names DEPARTMENT_MANAGER as the head of your department (KamoCollab CP02)

DEPARTMENT_MANAGER now routes to the department head (the org graph's departmentManagerCandidates), so the brief says "the head of your department". CharterComp...

Kamo·1mo ago
October 4, 2026
FeatureAIService

E5 speaks the org's name and short name in the phonetic spellings the org set (SP94)

The speech model is sent the caller's input with every whole-word mention of the org's name or short name replaced by its phonetic spelling (OrgPhoneticSpeech)....

Kamo·1mo ago
FeatureAIService

Remove the charter voice catalogue, GET /api/ai/charter/voices (SP96)

The charter no longer pins a voice: an AI member remembers one per speech model, read and chosen at **************** The charter editor's voice picker was the c...

Kamo·1mo ago
FeatureAIService

The member voice endpoints, to read and choose an AI member's voice per speech model

SP96 Task 10 (spec §5.5): - GET **************** the router's TTS candidates for the AI (actor AI with the member; never AiCallRuntime.guard, so a paused or r...

Kamo·1mo ago
FeatureAIService

The brief says which company the AI works for, and words a call to a colleague (SP95)

The charter profile SecurityService sends now carries orgName, the org's spoken name (short name, else display name, else legal name; SP95 D15). The brief's ide...

Kamo·1mo ago
FeatureAIService

An org that ranks OpenAI transcription first streams STT through it, and every ticket names its session dialect (SP95)

transcription model was dropped as ADAPTER_UNSUPPORTED and every streaming STT ticket went to Kamo Speech on CPU. Each catalogue row now names the session (the ...

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
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
FeatureAIService

E5 speaks with an AI member's remembered voice, its preferred model first, and names the voice it sent

For an AI subject (the AI's own session, or the internal twin with ?memberId=) every TTS candidate is sent the voice the SP96 resolver decides, and the answerin...

Kamo·1mo ago
FeatureAIService

Computer use is earned through Kamo's own computer_* tools by any provider (SP98 T25A)

native computer tool with a beta header and passed on any 2xx. AI members drive their workstation through the Tool Plane's computer_* tools, never a vendor's na...

Kamo·1mo ago
FeatureAIService

An AI member's remembered voice per speech model, and the resolver that keeps or re-picks it

The ai_member_voices store (JDBC, TransientDbRetry, compare-and-set re-picks, an hourly touch, the CHOSEN upsert and the one-statement preferred flag), the memb...

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

Spend a WebSocket one-time key with one GETDEL

spendOneTimeKey read the key and then deleted it, so two handshakes racing with the same key inside its 30 s life could both read it and both open a socket for ...

Kamo·1mo ago
FixAIService

A streamed member turn retries once without an optional parameter the provider refused

Member chat streams through the adapter itself, outside ProviderCallExecutor, so it had no ParameterFallback. Since SP99-T12 every Hugging Face stream asks for ...

Kamo·1mo ago
FixAIService

The streamed member turn runs the member's tools and cites its sources, and a browser can open it

The /ws/ai-chat turn was text only: no Tool Plane tools, no tool loop, no knowledge-base citations, and its handshake took only the raw session id, which kamo-i...

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

Translation and OCR façades on the router for the Tool Plane

F1 POST /api/ai/v1/translations {text, to, from?} and F2 POST /api/ai/v1/ocr (multipart file, optional filename), SP05 spec §4.17: the caller's session, SP04's ...

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