<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yaniv Shenhav</title>
    <description>The latest articles on DEV Community by Yaniv Shenhav (@yanivshenhav).</description>
    <link>https://dev.to/yanivshenhav</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134528%2F6a30c123-36a8-4e3e-94f5-3967c9f1071c.png</url>
      <title>DEV Community: Yaniv Shenhav</title>
      <link>https://dev.to/yanivshenhav</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yanivshenhav"/>
    <language>en</language>
    <item>
      <title>Your First AI Agent Task Needs a Contract, Not More Permissions</title>
      <dc:creator>Yaniv Shenhav</dc:creator>
      <pubDate>Mon, 12 Oct 2026 08:06:05 +0000</pubDate>
      <link>https://dev.to/yanivshenhav/your-first-ai-agent-task-needs-a-contract-not-more-permissions-5882</link>
      <guid>https://dev.to/yanivshenhav/your-first-ai-agent-task-needs-a-contract-not-more-permissions-5882</guid>
      <description>&lt;p&gt;Adapted from the Hebrew guide &lt;a href="https://ainewsil.co.il/articles/ai-agent-task-fit-checklist" rel="noopener noreferrer"&gt;"AI Agent: How to Choose a Task, Set Boundaries and Check the Result"&lt;/a&gt; on AI NEWS IL (published 17 September 2026, updated 24 September 2026).&lt;/p&gt;

&lt;p&gt;An agent's first production task should be small enough to test and safe enough to stop. "Manage our support inbox" is neither. "Classify one type of support request, find the relevant policy and prepare a draft for a representative" is a better starting point.&lt;/p&gt;

&lt;p&gt;This guide turns that narrower task into a testable contract. The support example is hypothetical, not a case study or a claim of measured results.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Decide whether you need an agent
&lt;/h2&gt;

&lt;p&gt;Use an agent when the goal is clear but the next step depends on what it finds. A support request may require a policy lookup, another document or a handoff to a person.&lt;/p&gt;

&lt;p&gt;If every step is fixed, ordinary automation is usually easier to predict and test. Copying a field, sending a scheduled reminder or generating a standard report does not automatically need an agent.&lt;/p&gt;

&lt;p&gt;Before connecting anything, write one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The agent receives X, returns Y, and Z decides what happens next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you cannot name the output or the person responsible, the task is not ready. Start with a reversible task. Do not make payments, deletion, publication or permission changes part of the first pilot.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Use a narrow support-triage example
&lt;/h2&gt;

&lt;p&gt;A customer writes: "My monthly charge has increased. Why?"&lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classify the request as billing.&lt;/li&gt;
&lt;li&gt;Retrieve the approved policy section about price changes.&lt;/li&gt;
&lt;li&gt;Draft an explanation with a link to that section.&lt;/li&gt;
&lt;li&gt;Flag that it has not checked the customer's invoice and cannot confirm the amount.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A representative opens the invoice, checks the policy, corrects the draft and decides whether to send it. The agent does not send the reply or update the customer record.&lt;/p&gt;

&lt;p&gt;The point is to reduce search work without inventing service terms or exposing information. Adapt the example to your systems, privacy rules and business risks before using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Define an input and output contract
&lt;/h2&gt;

&lt;p&gt;Allow only the information needed: the request text, a minimal customer reference, the response language and links to approved policies. Keep passwords, payment details and unrelated files out of the model input.&lt;/p&gt;

&lt;p&gt;Use a fixed output shape:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;What the reviewer checks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Category&lt;/td&gt;
&lt;td&gt;Is it one of the allowed categories?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidence or uncertainty&lt;/td&gt;
&lt;td&gt;What remains unresolved?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source section&lt;/td&gt;
&lt;td&gt;Does the cited policy support the answer?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Draft reply&lt;/td&gt;
&lt;td&gt;Has the agent added a promise or changed the policy's meaning?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Items to verify&lt;/td&gt;
&lt;td&gt;What must the representative check before sending?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Define invalid outputs too. A missing source link, an unknown category or an unsupported refund promise should produce "review required" with a reason, rather than a ready-to-send draft.&lt;/p&gt;

&lt;p&gt;A missing or conflicting document is a reason to stop and ask for review. It is not a blank the model should fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Separate reading, drafting and acting
&lt;/h2&gt;

&lt;p&gt;For the first test, grant read access only to the approved policy folder and test requests. Do not give the agent the entire inbox, full CRM, invoices or contact directory because they might be useful later.&lt;/p&gt;

