{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2607-18316","title":"Binding Drift in Multi-Step Tool-Augmented Agents","arxiv_id":"2607.18316","date":"2026-07-17","proceeding":null,"authors":["Rahul Suresh Babu","Shashank Indukuri"],"abstract":"Tool-augmented language-model agents execute multi-step workflows over external systems, resolving an entity once and then acting on it across subsequent steps. Prior work shows that in single-step actions, agents select the correct tool but bind it to the wrong entity 24-26% of the time. We study what happens to entity bindings over time: do they stay correct, silently drift to a different entity, or, if wrong from the start, propagate and compound? We formalize binding drift (correct at step 1, wrong later) as distinct from error propagation (wrong at step 1, carried forward), and score them on disjoint workflow sets so the two cannot be conflated. In a controlled multi-step testbed (200 workflows, 580 entity-binding-scored steps, four enterprise domains, eight model backends spanning small to frontier), we find: (1) under controlled error injection, an entity lock (the intuitive \"persist the first binding\" fix) amplifies wrong actions from 907 to 2,746 (3.0x; bootstrap 95% CI [2.8, 3.3]), because it faithfully carries the seeded wrong entity into every later step; (2) the amplification reaches 8.5x on the most affected model (Claude Opus 4.5); (3) a practical LLM-based re-verifier (a single cheap second model call re-reading the original instruction) reduces wrong actions by 79% (0.21x; CI [0.18, 0.25]), closing the gap to within 1 percentage point of an oracle upper-bound (0.20x); and (4) in the natural (non-injected) setting, baseline agents drift on 18% of eligible workflows, with the per-step error rate rising across steps. Persistence and re-verification are not interchangeable: a defense that eliminates drift can worsen propagation, and a practical re-verifier nearly matches oracle recovery.","url_abs":"https://arxiv.org/abs/2607.18316","url_pdf":"https://arxiv.org/pdf/2607.18316","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2607.18316","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2607.18316"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/shashank-indukuri/binding-drift","reach":null}],"summary":{"ran":16,"unverified":1},"by_repo_kind":{"found_in_text":{"samples":17,"ran":16,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"8c1c61144a33359c","entry":"distractor","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/mock_run.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/mock_run.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8c1c61144a33359c"}},{"code_sha256_prefix":"9d69103e9d65b886","entry":"doc","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/generate_200_workflows.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/generate_200_workflows.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9d69103e9d65b886"}},{"code_sha256_prefix":"195458c6d0492bb3","entry":"event","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/generate_200_workflows.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/generate_200_workflows.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"195458c6d0492bb3"}},{"code_sha256_prefix":"bf2af8fba1d08847","entry":"f","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_results.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_results.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bf2af8fba1d08847"}},{"code_sha256_prefix":"dfda7c89d9a1ecb9","entry":"fnum","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_injection.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_injection.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dfda7c89d9a1ecb9"}},{"code_sha256_prefix":"b9df9a3d522d5886","entry":"load","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/plot_drift_curve.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/plot_drift_curve.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b9df9a3d522d5886"}},{"code_sha256_prefix":"97e8613d5c06d26e","entry":"load","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_injection.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_injection.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"97e8613d5c06d26e"}},{"code_sha256_prefix":"10f27ef9b30f3839","entry":"load","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_results.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_results.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"10f27ef9b30f3839"}},{"code_sha256_prefix":"2d8f99924bd2146b","entry":"load_workflows","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/run_drift_experiment.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/run_drift_experiment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2d8f99924bd2146b"}},{"code_sha256_prefix":"b326f003f7b8683d","entry":"modkey","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_injection.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_injection.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b326f003f7b8683d"}},{"code_sha256_prefix":"6491399bb73b34a7","entry":"pct","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/aggregate_results.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/aggregate_results.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6491399bb73b34a7"}},{"code_sha256_prefix":"e40ef66ffa72bb13","entry":"person","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/generate_200_workflows.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/generate_200_workflows.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e40ef66ffa72bb13"}},{"code_sha256_prefix":"0c5efda80efed6ed","entry":"pseudo_model","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/mock_run.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/mock_run.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0c5efda80efed6ed"}},{"code_sha256_prefix":"6e3bb9f17b8cd060","entry":"score_step","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/environment.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/environment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6e3bb9f17b8cd060"}},{"code_sha256_prefix":"26b498461e614d0f","entry":"score_workflow","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/environment.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/environment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"26b498461e614d0f"}},{"code_sha256_prefix":"3739cf351f691254","entry":"visible_tools","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/run_drift_experiment.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/run_drift_experiment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3739cf351f691254"}},{"code_sha256_prefix":"9950bd7b3228cab7","entry":"apply_defenses","repo":"shashank-indukuri/binding-drift","repo_kind":"found_in_text","path":"code/environment.py","file_url":"https://github.com/shashank-indukuri/binding-drift/blob/HEAD/code/environment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9950bd7b3228cab7"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}