[{"data":1,"prerenderedAt":807},["ShallowReactive",2],{"blog-sales-rep-ai-copilot-b2b-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":25,"sources":35,"cover":66,"og":67,"expertise":68,"locales":69,"lang":70,"title":73,"description":74,"coverAlt":75,"metaTitle":76,"takeaways":77,"faq":83,"toc":99,"blocks":133,"others":536},"sales-rep-ai-copilot-b2b","2026-10-15",10,"agents",[9,10,11,12,13],"AI copilot","B2B sales","Quotes","Permissions","Works council",[15,16,17,18,19,20,21,22,23,24],"AI copilot for B2B sales reps","internal sales copilot","quotation automation B2B","sales copilot data access","AI quote drafting","sales rep AI assistant ROI","quote turnaround time","sales copilot GDPR works council","account context CRM ERP","AI sales assistant permissioning",[26,29,32],{"name":27,"url":28},"Customer relationship management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCustomer_relationship_management",{"name":30,"url":31},"Enterprise resource planning","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnterprise_resource_planning",{"name":33,"url":34},"Artificial Intelligence Act","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FArtificial_Intelligence_Act",[36,39,42,45,48,51,54,57,60,63],{"title":37,"url":38},"Harvard Business Review: The Short Life of Online Sales Leads (March 2011)","https:\u002F\u002Fhbr.org\u002F2011\u002F03\u002Fthe-short-life-of-online-sales-leads",{"title":40,"url":41},"Salesforce: State of Sales statistics, 7th edition (2026)","https:\u002F\u002Fwww.salesforce.com\u002Fsales\u002Fstate-of-sales\u002Fsales-statistics\u002F",{"title":43,"url":44},"Gartner: sellers who partner with AI are 3.7 times more likely to meet quota (16 Sep 2024)","https:\u002F\u002Fwww.gartner.com\u002Fen\u002Fnewsroom\u002Fpress-releases\u002F2024-09-16-gartner-sales-survey-reveals-sellers-who-partner-with-ai-re-three-point-seven-times-more-likely-to-meet-quota",{"title":46,"url":47},"Gartner: 61 percent of B2B buyers prefer a rep-free buying experience (25 Jun 2025)","https:\u002F\u002Fwww.gartner.com\u002Fen\u002Fnewsroom\u002Fpress-releases\u002F2025-06-25-gartner-sales-survey-finds-61-percent-of-b2b-buyers-prefer-a-rep-free-buying-experience",{"title":49,"url":50},"Gartner: by 2030, 75 percent of B2B buyers will prefer human-first sales experiences (25 Aug 2025)","https:\u002F\u002Fwww.gartner.com\u002Fen\u002Fnewsroom\u002Fpress-releases\u002F2025-08-25-gartner-says-by-2030-that-75-percent-of-b2b-buyers-will-prefer-sales-experiences-that-prioritize-human-interaction-over-ai",{"title":52,"url":53},"Microsoft: Copilot for Sales and Copilot for Service generally available (1 Feb 2024)","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fdynamics-365\u002Fblog\u002Fbusiness-leader\u002F2024\u002F02\u002F01\u002Fmicrosoft-copilot-for-sales-and-copilot-for-service-are-now-generally-available\u002F",{"title":55,"url":56},"WKO: Überwachung im Homeoffice, BVwG 27.6.2025 W218 2298555-1 (21 Apr 2026)","https:\u002F\u002Fwww.wko.at\u002Fktn\u002Findustrie\u002Fueberwachung-im-homeoffice-wo-sind-die-grenzen-",{"title":58,"url":59},"EU AI Act, Annex III (high-risk use cases)","https:\u002F\u002Fartificialintelligenceact.eu\u002Fannex\u002F3\u002F",{"title":61,"url":62},"EU AI Act, Article 26 (obligations of deployers)","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F26\u002F",{"title":64,"url":65},"Regulation (EU) 2026\u002F1744 (Digital Omnibus on AI), EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2026\u002F1744\u002Foj\u002Feng","\u002Fimages\u002Fblog\u002Fsales-rep-ai-copilot-b2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fsales-rep-ai-copilot-b2b\u002Fog.jpg","b2b-ecommerce-developer",[70,71,72],"en","de","hu","An AI copilot for B2B sales reps: account context, quotes and approvals","How to build an internal AI copilot for B2B sales reps: the account data it needs, per-rep permissions, approval gates, KPIs and the works council.","A tall card with a small helper panel floating at its shoulder, a headset on the left.","AI copilot for B2B sales reps · Balázs Csorba",[78,79,80,81,82],"An internal sales copilot is a read-mostly assistant over CRM, ERP, PIM, pricing and stock data that one rep uses, with an approval gate before anything leaves the company.","The copilot must act as the rep, with the rep’s entitlements resolved per customer and price list, never as a service account with global read access.","Tools return proposals, not effects: quotes stay drafts, sending is a human click, and discounts above a threshold need a second approver.","Published data supports speed and capacity as the levers: HBR found leads contacted within an hour were nearly 7 times as likely to qualify, and Salesforce reports reps spend 60% of their time not selling.","Per-rep usage dashboards turn the copilot into a monitoring system, which brings in the works council in Austria and Annex III of the EU AI Act; aggregate metrics avoid both.",[84,87,90,93,96],{"q":85,"a":86},"What is the difference between a sales copilot and a customer support chatbot?","A support chatbot faces customers and aims to answer or deflect their questions. A sales copilot is internal: one rep uses it over that rep’s accounts, it can see contract prices and margins the customer must never see, and every outbound action (quote, email, CRM write) waits for the rep’s approval.",{"q":88,"a":89},"Which data does an AI sales copilot need first?","Start with order history per customer and SKU, contract prices and price lists, stock or available-to-promise data, and product specs from the PIM. CRM activity helps, but a copilot that cannot show the correct customer price and delivery status is not useful for quoting, however good its emails are.",{"q":91,"a":92},"Can an AI copilot send quotes on its own?","It should not. Keep quotes as drafts that the rep edits and sends, require a second approval for discounts above a threshold, and never let the copilot commit a delivery date without an ERP confirmation. The copilot proposes; the rep and the ERP decide.",{"q":94,"a":95},"Does an internal sales copilot need works council approval in Austria?","If the system can monitor individual reps, for example through per-rep usage or outcome reports, § 96 ArbVG can require the works council’s consent in a works agreement. Designing metrics as aggregates by default, with short retention and no leaderboards, keeps the copilot a tool rather than a control system.",{"q":97,"a":98},"How do you measure whether a sales copilot works?","Set a baseline before the pilot and track time to first response, quote cycle time, the share of drafts accepted with light edits, price or stock errors caught in review, and discount leakage. There is no public industry benchmark for acceptance rate, so your own baseline is the comparison.",[100,103,106,109,112,115,118,121,124,127,130],{"id":101,"title":102},"what-an-internal-sales-copilot-is","What is an internal sales copilot?",{"id":104,"title":105},"the-account-context-it-needs","Which account context does the copilot need?",{"id":107,"title":108},"the-tools-it-gets","Which tools should a sales copilot get?",{"id":110,"title":111},"permissions-per-rep-and-per-customer","How do permissions work per rep and per customer?",{"id":113,"title":114},"approval-before-anything-outbound","Where do the approval gates go?",{"id":116,"title":117},"what-it-is-worth","What is a sales copilot worth?",{"id":119,"title":120},"evaluating-it-without-vanity-metrics","How do you evaluate a sales copilot?",{"id":122,"title":123},"gdpr-and-the-works-council","What will the works council and the AI Act ask?",{"id":125,"title":126},"when-not-to-build-it","When should you not build a sales copilot?",{"id":128,"title":129},"pilot-checklist","A practical checklist for the pilot",{"id":131,"title":132},"sources","Sources",[134,142,145,148,151,160,161,164,170,173,176,177,185,281,284,285,288,296,299,306,307,310,314,338,341,342,345,387,394,395,398,420,421,424,435,454,461,462,465,473,474,477,495,503,504],{"type":135,"content":136},"paragraph",[137,138,141],"An ",{"tag":139,"children":140},"strong",[15]," is an internal assistant that reads the company’s own CRM, ERP, PIM, pricing and stock data for one rep at a time, drafts quotes and follow-ups, and stops at an approval gate before anything reaches a customer. It is not the chatbot on the shop and not a replacement for the rep. It is a faster way for a rep to answer “what did this customer pay last time, is it in stock, and can I send a quote today”.",{"type":135,"content":143},[144],"This article is a build brief. It covers the account context the copilot needs, the tools it gets, how permissions work per rep and per customer, where the approval gates sit, what the published numbers do and do not support for the business case, how to evaluate it, and what the works council and the EU AI Act will ask. It is not a vendor comparison.",{"type":146,"level":147,"id":101,"text":102},"heading",2,{"type":135,"content":149},[150],"An internal sales copilot is a read-mostly assistant with a small set of tools, used by one authenticated rep, whose outputs are drafts. The rep asks in natural language, the copilot looks up facts in the systems of record, and it returns an answer with the evidence attached: the contract price with its source, the stock figure with its timestamp, last year’s orders for that customer.",{"type":135,"content":152},[153,154,159],"The contrast with a customer-facing assistant matters. The shop assistant described in ",{"tag":155,"to":156,"children":157},"link","\u002Fblog\u002Fai-assistant-b2b-shop-customer-support",[158],"AI support for B2B shops"," measures deflection and must never show margins. The rep copilot sees contract prices, discounts and sometimes margin, so its risk is leakage between reps and customers, and its success metric is rep capacity and quote speed, not tickets avoided.",{"type":146,"level":147,"id":104,"text":105},{"type":135,"content":162},[163],"The copilot needs five sources, and quoting fails if any of the first four is missing or stale: order and quote history from the ERP, contract prices and price lists, stock or available-to-promise data, product specs from the PIM, and CRM context such as contacts, opportunity stage and recent activity.",{"type":165,"src":166,"alt":167,"wide":168,"caption":169},"image","\u002Fimages\u002Fblog\u002Fsales-rep-ai-copilot-b2b\u002Fdiagram-7.webp","Internal sales copilot system map A rep client such as the CRM or Outlook talks to the copilot service. The copilot first resolves the rep’s entitlements (rep to accounts to price lists), then calls five tools on behalf of the rep: CRM, ERP orders and quotes, PIM search, contract pricing and stock. Results come back as proposals in an approval view, and every tool call is written to an audit log. No service account has global read access.",true,"The copilot resolves entitlements first, calls tools on behalf of the rep, and returns proposals to an approval view; every tool call is logged.",{"type":135,"content":171},[172],"Freshness rules differ per source. Stock and open-order status must be read live, because a copilot that confidently quotes yesterday’s stock is worse than no copilot. Price lists can be cached for minutes if the cache key includes the customer and the price list version. Specs and documents can live in a search index that is refreshed on PIM change events.",{"type":135,"content":174},[175],"In my experience with B2B commerce and PIM platforms such as Spryker and Pimcore, the real integration cost is identity, not the language model: part numbers that differ between ERP, PIM and the customer’s own drawings, customer numbers versus ship-to and bill-to accounts, and price lists attached at different levels. Budget for that mapping first.",{"type":146,"level":147,"id":107,"text":108},{"type":135,"content":178},[179,180,184],"Give it seven narrow tools, five of them read-only, and keep every write as a draft. A small, well-described tool surface is easier to secure and easier for the model to use correctly than one broad “query the ERP” tool. I built a Jira MCP server with 20 tools, and the lesson carries over: one clear job per tool, typed inputs, and error messages that tell the model what to do next, as described in ",{"tag":155,"to":181,"children":182},"\u002Fblog\u002Fagent-tool-design-descriptions-errors",[183],"agent tool design",".",{"type":186,"head":187,"rows":200},"table",[188,190,192,194,196,198],[189],"Tool",[191],"Data source",[193],"Permission scope",[195],"Side effect",[197],"Approval",[199],"Typical failure",[201,214,224,235,245,257,270],[202,204,206,208,210,212],[203],"Spec search",[205],"PIM, search index",[207],"all reps",[209],"none",[211],"no",[213],"part number not matched",[215,217,219,220,221,222],[216],"Stock check",[218],"ERP, ATP",[207],[209],[211],[223],"stale cache, wrong warehouse",[225,227,229,231,232,233],[226],"Contract price",[228],"pricing service",[230],"rep’s accounts",[209],[211],[234],"wrong price list level",[236,238,240,241,242,243],[237],"Order history",[239],"ERP",[230],[209],[211],[244],"ship-to vs sold-to mix-up",[246,248,250,251,253,255],[247],"Quote draft",[249],"ERP quote API",[230],[252],"draft record",[254],"yes, plus threshold",[256],"duplicate drafts on retry",[258,260,262,264,266,268],[259],"Email draft",[261],"mail client",[263],"rep’s mailbox",[265],"draft only",[267],"yes",[269],"invented commitments",[271,273,275,276,278,279],[272],"CRM note",[274],"CRM",[230],[277],"activity record",[267],[280],"note on wrong account",{"type":135,"content":282},[283],"Every write tool needs an idempotency key, so a retried call updates the same draft instead of creating a second one. The contract-price tool should return a trace (“contract 4711, valid until 31 December, tier for quantity 50+”), because the rep has to be able to defend the price to the customer.",{"type":146,"level":147,"id":110,"text":111},{"type":135,"content":286},[287],"The copilot runs as the rep, on behalf of the rep’s identity, and every tool checks the rep’s entitlements before it returns data. A service account with global read access is the most common design mistake: one prompt injection or one retrieval bug and a rep sees another rep’s customer prices.",{"type":135,"content":289},[290,291,295],"Entitlement resolution follows the sales organization: rep to territory or account list, account to price lists and contracts, role to price and margin visibility. The same rules apply to retrieval. If order history or quote documents sit in a vector index, filter by entitlement before ranking, not after, which is the pattern from ",{"tag":155,"to":292,"children":293},"\u002Fblog\u002Frag-access-control-permissions",[294],"access control for RAG",". Caches must include the customer in the key, so one rep’s answer is never served to another.",{"type":297,"code":298},"code","\u002F\u002F Tool contract (sketch): every call runs as the rep, never as a service account\ntype ContractPriceInput = { customerNumber: string; sku: string; quantity: number }\n\ntype ContractPriceResult =\n  | { ok: true; unitPrice: number; currency: string\n      source: 'contract' | 'price-list' | 'tier'; validUntil: string; trace: string[] }\n  | { ok: false; error: 'NOT_ENTITLED' | 'UNKNOWN_SKU' | 'NO_PRICE'; hint: string }\n\nasync function contractPrice(rep: RepIdentity, input: ContractPriceInput): Promise\u003CContractPriceResult> {\n  if (!(await entitlements.canSeePrices(rep, input.customerNumber)))\n    return { ok: false, error: 'NOT_ENTITLED', hint: 'Customer is not in your account list.' }\n  \u002F\u002F the pricing service checks the same entitlement again (defense in depth)\n  return pricing.resolve(input, { onBehalfOf: rep.id })\n}",{"type":135,"content":300},[301,302,305],"Write tests that prove the negative: rep A asks for a customer of rep B and gets ",{"tag":297,"children":303},[304],"NOT_ENTITLED",", both through the tool and through free-text questions that try to talk the model into it. Log every tool call with the rep, the customer, the input and the result size; that audit log is what you show security and, later, the works council.",{"type":146,"level":147,"id":113,"text":114},{"type":135,"content":308},[309],"Put a gate in front of every effect that leaves the company or changes a record: tools return proposals, and the rep turns a proposal into an action with one click. Quote drafts stay drafts, emails are saved as drafts in the rep’s mailbox, and CRM notes are shown before they are written.",{"type":165,"src":311,"alt":312,"wide":168,"caption":313},"\u002Fimages\u002Fblog\u002Fsales-rep-ai-copilot-b2b\u002Fdiagram-21.webp","Quote draft sequence with an approval gate Five steps from left to right: the rep asks a question; the copilot retrieves product, contract price, stock and order history; it drafts a quote with line items, prices and terms; the rep edits and approves, with a second approver above the discount threshold; only then is the quote sent and the CRM updated. A price or stock mismatch sends the draft back to the rep instead of forward.","The quote cycle-time KPI is the gap between t0 and t1; a price or stock mismatch at any step returns the draft to the rep.",{"type":315,"ordered":316,"items":317},"list",false,[318,323,328,333],[319,322],{"tag":139,"children":320},[321],"Discount threshold:"," a discount above the rep’s limit routes the draft to a second approver, the same rule the ERP already enforces for manual quotes.",[324,327],{"tag":139,"children":325},[326],"Delivery dates:"," the copilot never states a delivery date that the ERP has not confirmed for that quantity and ship-to.",[329,332],{"tag":139,"children":330},[331],"Price mismatch:"," if the drafted price differs from the pricing service result, the draft goes back to the rep with both values shown.",[334,337],{"tag":139,"children":335},[336],"Evidence one click away:"," every number in a draft links to the record it came from, so review is checking, not re-researching.",{"type":135,"content":339},[340],"Place the approval view inside the tool the rep already uses, the CRM or the mail client. A separate copilot app with its own approval queue is one more tab, and reps will route around it. I test this path end to end with Playwright MCP driving a real browser: the rep asks, a draft appears, and nothing is sent until the approval click.",{"type":146,"level":147,"id":116,"text":117},{"type":135,"content":343},[344],"The published evidence supports two levers, response speed and rep capacity, and it does not support a headcount-reduction story. There is no primary study that links quote cycle time in days to win rate in B2B distribution, so treat quote turnaround as a KPI you measure, not a return you promise.",{"type":315,"ordered":316,"items":346},[347,357,365,374],[348,351,352,356],{"tag":139,"children":349},[350],"Speed:"," a Harvard Business Review audit of 2,241 US companies found an average lead response time of 42 hours among firms that responded, and 23% never responded. In a separate dataset of 1.25 million leads, firms that made contact within an hour were nearly 7 times as likely to qualify the lead as those that waited an hour longer (",{"tag":353,"href":38,"children":354},"a",[355],"HBR, March 2011",").",[358,361,362,356],{"tag":139,"children":359},[360],"Capacity:"," Salesforce’s 2026 State of Sales reports that reps spend 60% of their time on non-selling tasks, 57% of sales professionals say cycles are getting longer, and creating sales quotes is one of the top three use cases for sales agents (",{"tag":353,"href":41,"children":363},[364],"Salesforce",[366,369,370,373],{"tag":139,"children":367},[368],"AI-assisted sellers:"," Gartner’s 2024 survey of 1,026 B2B sellers found that sellers who partner effectively with AI tools are 3.7 times more likely to meet quota (",{"tag":353,"href":44,"children":371},[372],"Gartner, Sep 2024","). That is a correlation, not proof that a tool causes quota attainment.",[375,378,379,382,383,386],{"tag":139,"children":376},[377],"Humans stay:"," Gartner found 61% of B2B buyers prefer a rep-free experience overall, yet it predicts that by 2030, 75% will prefer sales experiences that prioritize human interaction (",{"tag":353,"href":47,"children":380},[381],"Gartner, Jun 2025","; ",{"tag":353,"href":50,"children":384},[385],"Gartner, Aug 2025","). A copilot that makes the human faster fits both directions.",{"type":135,"content":388},[389,390,393],"For a head of sales or a COO, the honest pitch is capacity and speed: more quotes out the same day, fewer price errors, and less time spent searching three systems. Off-the-shelf products exist for the drafting part; Microsoft made Copilot for Sales generally available in February 2024 and has since folded it into its Microsoft 365 Copilot sales offering (",{"tag":353,"href":53,"children":391},[392],"Microsoft","). A custom build pays off where the bottleneck is ERP, contract pricing and stock integration, and where permissions are not simple.",{"type":146,"level":147,"id":119,"text":120},{"type":135,"content":396},[397],"Evaluate it on correctness of facts first and on rep outcomes second, against a baseline measured before the pilot. Usage counts and chat volume say nothing about whether a quote went out faster or with the right price.",{"type":315,"ordered":316,"items":399},[400,405,410,415],[401,404],{"tag":139,"children":402},[403],"Offline eval set:"," real rep questions paired with the expected tool calls and expected facts, plus a set of golden quotes. Run it on every model or prompt change.",[406,409],{"tag":139,"children":407},[408],"Hard guardrails:"," zero tolerance for a wrong price, wrong stock figure or invented customer fact in an approved draft; count the ones caught in review too.",[411,414],{"tag":139,"children":412},[413],"Acceptance rate and edit distance:"," the share of drafts sent with light edits. No public benchmark exists for this in B2B sales copilots, so publish your own pilot baseline.",[416,419],{"tag":139,"children":417},[418],"Operational KPIs:"," time to first response, quote cycle time (t0 to t1 in the sequence above), discount leakage, and win rate by response-speed bucket.",{"type":146,"level":147,"id":122,"text":123},{"type":135,"content":422},[423],"They will ask whether the copilot monitors individual reps. The tool itself is not the problem; per-rep usage statistics, per-rep acceptance rates and outcome leaderboards are. Design the metrics so the answer is no.",{"type":135,"content":425},[426,427,430,431,184],"In Austria, § 96 Abs 1 Z 3 ArbVG makes control measures and technical systems that monitor employees and touch human dignity subject to works-council consent, in practice a works agreement. The WKO’s April 2026 summary of a Federal Administrative Court decision (BVwG 27.6.2025, W218 2298555-1) describes an approved arrangement with live status monitoring and per-employee weekly reports only on threshold breaches of ±15%, anonymized access for senior roles and 15-month retention (",{"tag":353,"href":56,"children":428},[429],"WKO","). That is the level of detail the works council will expect. The broader picture is in ",{"tag":155,"to":432,"children":433},"\u002Fblog\u002Fworks-council-ai-tools-austria-germany",[434],"AI tools and the works council in Austria and Germany",{"type":135,"content":436},[437,438,441,442,445,446,449,450,184],"Under the EU AI Act, Annex III point 4(b) lists AI systems intended to allocate tasks based on individual behavior or to monitor and evaluate the performance and behavior of workers as high-risk (",{"tag":353,"href":59,"children":439},[440],"Annex III","). A copilot that ranks reps by acceptance rate drifts toward that category. If it lands there, Article 26 brings deployer duties, including informing workers’ representatives before use and keeping logs for at least six months (",{"tag":353,"href":62,"children":443},[444],"Article 26","). After the Digital Omnibus, Regulation (EU) 2026\u002F1744, those Annex III obligations apply from 2 December 2027 (",{"tag":353,"href":65,"children":447},[448],"EUR-Lex","); the timeline is explained in ",{"tag":155,"to":451,"children":452},"\u002Fblog\u002Feu-ai-act-gpai-high-risk-2026",[453],"the EU AI Act for GPAI and high-risk systems",{"type":455,"variant":456,"title":457,"body":458},"callout","warn","Aggregate by default",[459],[460],"Report acceptance rate, cycle time and error rates per team or per region, never per rep, keep raw interaction logs for a defined period, and put that in writing before the pilot starts. The same rule keeps the copilot a tool under the ArbVG and outside Annex III point 4(b).",{"type":146,"level":147,"id":125,"text":126},{"type":135,"content":463},[464],"Do not build it when the underlying data is not trustworthy, when quote volume is low, or when drafting is the only need. A copilot over dirty customer master data and inconsistent price lists industrializes the mess: it produces wrong quotes faster and with more confidence.",{"type":315,"ordered":316,"items":466},[467,469,471],[468],"If a rep writes a handful of quotes a week, a better quote template and a working product search will beat a copilot.",[470],"If the need is email summaries and meeting notes, an off-the-shelf assistant inside the mail and CRM suite is cheaper than a custom build.",[472],"If the configurator rules for complex products are not yet in software, start there; a configured line item is the input a quote draft needs.",{"type":146,"level":147,"id":128,"text":129},{"type":135,"content":475},[476],"A useful pilot is four to eight weeks, read-only at first, with three tools and a measured baseline. This is the scope I would put in writing:",{"type":315,"ordered":168,"items":478},[479,481,483,485,487,489,491,493],[480],"Measure the baseline: time to first response and quote cycle time for the pilot team, before any tool exists.",[482],"Map identities: part numbers, customer numbers, ship-to accounts and price list levels across ERP, PIM and CRM.",[484],"Start with three read-only tools: order history, contract price with trace, stock.",[486],"Run every call on behalf of the rep, with negative entitlement tests in CI.",[488],"Add quote drafts only after the read tools are correct, with idempotency keys and the discount threshold gate.",[490],"Build the eval set from real rep questions and run it on every model or prompt change.",[492],"Prepare the works-council pack: purpose, data, aggregate-only metrics, retention, and a DPIA.",[494],"Agree a rollback plan: the copilot can be switched off without changing any sales process.",{"type":135,"content":496},[497,498,502],"That scope is what a senior freelance engineer or a small studio can deliver as a fixed-price “copilot readiness” pilot, with success defined as acceptance rate and quote cycle time against the baseline rather than a promised return. If you are planning one, my ",{"tag":155,"to":499,"children":500},"\u002Fexpertise\u002Fb2b-ecommerce-developer",[501],"B2B e-commerce work"," covers the ERP, pricing and PIM side it depends on.",{"type":146,"level":147,"id":131,"text":132},{"type":315,"ordered":168,"items":505},[506,509,512,515,518,521,524,527,530,533],[507],{"tag":353,"href":38,"children":508},[37],[510],{"tag":353,"href":41,"children":511},[40],[513],{"tag":353,"href":44,"children":514},[43],[516],{"tag":353,"href":47,"children":517},[46],[519],{"tag":353,"href":50,"children":520},[49],[522],{"tag":353,"href":53,"children":523},[52],[525],{"tag":353,"href":56,"children":526},[55],[528],{"tag":353,"href":59,"children":529},[58],[531],{"tag":353,"href":62,"children":532},[61],[534],{"tag":353,"href":65,"children":535},[64],[537,596,669,739],{"slug":538,"published":539,"minutes":540,"category":7,"tags":541,"keywords":547,"about":557,"sources":567,"cover":589,"og":590,"expertise":591,"locales":592,"lang":70,"title":593,"description":594,"coverAlt":595},"agent-tool-design-descriptions-errors","2026-10-17",11,[542,543,544,545,546],"AI agents","Tool use","Function calling","MCP","Agent design",[183,548,549,550,551,552,553,554,555,556],"writing tool descriptions for llm","function calling best practices","tool use error handling","mcp tool design","tool calling is_error","how many tools should an agent have","tool search defer_loading","agent computer interface","llm tool schema design",[558,561,564],{"name":559,"url":560},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",{"name":562,"url":563},"Model Context Protocol","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"name":565,"url":566},"Poka-yoke","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPoka-yoke",[568,571,574,577,580,583,586],{"title":569,"url":570},"Anthropic Engineering: Writing effective tools for agents, with agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fwriting-tools-for-agents",{"title":572,"url":573},"Anthropic Engineering: Building effective agents (Dec 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",{"title":575,"url":576},"Claude Platform Docs: Define tools","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fdefine-tools",{"title":578,"url":579},"Claude Platform Docs: Handle tool calls","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fhandle-tool-calls",{"title":581,"url":582},"Claude Platform Docs: Tool search tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Ftool-search-tool",{"title":584,"url":585},"Model Context Protocol specification 2025-11-25: Tools","https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-11-25\u002Fserver\u002Ftools",{"title":587,"url":588},"OpenAI API Docs: Function calling","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Ffunction-calling","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fagent-tool-design-descriptions-errors\u002Fog.jpg","ai-engineer",[70,71,72],"Designing tools for AI agents: names, descriptions, schemas and error messages","How to design agent tools that get picked and called correctly: task-shaped tools, descriptions, schemas, compact responses and errors a model can act on.","Three rectangular slots in a base, with a block of matching width lined up over the middle slot and two wrong-width blocks beside it.",{"slug":597,"published":539,"minutes":540,"category":7,"tags":598,"keywords":604,"about":617,"sources":627,"cover":663,"og":664,"expertise":591,"locales":665,"lang":70,"title":666,"description":667,"coverAlt":668},"coding-agents-legacy-codebase-migration",[599,600,601,602,603],"Legacy migration","Coding agents","Strangler fig","Testing","Code review",[605,606,607,608,609,610,611,612,613,614,615,616],"legacy code migration ai","coding agent legacy codebase","strangler fig pattern ai","characterization tests legacy code","ai code migration review","agent assisted refactoring","legacy modernization coding agent","differential testing migration","shadow traffic migration","ai code review gate","test harness before migration","llm code migration",[618,621,624],{"name":619,"url":620},"Legacy code","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLegacy_code",{"name":622,"url":623},"Characterization test","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCharacterization_test",{"name":625,"url":626},"Strangler fig pattern","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStrangler_fig_pattern",[628,631,633,636,639,642,645,648,651,654,657,660],{"title":629,"url":630},"Martin Fowler: Strangler Fig (2024)","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",{"title":632,"url":623},"Wikipedia: Characterization test",{"title":634,"url":635},"Google Research: Accelerating code migrations with AI (2024)","https:\u002F\u002Fresearch.google\u002Fblog\u002Faccelerating-code-migrations-with-ai\u002F",{"title":637,"url":638},"Ziftci et al.: Migrating Code At Scale With LLMs At Google (arXiv 2504.09691)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.09691",{"title":640,"url":641},"Anthropic: Effective harnesses for long-running agents (2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-harnesses-for-long-running-agents",{"title":643,"url":644},"Anthropic: Redesigning source control at Anthropic (2026)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fredesigning-source-control",{"title":646,"url":647},"METR: Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity","https:\u002F\u002Fmetr.org\u002Fblog\u002F2025-07-10-early-2025-ai-experienced-os-dev-study\u002F",{"title":649,"url":650},"Chand et al.: Why Industry Migrates and When It Trusts LLMs (ESEM 2026)","https:\u002F\u002Fdrops.dagstuhl.de\u002Fentities\u002Fdocument\u002F10.4230\u002FLIPIcs.ESEM.2026.85",{"title":652,"url":653},"Li et al.: Environment-in-the-Loop: Rethinking Code Migration with LLM-based Agents (arXiv 2602.09944)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2602.09944",{"title":655,"url":656},"AWS: Amazon Q Developer just reached a $260 million dollar milestone (2024)","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Famazon-q-developer-just-reached-a-260-million-dollar-milestone\u002F",{"title":658,"url":659},"OpenAI: Why SWE-bench Verified no longer measures frontier coding capabilities (2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fwhy-we-no-longer-evaluate-swe-bench-verified\u002F",{"title":661,"url":662},"GitHub Docs: About GitHub Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcoding-agent\u002Fabout-coding-agent","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcoding-agents-legacy-codebase-migration\u002Fog.jpg",[70,71,72],"Migrating a legacy codebase with coding agents: a strangler fig playbook","How to use coding agents on a legacy migration: characterization tests first, one seam per task, review gates and differential verification.","A stack of slabs with the top two replaced by fresh ones beside a seam and a check.",{"slug":670,"published":539,"minutes":671,"category":7,"tags":672,"keywords":676,"about":688,"sources":698,"cover":733,"og":734,"expertise":591,"locales":735,"lang":70,"title":736,"description":737,"coverAlt":738},"background-agents-async-pr-workflow",12,[600,673,674,603,675],"Pull requests","CI","Automation",[677,678,679,680,681,682,683,684,685,686,687],"background coding agent","async coding agent","cloud coding agent pull request","copilot coding agent limits","codex cloud tasks","claude code cloud sessions","jules coding agent limits","agent pull request review","coding agent sandbox","agent CI gating","cost per merged pull request",[689,692,695],{"name":690,"url":691},"Software agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_agent",{"name":693,"url":694},"Pull request","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDistributed_version_control",{"name":696,"url":697},"Continuous integration","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContinuous_integration",[699,700,703,706,709,712,715,718,721,724,727,730],{"title":661,"url":662},{"title":701,"url":702},"GitHub Docs: Risks and mitigations for Copilot cloud agent","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fconcepts\u002Fagents\u002Fcloud-agent\u002Frisks-and-mitigations",{"title":704,"url":705},"OpenAI Developers: Codex cloud environments","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcloud\u002Fenvironments",{"title":707,"url":708},"Anthropic: Use Claude Code in the cloud","https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-code-on-the-web",{"title":710,"url":711},"Google Jules: Limits and plans","https:\u002F\u002Fjules.google\u002Fdocs\u002Fusage-limits\u002F",{"title":713,"url":714},"Google Jules: Getting started","https:\u002F\u002Fjules.google\u002Fdocs\u002F",{"title":716,"url":717},"GitHub Docs: About protected branches","https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-protected-branches\u002Fabout-protected-branches",{"title":719,"url":720},"GitHub Docs: Models and pricing for GitHub Copilot","https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Freference\u002Fcopilot-billing\u002Fmodels-and-pricing",{"title":722,"url":723},"OpenAI Developers: Codex pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fpricing",{"title":725,"url":726},"Ehsani et al.: Where Do AI Coding Agents Fail? An Empirical Study of Failed Agentic Pull Requests in GitHub (MSR 2026, arXiv 2601.15195)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.15195",{"title":728,"url":729},"Peralta et al.: Why Are Agentic Pull Requests Merged or Rejected? An Empirical Study (MSR 2026, arXiv 2605.22534)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2605.22534",{"title":731,"url":732},"DORA: State of AI-assisted Software Development 2025","https:\u002F\u002Fdora.dev\u002Fdora-report-2025","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbackground-agents-async-pr-workflow\u002Fog.jpg",[70,71,72],"Background coding agents that open PRs: a practical async workflow","How async coding agents queue tasks, run in sandboxes, open draft PRs and pass CI. Provider limits, cost controls, review design and failure modes.","One card in a tray fanning out to five pads, all arrows leading to one page behind a gate.",{"slug":740,"published":741,"minutes":6,"category":7,"tags":742,"keywords":748,"about":760,"sources":768,"cover":801,"og":802,"expertise":591,"locales":803,"lang":70,"title":804,"description":805,"coverAlt":806},"context-rot-compaction-long-running-agents","2026-10-16",[743,744,745,746,747],"Context rot","Compaction","Context engineering","Long-running agents","Agent memory",[749,750,751,752,753,754,755,756,757,758,759],"context rot","context rot LLM","compaction AI agents","context engineering","long-running agents context window","Claude compaction API","context editing clear tool results","OpenAI responses compaction","lost in the middle LLM","agent context management","sub-agents context isolation",[761,764,767],{"name":762,"url":763},"Context window","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLarge_language_model#Context_window",{"name":765,"url":766},"Attention (machine learning)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAttention_(machine_learning)",{"name":559,"url":560},[769,772,775,778,781,783,786,789,792,795,798],{"title":770,"url":771},"Chroma: Context Rot: How Increasing Input Tokens Impacts LLM Performance (Jul 2025)","https:\u002F\u002Fresearch.trychroma.com\u002Fcontext-rot",{"title":773,"url":774},"Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2307.03172",{"title":776,"url":777},"Modarressi et al.: NoLiMa: Long-Context Evaluation Beyond Literal Matching (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.05167",{"title":779,"url":780},"Anthropic: Effective context engineering for AI agents (Sep 2025)","https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Feffective-context-engineering-for-ai-agents",{"title":782,"url":641},"Anthropic: Effective harnesses for long-running agents (Nov 2025)",{"title":784,"url":785},"Claude API docs: Compaction at a token threshold","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-threshold",{"title":787,"url":788},"Claude API docs: Compaction on demand","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcompaction-on-demand",{"title":790,"url":791},"Claude API docs: Context editing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fcontext-editing",{"title":793,"url":794},"Claude API docs: Memory tool","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fagents-and-tools\u002Ftool-use\u002Fmemory-tool",{"title":796,"url":797},"OpenAI API docs: Compaction","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fcompaction",{"title":799,"url":800},"Cognition: Don't Build Multi-Agents","https:\u002F\u002Fcognition.ai\u002Fblog\u002Fdont-build-multi-agents","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontext-rot-compaction-long-running-agents\u002Fog.jpg",[70,71,72],"Context rot in long-running agents: clearing, compaction, memory and sub-agents","Why LLM accuracy drops as context grows, and how clearing tool results, compaction, notes and sub-agents keep long-running agents on track.","A small square press squeezing a tall stack of sheets into a short one, two notes branching off.",1792337027016]