&lt;p&gt;Keep credentials outside prompts and user-visible logs. Limit access to the environment and operations required, and use short-lived credentials where supported.&lt;/p&gt;

&lt;p&gt;Treat these as separate permission stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read approved material.&lt;/li&gt;
&lt;li&gt;Produce a draft.&lt;/li&gt;
&lt;li&gt;Take an external action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Passing the first ten cases does not authorize sending messages. That is a new capability with a new risk and needs its own decision and tests.&lt;/p&gt;

&lt;p&gt;Ask the organization's access owner to approve the permission list. Also ask what an attacker could reach if the credential leaked. Narrow the scope before the pilot if the answer is unacceptable.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Test failure cases before real use
&lt;/h2&gt;

&lt;p&gt;Write the expected outcome for each case before running it: draft, clarification or stop.&lt;/p&gt;

&lt;p&gt;Include routine requests alongside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing information or conflicting policies.&lt;/li&gt;
&lt;li&gt;An outdated document or the wrong customer reference.&lt;/li&gt;
&lt;li&gt;An unavailable external service.&lt;/li&gt;
&lt;li&gt;Sensitive information or a request requiring a financial decision.&lt;/li&gt;
&lt;li&gt;Instructions embedded in a customer message or file that conflict with the workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a customer message might contain a demand to ignore the policy and approve a full refund. The agent should apply the approved policy and flag the request for review. The message is task data, not permission to change the workflow.&lt;/p&gt;

&lt;p&gt;Measure category accuracy, source fit, changes in meaning, reviewer corrections, time to approval and cost. There is no universal number of test cases that proves readiness. Expand the test set according to task variety, error severity and how easily harm can be detected.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Make stopping and rollback concrete
&lt;/h2&gt;

&lt;p&gt;Stop when a required source is missing, information is sensitive, uncertainty is unresolved, a financial decision is needed or a tool attempts an operation outside the allowed scope.&lt;/p&gt;

&lt;p&gt;Name one process owner who can stop the pilot. Record the limited inputs, sources, tool calls, output and human decision under your privacy policy. Changes to the model, prompt, data or permissions should trigger regression tests.&lt;/p&gt;

&lt;p&gt;Before the pilot, rehearse rollback: revoke the credential, return requests to representatives and verify that the manual process works. A rollback plan that has never been tried is still an assumption.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Measure accepted work, not generated drafts
&lt;/h2&gt;

&lt;p&gt;Run a short, defined draft-only pilot after the test set passes. Two weeks is an example, not a universal requirement.&lt;/p&gt;

&lt;p&gt;For each draft, record whether it was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used with little change.&lt;/li&gt;
&lt;li&gt;Used after corrections.&lt;/li&gt;
&lt;li&gt;Rejected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track review time and whether the source was correct. Compare similar request types with and without the agent. A fast draft is not a saving if checking it takes longer than writing the reply manually.&lt;/p&gt;

&lt;p&gt;Set the continuation rule before the pilot. For example, continue only if corrections are small, no draft invents service terms and handling time falls. Stop for a data leak, skipped human review or costs that exceed the benefit.&lt;/p&gt;

&lt;p&gt;The first milestone is a useful draft under controlled permissions. More access is a separate decision, not a reward for a convincing demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;p&gt;The Hebrew guide cites &lt;a href="https://www.anthropic.com/research/building-effective-agents" rel="noopener noreferrer"&gt;Anthropic's Building Effective Agents&lt;/a&gt;, &lt;a href="https://www.nist.gov/itl/ai-risk-management-framework" rel="noopener noreferrer"&gt;NIST's AI Risk Management Framework&lt;/a&gt; and &lt;a href="https://www.ibm.com/think/topics/how-to-build-an-ai-agent" rel="noopener noreferrer"&gt;IBM's introduction to building an AI agent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This English adaptation was prepared with AI assistance.&lt;/p&gt;

