{"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/agent-workflow-memory","title":"Agent Workflow Memory","arxiv_id":"2409.07429","date":"2024-09-11","proceeding":null,"authors":["Zora Zhiruo Wang","Jiayuan Mao","Daniel Fried","Graham Neubig"],"abstract":"Despite the potential of language model-based agents to solve real-world tasks such as web navigation, current methods still struggle with long-horizon tasks with complex action trajectories. In contrast, humans can flexibly solve complex tasks by learning reusable task workflows from past experiences and using them to guide future actions. To build agents that can similarly benefit from this process, we introduce Agent Workflow Memory (AWM), a method for inducing commonly reused routines, i.e., workflows, and selectively providing workflows to the agent to guide subsequent generations. AWM flexibly applies to both offline and online scenarios, where agents induce workflows from training examples beforehand or from test queries on the fly. We experiment on two major web navigation benchmarks -- Mind2Web and WebArena -- that collectively cover 1000+ tasks from 200+ domains across travel, shopping, and social media, among others. AWM substantially improves the baseline results by 24.6% and 51.1% relative success rate on Mind2Web and WebArena while reducing the number of steps taken to solve WebArena tasks successfully. Furthermore, online AWM robustly generalizes in cross-task, website, and domain evaluations, surpassing baselines from 8.9 to 14.0 absolute points as train-test task distribution gaps widen.","url_abs":"https://arxiv.org/abs/2409.07429v1","url_pdf":"https://arxiv.org/pdf/2409.07429v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"agent-workflow-memory","repo_url":"https://github.com/zorazrw/agent-workflow-memory","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"ai-agent","task_name":"AI Agent"},{"task_slug":"language-modeling","task_name":"Language Modeling"},{"task_slug":"language-modelling","task_name":"Language Modelling"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2409.07429","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2409.07429"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/zorazrw/agent-workflow-memory","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":9,"unverified":5},"by_repo_kind":{"official":{"samples":14,"ran":9,"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":"1fd693309316e206","entry":"clean_workflow_name","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/workflow/retrieve.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/workflow/retrieve.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1fd693309316e206"}},{"code_sha256_prefix":"12b837f02259b5dc","entry":"extract_think_and_action","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"webarena/induce_prompt.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/webarena/induce_prompt.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"12b837f02259b5dc"}},{"code_sha256_prefix":"b3e6a3e94633a331","entry":"get_average","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/results/calc_score.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/results/calc_score.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b3e6a3e94633a331"}},{"code_sha256_prefix":"843f258f80209cff","entry":"get_data_dict","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/offline_induction.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/offline_induction.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"843f258f80209cff"}},{"code_sha256_prefix":"a1075bc76f348b17","entry":"get_examples","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/workflow/retrieve.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/workflow/retrieve.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a1075bc76f348b17"}},{"code_sha256_prefix":"0fe1dcf6a2957447","entry":"get_exemplars","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/memory.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/memory.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0fe1dcf6a2957447"}},{"code_sha256_prefix":"dfc08c39cb335e67","entry":"get_trajectory","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/online_induction.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/online_induction.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dfc08c39cb335e67"}},{"code_sha256_prefix":"e887f421a98b95cd","entry":"is_io_dict","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/online_induction.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/online_induction.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e887f421a98b95cd"}},{"code_sha256_prefix":"1d36e9593f5fb131","entry":"load_workflows","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/workflow/retrieve.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/workflow/retrieve.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1d36e9593f5fb131"}},{"code_sha256_prefix":"9d59295679823ebc","entry":"extract_think_and_action","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"webarena/induce_rule.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/webarena/induce_rule.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9d59295679823ebc"}},{"code_sha256_prefix":"1c21d96a59bbdec1","entry":"get_split","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"mind2web/offline_induction.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/mind2web/offline_induction.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1c21d96a59bbdec1"}},{"code_sha256_prefix":"868712f71f85de88","entry":"load_blocks","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"webarena/induce_prompt.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/webarena/induce_prompt.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"868712f71f85de88"}},{"code_sha256_prefix":"68200314270ba3be","entry":"remove_invalid_steps","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"webarena/induce_prompt.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/webarena/induce_prompt.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"68200314270ba3be"}},{"code_sha256_prefix":"5f0fd52ba91452d0","entry":"remove_invalid_steps","repo":"zorazrw/agent-workflow-memory","repo_kind":"official","path":"webarena/induce_rule.py","file_url":"https://github.com/zorazrw/agent-workflow-memory/blob/HEAD/webarena/induce_rule.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5f0fd52ba91452d0"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}