<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Yekar.AI blog</title>
<link>https://yekar.ai/blog</link>
<description>Engineering decisions, product thinking, and the unglamorous parts of running AI agents in production - from the team building Yekar.AI.</description>
<language>en</language>
<lastBuildDate>Wed, 02 Sep 2026 00:00:00 GMT</lastBuildDate>
<atom:link href="https://yekar.ai/feed.xml" rel="self" type="application/rss+xml" />
<image><url>https://yekar.ai/logo.png</url><title>Yekar.AI blog</title><link>https://yekar.ai/blog</link></image>
<item><title>What we mean by an agent management system?</title><link>https://yekar.ai/blog/what-an-agent-management-system-is</link><guid isPermaLink="true">https://yekar.ai/blog/what-an-agent-management-system-is</guid><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><category>Product</category><dc:creator>The Yekar.AI team</dc:creator><description>Building an agent is the easy half. The hard half is everything that decides whether you can leave it running: identity, approvals, triggers, and a record of what it did.</description><content:encoded><![CDATA[<p>Most teams get their first agent working in an afternoon. A prompt, a model, a couple of tools, and something that answers questions about your data. The demo is genuinely impressive, and then it sits there, because nobody can answer the next question: who is it acting as, what is it allowed to change, and how would we know if it got something wrong?</p><p>An agent management system is the answer to that second question. It is the layer between a working prototype and something a business is willing to leave switched on.</p><h2>Four things a prototype never has</h2><ul><li>An identity. Every tool call happens as someone - the agent&apos;s own service connection, the person who started the session, or a credential supplied on the entry call. Which one it is decides what the agent can reach and whose name is on the audit row.</li><li>A place for people to stay in control. Some actions should stop and wait for a human. That decision belongs in the agent&apos;s configuration, not in the wording of a prompt.</li><li>A way to start that is not a chat box. Real work arrives on a schedule, from your API, or from an event in a system you already run.</li><li>A record. Every model turn and every tool call, kept long enough to answer a question somebody asks next quarter.</li></ul><h2>Identity is the one people underestimate</h2><p>It is tempting to give an agent one powerful set of credentials and move on. It works immediately, and it quietly makes every later question unanswerable: the audit log in the connected system shows one service account doing everything, so &quot;who deleted that record&quot; has no answer beyond &quot;the agent did&quot;.</p><p>Binding a tool to an identity is a configuration decision in Yekar, made per agent and per integration. An agent can act as the domain&apos;s shared connection, as the person who triggered it, or with a credential handed to it on the way in and thrown away when the run ends. There is no fallback between those modes - an agent configured to act as its caller does not quietly borrow the organisation&apos;s stored credential when no caller token arrives.</p><h2>Approvals are a control, not a prompt</h2><p>&quot;Ask me before sending anything&quot; in a system prompt is a request. The model usually honours it. Usually is not a control, and the gap between usually and always is exactly the class of incident that gets agents banned from a company.</p><blockquote><p>A safeguard that lives in the prompt is a safeguard the model can talk itself out of.</p></blockquote><p>So gated actions pause the run and wait for a named approver. The agent&apos;s turn suspends, the person decides, and the run resumes from where it stopped - with the decision recorded beside the call it authorised.</p><h2>The record is the product</h2><p>Once an agent is doing work that matters, the transcript stops being a debugging convenience and becomes the thing you are actually buying. What did it read, what did it change, which model produced that answer, which version of the configuration was live at the time, and who approved the one step that needed a person.</p><p>That is the whole argument for a management system. The agent is the easy part. What lets you leave it running is everything around it.</p><aside><p><strong>See the capabilities</strong></p><p>The full breakdown of what an agent can be given, what people keep control of, and what gets recorded.</p><p><a href="https://yekar.ai/features">Browse the capability library</a></p></aside>]]></content:encoded></item>
<item><title>Knowledge that cites its sources - and admits when it has none</title><link>https://yekar.ai/blog/knowledge-that-cites-its-sources</link><guid isPermaLink="true">https://yekar.ai/blog/knowledge-that-cites-its-sources</guid><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><category>Engineering</category><dc:creator>The Yekar.AI team</dc:creator><description>Retrieval that always returns something is retrieval that will eventually invent something. Here is how we made an agent&apos;s knowledge answer with a page number, or not at all.</description><content:encoded><![CDATA[<p>Every retrieval system has a default failure mode: asked something its corpus does not cover, it returns the closest thing it has. Nearest-neighbour search always has a nearest neighbour. The model then writes a confident paragraph on top of five irrelevant chunks, and the answer is wrong in the most expensive way - fluently, and with the house style of a correct one.</p><h2>Two ways to miss a document</h2><p>A pure vector search misses the query that shares no vocabulary with the answer&apos;s phrasing. A pure keyword search misses the paraphrase. Both failures are common enough that picking one is picking which half of your questions go unanswered.</p><p>So the search runs both arms and fuses them, rather than choosing. A document that is a strong lexical match and a document that is a strong semantic match both surface; a document that is both surfaces higher. An organisation with no embeddings configured degrades to the lexical arm alone - which is a state, not an error, and the surfaces say so rather than pretending the results are complete.</p><h2>The abstention floor</h2><p>Fusing two arms improves the ranking. It does nothing about the case where the corpus simply does not contain the answer, because a ranking is relative and the top of a list of bad matches is still the top of the list.</p><p>That needs an absolute threshold. Below it, the agent is told the library has nothing on this, and answers accordingly - which reads as a worse demo and is a far better product. &quot;I don&apos;t have anything on that in your knowledge base&quot; is a sentence a person can act on. A confident paragraph assembled from unrelated chunks is not.</p><blockquote><p>The measure of a retrieval system is not what it returns when it knows. It is what it does when it doesn&apos;t.</p></blockquote><h2>Citations land in the original file</h2><ul><li>A citation that names a document is a starting point for a search. A citation that opens the document at the page the sentence came from is a verification. The difference matters most for exactly the readers you most need to convince - the ones who will check.
The uploaded file is what gets served and rendered, not a reconstruction of it.</li><li>Chunks carry their page and section, so a citation resolves to a location rather than to a filename.</li><li>Citations are derived on the server from what the turn actually retrieved, so prose naming a file the agent never opened does not become a link.</li></ul><p>That last one is a real class of bug. The displayed citations were never forgeable - but the sentence around them was, and a model that mentions a policy document it did not read produces a paragraph that looks sourced. Catching that is a check on the answer, not on the retrieval.</p><aside><p><strong>Read the knowledge docs</strong></p><p>How ingestion, chunking, retrieval, and citations fit together, including the limits.</p><p><a href="https://docs.yekar.ai/">Open the documentation</a></p></aside>]]></content:encoded></item>
<item><title>Agents fail in production for boring reasons</title><link>https://yekar.ai/blog/agents-fail-for-boring-reasons</link><guid isPermaLink="true">https://yekar.ai/blog/agents-fail-for-boring-reasons</guid><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><category>Governance</category><dc:creator>The Yekar.AI team</dc:creator><description>Not hallucination. Expired credentials, a schema the model half-remembered, a tool that silently returned nothing, and a retry that ran the same payment twice.</description><content:encoded><![CDATA[<p>The public conversation about agent reliability is almost entirely about the model. The incidents are almost entirely about everything else. When an agent that worked for six weeks stops working, the cause is rarely a clever failure of reasoning.</p><h2>The actual list</h2><ul><li>A credential expired, and the tool&apos;s error came back as a string the model treated as data - so the agent reported the outcome of an action that never happened.</li><li>The agent produced output in the shape it was asked for on nine turns out of ten, and the tenth broke the consumer downstream.</li><li>A tool returned an empty result and the model read the emptiness as an answer.</li><li>A run was retried after a timeout, and the side effect it had already committed happened twice.</li></ul><p>None of these are interesting. All of them are the reason someone turns the agent off.</p><h2>Failure has to be a row, not an absence</h2><p>The first thing that goes wrong with agent monitoring is counting only what succeeded. A dashboard built from successful runs looks complete and under-reports failure, because a turn that died is simply missing from it. You cannot see the shape of your failures in a table that only records the wins.</p><p>So every settled turn writes a row - its outcome, the tools it called, how many, how grounded the answer was, whether anything had to be repaired mid-turn. The row holds facts, never message bodies, which is what makes it safe to keep long after the transcript has aged out.</p><h2>Repair beats refusal</h2><p>When a turn produces output that does not match the shape the agent declared, or prose that cites a document the turn never retrieved, the useful move is usually not to fail the run. It is to tell the model what is wrong and let it fix it once - and then, if the second attempt still misses, to let the answer stand with the problem recorded rather than throwing away work the person is waiting on.</p><blockquote><p>An agent that refuses on every imperfection is an agent nobody leaves running. One that repairs quietly and records the residue is one you can improve.</p></blockquote><p>The recorded residue is the point. Every unrepaired finding is a countable fact against a real denominator, cut by the configuration revision that was live when the turn ran - which is the only way to answer whether last week&apos;s change made things better or worse. A flat average across a window that spans a fix averages the fix with the bug it fixed.</p><aside><p><strong>Talk through a real workflow</strong></p><p>Bring the job, the systems it touches, and the decisions that need a person.</p><p><a href="https://yekar.ai/#early-access">tart a conversation</a></p></aside>]]></content:encoded></item>
</channel>
</rss>