&lt;p&gt;Yaniv Shenhav.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>AI Knowledge Base Without Stale Answers: A Practical Guide to Freshness, Permissions and Sources</title>
      <dc:creator>Yaniv Shenhav</dc:creator>
      <pubDate>Mon, 05 Oct 2026 08:12:01 +0000</pubDate>
      <link>https://dev.to/yanivshenhav/ai-knowledge-base-without-stale-answers-a-practical-guide-to-freshness-permissions-and-sources-1f18</link>
      <guid>https://dev.to/yanivshenhav/ai-knowledge-base-without-stale-answers-a-practical-guide-to-freshness-permissions-and-sources-1f18</guid>
      <description>&lt;p&gt;&lt;em&gt;Adapted from the &lt;a href="https://ainewsil.co.il/articles/ai-knowledge-base-freshness-permissions" rel="noopener noreferrer"&gt;Hebrew guide&lt;/a&gt; on AI NEWS IL.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A knowledge base for an AI assistant does not start by uploading every file into one folder. It starts with a source register: an owner, a validity window and an access rule for each source. When retrieval, permissions and the update path work together, you connect it to real users.&lt;/p&gt;

&lt;p&gt;The goal is not a model that never errs. The goal is an error you can detect: which source was returned, when it was approved, who may see it, what was missing and who fixes it. A knowledge base that cannot retire an old document or honor a permission change will give fluent, wrong answers even if the model never changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Build a source register before you index
&lt;/h2&gt;

&lt;p&gt;Create one row per source, not per folder. Each row answers: what is the document, who owns it, who is it for, when is it valid, what replaces it, and how is it removed from the index.&lt;/p&gt;

&lt;p&gt;Do not assume the newest file wins. Upload date can be later than content date, and a copy moved between folders can look new while being stale. Define a precedence order per information type. A signed policy may beat a training deck, and a numbered correction notice may beat the policy until a new version ships. If there is no rule, the right state is &lt;code&gt;conflict&lt;/code&gt;. Do not ask the model to pick the document that sounds more convincing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Separate active, historical and draft content
&lt;/h2&gt;

&lt;p&gt;A historical document can matter for audit, but it must not silently compete with the active one. Keep it in an archive behind access control and remove it from the normal answer path with a status field and an expiry date. A draft stays out of the active store until the owner approves it. A filename that says "final" is not approval.&lt;/p&gt;

&lt;p&gt;Useful metadata at minimum:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;source_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;expenses-policy-2026&lt;/span&gt;
&lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ops-team&lt;/span&gt;
&lt;span class="na"&gt;audience&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;all-employees&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;active&lt;/span&gt;        &lt;span class="c1"&gt;# draft | active | superseded | expired&lt;/span&gt;
&lt;span class="na"&gt;effective_from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-01-01&lt;/span&gt;
&lt;span class="na"&gt;reviewed_at&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-09-01&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;span class="na"&gt;supersedes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;expenses-policy-2025&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some search products can filter on file attributes. That capability does not set your policy. Define what each field means and who may change it first, then implement filters in the product you chose.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Keep permissions end to end
&lt;/h2&gt;

&lt;p&gt;Access to the knowledge base is not permission to see everything in it. At ingest, store the audience of the source. At query time, filter results by the user's identity. In the answer, never show, quote or link a document the user may not open. A broad service account is not a reason to widen what the user sees.&lt;/p&gt;

&lt;p&gt;Check the source permissions too. A product that respects user permissions can still surface content that was shared too widely in the past. Microsoft's documentation, for example, explains that SharePoint and OneDrive controls affect discovery without changing user permissions, and that lifecycle and sharing policies help reduce oversharing. That is a statement about Microsoft 365 Copilot, not a guarantee for every RAG tool.&lt;/p&gt;

&lt;p&gt;Start read-only. The knowledge base admin can import, disable and rebuild. A normal user can ask. The model gets no write access to source documents. Deleting, changing an audience or replacing a version are logged admin actions, not the result of a chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Make ingestion verifiable
&lt;/h2&gt;

&lt;p&gt;A typical pipeline is ingestion, text extraction, chunking, embeddings, indexing and retrieval. Google's RAG Engine documentation shows a similar chain. It describes the product. It does not prove your documents were chunked well or that the output is faithful to the source.&lt;/p&gt;

&lt;p&gt;Log every run: run ID, source list, versions, successes and failures. A file is not searchable just because you sent it to an API. OpenAI's File Search documentation, for example, says to check that a file reached the &lt;code&gt;completed&lt;/code&gt; state, and it describes file citations and metadata filtering. If ingestion is partial, keep the previous version active or block the topic. Do not mix half an update without a marker.&lt;/p&gt;

&lt;p&gt;The tooling can be simple: a sheet or database for the register, an exporter or crawler, a parser, a search engine or vector store, a link checker, a set of reference questions, and a log that ties each question to the retrieved results and the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Require an openable, versioned citation
&lt;/h2&gt;

&lt;p&gt;The answer should show a clear source name and a link that opens with the user's permissions. For testing, also keep &lt;code&gt;source_id&lt;/code&gt;, version and chunk ID. A filename alone can change or repeat across folders. If the source cannot be opened, the citation does not let the user verify the claim.&lt;/p&gt;

&lt;p&gt;A citation shows the system linked a claim to a file. It does not prove the claim follows from it. When testing, compare each material claim to the source sentence, check that the context was not cut off, and check that the source was valid at answer time. Also sample answers where a similar paragraph was found but belongs to another audience, product or period.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Build an acceptance test for retrieval
&lt;/h2&gt;

&lt;p&gt;Do not only check whether the wording sounds good. For each question, store the expected result at three levels: which sources should be retrieved, what may be concluded from them, and what the correct decision state is. That lets you tell a retrieval failure from a wording failure. If the right document never reached the context, a better prompt is not the fix.&lt;/p&gt;

&lt;p&gt;Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a normal question and a rephrased one&lt;/li&gt;
&lt;li&gt;a technical term in another language&lt;/li&gt;
&lt;li&gt;a superseded document&lt;/li&gt;
&lt;li&gt;two conflicting versions&lt;/li&gt;
&lt;li&gt;a user without permission&lt;/li&gt;
&lt;li&gt;a file that failed ingestion&lt;/li&gt;
&lt;li&gt;a question with no answer&lt;/li&gt;
&lt;li&gt;a deleted link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no universal number of questions that guarantees quality. Pick coverage by content variety and the harm a wrong answer can cause. Useful metrics: right-source retrieval rate, share of answers with a valid source, conflicts detected, permission leaks, unanswered questions that correctly stopped, and time from approval to active. An average cannot make up for a permission leak or use of a revoked document.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Update and remove without a gray zone
&lt;/h2&gt;

&lt;p&gt;Define a change path: the owner approves a version, the admin ingests it, regression tests run, and only then does an alias switch to the new active index. Keep a way back to the previous index, but never restore a document that was revoked for safety or privacy reasons. A technical rollback is subject to the business status of the source.&lt;/p&gt;

&lt;p&gt;When a permission is removed or a document is revoked, set a response time and check every copy: source, cache, index, saved results and the test environment. Do not promise instant deletion if the product describes another retention period. Record what was deleted, what remains under policy, and when you checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example (hypothetical): expense policy
&lt;/h2&gt;

&lt;p&gt;This is a proposed design that was not tested in production. An ops team wants the assistant to answer travel expense questions. There is an active policy, an old training deck and a draft for next year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input:&lt;/strong&gt; the active policy and an approved correction notice. The deck is marked &lt;code&gt;superseded&lt;/code&gt;. The draft stays out of the active store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; a short answer, an amount or rule only if it appears in a valid source, a link to the section, the version, and a state of &lt;code&gt;answered&lt;/code&gt; or &lt;code&gt;needs-clarification&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions:&lt;/strong&gt; all employees can read the policy. Only ops manages versions. The model cannot write or approve expenses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; a regular employee, a unit with an exception, Hebrew and English phrasing, a question about next year, a broken link, and a conflict between the notice and the policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop conditions:&lt;/strong&gt; no active source found, two equal-rank sources conflict, the user is not authorized, a file did not finish ingestion, or the answer adds a condition the source does not contain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Contact ops" is an acceptable result when there is no valid source. It is expected behavior that keeps the model from inventing policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two active versions:&lt;/strong&gt; stop with &lt;code&gt;conflict&lt;/code&gt;, show both sources to the owner, do not pick automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partial ingestion:&lt;/strong&gt; do not turn on the new index. Log the file and the error, retry without lowering the threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source too widely shared:&lt;/strong&gt; fix the sharing or remove the source until a decision. An app-level filter does not replace source access control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valid document not retrieved:&lt;/strong&gt; mark a retrieval failure. Check extraction, chunking, metadata and the query before you rewrite the answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Citation does not support the claim:&lt;/strong&gt; block the claim, fix the context check, add the case to regression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No answer in the base:&lt;/strong&gt; return &lt;code&gt;no-valid-source&lt;/code&gt; with an escalation path. Do not fill in general knowledge as if it were company policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken link:&lt;/strong&gt; show that the source cannot be verified and route it to the owner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission changed after indexing:&lt;/strong&gt; run removal or rebuild, invalidate caches, and test with the user's identity that access is gone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;RAG or file search does not make a source correct, current or permitted. Chunking can separate a rule from its exception, metadata can be wrong, retrieval can miss a term, and a model can state a conclusion the source does not support even with the right context. Permissions in one product do not prove permissions in another.&lt;/p&gt;

&lt;p&gt;This guide does not replace data classification, a privacy assessment, legal advice, records management or a vendor contract review. Retention, deletion, processing region and sub-processors depend on the product, the plan and the real settings. Before using personal, confidential or regulated material, get approval from the responsible people in your organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;NIST AI 600-1, Generative AI Profile (published July 26, 2024). A voluntary cross-cutting framework for AI risk management. The source register and worksheet here are a proposed implementation, not a NIST requirement.&lt;/li&gt;
&lt;li&gt;OpenAI API, File Search documentation. Describes ingestion status, file citations, search result inclusion and metadata filtering for that product.&lt;/li&gt;
&lt;li&gt;Microsoft Learn, Microsoft 365 Copilot data protection architecture. Explains how permissions, sensitivity labels, sharing and lifecycle policies affect Copilot. Not a deployment guide for every RAG system.&lt;/li&gt;
&lt;li&gt;Google Cloud, Vertex AI RAG Engine overview. Lists the ingestion, transformation, embeddings, indexing, retrieval and generation chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published in Hebrew on AI NEWS IL (ainewsil.co.il), with a printable worksheet. This is an English adaptation.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;The full Hebrew guide, with the printable worksheet, is on AI NEWS IL: &lt;a href="https://ainewsil.co.il/articles/ai-knowledge-base-freshness-permissions" rel="noopener noreferrer"&gt;read the original article&lt;/a&gt;. The &lt;a href="https://www.iiai.co.il/en" rel="noopener noreferrer"&gt;Israeli Institute for AI&lt;/a&gt; runs AI training and implementation programs for organizations worldwide.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>llm</category>
      <category>security</category>
    </item>
    <item>
      <title>Seven Controls to Put in Place Before an AI Agent Gets Production Access</title>
      <dc:creator>Yaniv Shenhav</dc:creator>
      <pubDate>Sun, 20 Sep 2026 19:26:15 +0000</pubDate>
      <link>https://dev.to/yanivshenhav/seven-controls-to-put-in-place-before-an-ai-agent-gets-production-access-6bp</link>
      <guid>https://dev.to/yanivshenhav/seven-controls-to-put-in-place-before-an-ai-agent-gets-production-access-6bp</guid>
      <description>&lt;p&gt;AI agents cross a line that ordinary chat systems do not: they connect probabilistic decisions to real actions.&lt;/p&gt;

&lt;p&gt;An agent that can read mail, update a record, run a tool, or spend money is part of your production control plane. Prompt quality matters, but prompts are not a security boundary. The controls below should exist before an agent receives production access.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Separate read, recommend, and execute
&lt;/h2&gt;

&lt;p&gt;Do not treat "access" as a single permission.&lt;/p&gt;

&lt;p&gt;Use three distinct stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read&lt;/strong&gt; - retrieve the minimum data needed for the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommend&lt;/strong&gt; - prepare a proposed action without changing external state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute&lt;/strong&gt; - make the approved change through a narrowly scoped tool.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This split gives you useful checkpoints. A support agent may read a ticket and draft an answer automatically, while sending remains gated. A finance agent may analyze invoices but require an approval before changing payment details.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Give every tool its own narrow permission
&lt;/h2&gt;

&lt;p&gt;A single broad credential turns every mistake into a high-impact mistake. Prefer separate credentials and scopes for separate tools.&lt;/p&gt;

&lt;p&gt;Ask four questions for each tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which resources can it access?&lt;/li&gt;
&lt;li&gt;Which operations can it perform?&lt;/li&gt;
&lt;li&gt;How long does the permission last?&lt;/li&gt;
&lt;li&gt;Which environment does it apply to?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Short-lived credentials and environment-specific roles reduce the damage from a bad decision, a leaked token, or a malicious instruction hidden in external content.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add an action budget
&lt;/h2&gt;

&lt;p&gt;Agents need more than an API rate limit. They need a business-action budget.&lt;/p&gt;

&lt;p&gt;Useful limits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maximum records changed per run;&lt;/li&gt;
&lt;li&gt;maximum messages sent per hour;&lt;/li&gt;
&lt;li&gt;maximum cost per transaction and per day;&lt;/li&gt;
&lt;li&gt;maximum number of retries;&lt;/li&gt;
&lt;li&gt;maximum number of external systems touched in one workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The budget should fail closed. Crossing it should stop the run and request review, not trigger an improvised workaround.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put approval at the point of commitment
&lt;/h2&gt;

&lt;p&gt;Approval works only when the reviewer can see the exact action that will occur.&lt;/p&gt;

&lt;p&gt;For a message, show the final recipient and wording together. For a deployment, show the target environment and revision. For a purchase, show the item, delivery address, and full total.&lt;/p&gt;

&lt;p&gt;Avoid vague approvals such as "continue" when several actions are still possible. The approval object should be concrete enough to log and later audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Treat external content as untrusted input
&lt;/h2&gt;

&lt;p&gt;Email, webpages, documents, issue comments, and retrieved knowledge can all contain instructions that conflict with the agent's actual task.&lt;/p&gt;

&lt;p&gt;Do not let retrieved content redefine the agent's goals, choose new tools, expand permissions, or select a new disclosure destination. Parse it as data. Keep authority in a separate, trusted control path.&lt;/p&gt;

&lt;p&gt;Test whole workflows rather than individual prompts. A sequence of individually allowed actions can still produce a harmful result.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Log decisions and effects separately
&lt;/h2&gt;

&lt;p&gt;A useful audit trail answers two different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why did the agent decide to act?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What changed in the external system?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Record the task identifier, tool, target, approval reference, before/after state, and provider response. Keep logs outside the agent's own write permissions when possible.&lt;/p&gt;

&lt;p&gt;Observability should also include alerts for unusual tool combinations, repeated failures, sudden increases in volume, and actions outside normal hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Build a real stop mechanism
&lt;/h2&gt;

&lt;p&gt;A stop button is not a prompt that says "please stop." It is an independent control that can revoke credentials, disable tool execution, or block the workflow runner.&lt;/p&gt;

&lt;p&gt;Define who can activate it, what it disables, and how recovery works. Practice using it before launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small pre-production failure drill
&lt;/h2&gt;

&lt;p&gt;Before giving an agent live access, run at least these tests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A document contains an instruction that conflicts with the assigned task.&lt;/li&gt;
&lt;li&gt;The agent is given the wrong recipient or resource identifier.&lt;/li&gt;
&lt;li&gt;A required external service fails halfway through the workflow.&lt;/li&gt;
&lt;li&gt;The same event is delivered twice.&lt;/li&gt;
&lt;li&gt;An approval expires before execution.&lt;/li&gt;
&lt;li&gt;The agent tries to exceed its action budget.&lt;/li&gt;
&lt;li&gt;The stop mechanism is activated during a run.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to prove that the agent never fails. It is to prove that failures are bounded, visible, and recoverable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The minimum launch checklist
&lt;/h2&gt;

&lt;p&gt;Before production access, confirm that you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a tool allowlist;&lt;/li&gt;
&lt;li&gt;least-privilege, short-lived credentials;&lt;/li&gt;
&lt;li&gt;separate read and write paths;&lt;/li&gt;
&lt;li&gt;explicit approval for high-impact actions;&lt;/li&gt;
&lt;li&gt;action and cost limits;&lt;/li&gt;
&lt;li&gt;idempotency protection;&lt;/li&gt;
&lt;li&gt;tamper-resistant logs;&lt;/li&gt;
&lt;li&gt;monitoring and alerts;&lt;/li&gt;
&lt;li&gt;a credential-level stop mechanism;&lt;/li&gt;
&lt;li&gt;tested failure and recovery paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An AI agent should earn more authority only after its behavior is observable under real conditions. Start with read-only access, measure what happens, and expand one permission at a time.&lt;/p&gt;




&lt;p&gt;This article is an English technical adaptation of the original Hebrew guide published by AI NEWS Israel: &lt;a href="https://ainewsil.co.il/articles/governing-ai-agents-before-production" rel="noopener noreferrer"&gt;לפני שנותנים לסוכן הרשאה: שבע בקרות שחייבות להגיע לפני הייצור&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
