[{"data":1,"prerenderedAt":702},["ShallowReactive",2],{"navigation_docs":3,"-tools-file-manager":139,"-tools-file-manager-surround":697},[4,8,12,16,20,24,28,32,59,63,117,121,135],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","1.introduction",{"title":9,"path":10,"stem":11},"Memory","\u002Fmemory","10.memory",{"title":13,"path":14,"stem":15},"Customization","\u002Fcustomization","11.customization",{"title":17,"path":18,"stem":19},"Deployment","\u002Fdeployment","12.deployment",{"title":21,"path":22,"stem":23},"Reference","\u002Freference","13.reference",{"title":25,"path":26,"stem":27},"Quickstart","\u002Fquickstart","2.quickstart",{"title":29,"path":30,"stem":31},"Installation","\u002Finstallation","3.installation",{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":58},"Connectors","i-lucide-cable","\u002Fconnectors","4.connectors",[38,42,46,50,54],{"title":39,"path":40,"stem":41},"Telegram","\u002Fconnectors\u002Ftelegram","4.connectors\u002F1.telegram",{"title":43,"path":44,"stem":45},"Slack","\u002Fconnectors\u002Fslack","4.connectors\u002F2.slack",{"title":47,"path":48,"stem":49},"Email","\u002Fconnectors\u002Femail","4.connectors\u002F3.email",{"title":51,"path":52,"stem":53},"API","\u002Fconnectors\u002Fapi","4.connectors\u002F4.api",{"title":55,"path":56,"stem":57},"Terminal","\u002Fconnectors\u002Fterminal","4.connectors\u002F5.terminal",false,{"title":60,"path":61,"stem":62},"Attachments","\u002Fattachments","5.attachments",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":58},"Tools","i-lucide-wrench","\u002Ftools","6.tools",[69,73,77,81,85,89,93,97,101,105,109,113],{"title":70,"path":71,"stem":72},"File Manager","\u002Ftools\u002Ffile-manager","6.tools\u002F1.file-manager",{"title":74,"path":75,"stem":76},"Text-to-Speech","\u002Ftools\u002Ftext-to-speech","6.tools\u002F10.text-to-speech",{"title":78,"path":79,"stem":80},"Confirmations","\u002Ftools\u002Fconfirmations","6.tools\u002F11.confirmations",{"title":82,"path":83,"stem":84},"Adding Custom Tools","\u002Ftools\u002Fadding-custom-tools","6.tools\u002F12.adding-custom-tools",{"title":86,"path":87,"stem":88},"Image Manager","\u002Ftools\u002Fimage-manager","6.tools\u002F2.image-manager",{"title":90,"path":91,"stem":92},"Web Request","\u002Ftools\u002Fweb-request","6.tools\u002F3.web-request",{"title":94,"path":95,"stem":96},"Reminders","\u002Ftools\u002Freminders","6.tools\u002F4.reminders",{"title":98,"path":99,"stem":100},"Heartbeats","\u002Ftools\u002Fheartbeats","6.tools\u002F5.heartbeats",{"title":102,"path":103,"stem":104},"Email Manager","\u002Ftools\u002Femail-manager","6.tools\u002F6.email-manager",{"title":106,"path":107,"stem":108},"Calendar","\u002Ftools\u002Fcalendar","6.tools\u002F7.calendar",{"title":110,"path":111,"stem":112},"Read Database","\u002Ftools\u002Fread-database","6.tools\u002F8.read-database",{"title":114,"path":115,"stem":116},"Headless Browser","\u002Ftools\u002Fbrowser","6.tools\u002F9.browser",{"title":118,"path":119,"stem":120},"Tinker","\u002Ftinker","7.tinker",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":58},"Skills","i-lucide-sparkles","\u002Fskills","8.skills",[127,131],{"title":128,"path":129,"stem":130},"Overview","\u002Fskills\u002Foverview","8.skills\u002F1.overview",{"title":132,"path":133,"stem":134},"Adding Custom Skills","\u002Fskills\u002Fadding-custom-skills","8.skills\u002F2.adding-custom-skills",{"title":136,"path":137,"stem":138},"Personas","\u002Fpersonas","9.personas",{"id":140,"title":70,"body":141,"description":690,"extension":691,"links":692,"meta":693,"navigation":694,"path":71,"seo":695,"stem":72,"__hash__":696},"docs\u002F6.tools\u002F1.file-manager.md",{"type":142,"value":143,"toc":678},"minimark",[144,148,161,165,172,188,194,198,325,329,404,409,413,419,461,465,471,501,508,512,519,561,564,568,575,583,587,592,601,635,638,667,674],[145,146,5],"h2",{"id":147},"introduction",[149,150,151,152,156,157,160],"p",{},"The File Manager tool gives the agent access to the file system through Laravel's storage abstraction. It can use any disk configured in ",[153,154,155],"code",{},"config\u002Ffilesystems.php"," and listed in ",[153,158,159],{},"LARACLAW_ALLOWED_DISKS",".",[145,162,164],{"id":163},"allowed-disks","Allowed Disks",[149,166,167,168,171],{},"The agent can only see disks listed in ",[153,169,170],{},"filesystem.allowed_disks",":",[173,174,179],"pre",{"className":175,"code":176,"language":177,"meta":178,"style":178},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","LARACLAW_ALLOWED_DISKS=local,public,s3\n","env","",[153,180,181],{"__ignoreMap":178},[182,183,186],"span",{"class":184,"line":185},"line",1,[182,187,176],{},[149,189,190,191,160],{},"Disks not in the list are invisible to the agent. The default is ",[153,192,193],{},"local",[145,195,197],{"id":196},"reading-and-writing","Reading and Writing",[199,200,201,217],"table",{},[202,203,204],"thead",{},[205,206,207,211,214],"tr",{},[208,209,210],"th",{},"Operation",[208,212,213],{},"Required parameters",[208,215,216],{},"Notes",[218,219,220,240,256,275,293,309],"tbody",{},[205,221,222,228,237],{},[223,224,225],"td",{},[153,226,227],{},"list",[223,229,230,233,234],{},[153,231,232],{},"disk",", ",[153,235,236],{},"path",[223,238,239],{},"Returns files and directories at the path",[205,241,242,247,253],{},[223,243,244],{},[153,245,246],{},"read",[223,248,249,233,251],{},[153,250,232],{},[153,252,236],{},[223,254,255],{},"Truncated at 100 KB. Binary files are rejected.",[205,257,258,263,272],{},[223,259,260],{},[153,261,262],{},"write",[223,264,265,233,267,233,269],{},[153,266,232],{},[153,268,236],{},[153,270,271],{},"content",[223,273,274],{},"Overwrites if the file exists",[205,276,277,282,290],{},[223,278,279],{},[153,280,281],{},"append",[223,283,284,233,286,233,288],{},[153,285,232],{},[153,287,236],{},[153,289,271],{},[223,291,292],{},"Creates the file if it doesn't exist",[205,294,295,300,306],{},[223,296,297],{},[153,298,299],{},"exists",[223,301,302,233,304],{},[153,303,232],{},[153,305,236],{},[223,307,308],{},"Returns whether the file is present",[205,310,311,316,322],{},[223,312,313],{},[153,314,315],{},"mkdir",[223,317,318,233,320],{},[153,319,232],{},[153,321,236],{},[223,323,324],{},"Auto-renames if the directory already exists",[145,326,328],{"id":327},"moving-copying-and-deleting","Moving, Copying, and Deleting",[199,330,331,341],{},[202,332,333],{},[205,334,335,337,339],{},[208,336,210],{},[208,338,213],{},[208,340,216],{},[218,342,343,362,379],{},[205,344,345,350,359],{},[223,346,347],{},[153,348,349],{},"move",[223,351,352,233,354,233,356],{},[153,353,232],{},[153,355,236],{},[153,357,358],{},"destination",[223,360,361],{},"Auto-renames the destination on collision",[205,363,364,369,377],{},[223,365,366],{},[153,367,368],{},"copy",[223,370,371,233,373,233,375],{},[153,372,232],{},[153,374,236],{},[153,376,358],{},[223,378,361],{},[205,380,381,386,397],{},[223,382,383],{},[153,384,385],{},"delete",[223,387,388,233,390,392,393,396],{},[153,389,232],{},[153,391,236],{}," (or ",[153,394,395],{},"paths",")",[223,398,399,403],{},[400,401,402],"strong",{},"Requires confirmation."," Supports batch delete.",[149,405,406,408],{},[153,407,385],{}," prompts the user for yes\u002Fno confirmation through the connector before any file is removed.",[145,410,412],{"id":411},"saving-inbound-attachments","Saving Inbound Attachments",[149,414,415,416,171],{},"When a user sends a file in chat, the agent can save it to a disk with ",[153,417,418],{},"save_attachment",[199,420,421,431],{},[202,422,423],{},[205,424,425,428],{},[208,426,427],{},"Parameter",[208,429,430],{},"Description",[218,432,433,443,452],{},[205,434,435,440],{},[223,436,437],{},[153,438,439],{},"source",[223,441,442],{},"The path of the inbound attachment (provided to the agent in conversation metadata)",[205,444,445,449],{},[223,446,447],{},[153,448,232],{},[223,450,451],{},"Destination disk",[205,453,454,458],{},[223,455,456],{},[153,457,236],{},[223,459,460],{},"Destination path. Auto-renamed on collision.",[145,462,464],{"id":463},"attaching-files-to-a-reply","Attaching Files to a Reply",[149,466,467,470],{},[153,468,469],{},"attach_to_reply"," sends a file from any allowed disk back to the user as part of the reply:",[199,472,473,481],{},[202,474,475],{},[205,476,477,479],{},[208,478,427],{},[208,480,430],{},[218,482,483,492],{},[205,484,485,489],{},[223,486,487],{},[153,488,232],{},[223,490,491],{},"Source disk",[205,493,494,498],{},[223,495,496],{},[153,497,236],{},[223,499,500],{},"Source file path",[149,502,503,504,507],{},"The file is staged in ",[153,505,506],{},"outbound\u002F{message_uuid}\u002F"," and delivered by the connector when the agent's reply is sent.",[145,509,511],{"id":510},"downloading-remote-files","Downloading Remote Files",[149,513,514,515,518],{},"The ",[153,516,517],{},"download_url"," operation fetches a remote file and saves it to a disk:",[199,520,521,529],{},[202,522,523],{},[205,524,525,527],{},[208,526,427],{},[208,528,430],{},[218,530,531,541,549],{},[205,532,533,538],{},[223,534,535],{},[153,536,537],{},"url",[223,539,540],{},"The URL to download",[205,542,543,547],{},[223,544,545],{},[153,546,232],{},[223,548,451],{},[205,550,551,555],{},[223,552,553],{},[153,554,236],{},[223,556,557,558,560],{},"Destination path or directory. If ",[153,559,236],{}," has no extension, the filename is derived from the URL.",[149,562,563],{},"The download has a 30 second timeout.",[145,565,567],{"id":566},"protected-paths","Protected Paths",[149,569,570,571,574],{},"The agent cannot list, read, write, move, or delete the inbound or outbound attachment directories on the attachments disk. They are reserved for Laraclaw's message-attachment lifecycle. See ",[572,573,60],"a",{"href":61}," for the full picture.",[149,576,577,578,582],{},"This is the ",[579,580,581],"em",{},"only"," protection. Everything else inside an allowlisted disk is fully readable and writable by the agent.",[145,584,586],{"id":585},"allowlisting-disks","Allowlisting Disks",[149,588,589,590,171],{},"The File Manager and Image Manager can only see disks listed in ",[153,591,159],{},[173,593,595],{"className":175,"code":594,"language":177,"meta":178,"style":178},"LARACLAW_ALLOWED_DISKS=local\n",[153,596,597],{"__ignoreMap":178},[182,598,599],{"class":184,"line":185},[182,600,594],{},[149,602,603,604,606,607,609,610,613,614,617,618,620,621,233,624,233,627,630,631,634],{},"The default is ",[153,605,193],{},". In a stock Laravel install, the ",[153,608,193],{}," disk points at ",[153,611,612],{},"storage\u002Fapp\u002Fprivate\u002F"," — a Laravel-managed application folder, ",[579,615,616],{},"not"," the project root and ",[579,619,616],{}," the system root. The agent cannot read ",[153,622,623],{},".env",[153,625,626],{},"app\u002F",[153,628,629],{},"vendor\u002F",", or ",[153,632,633],{},"config\u002F"," through this disk because they are outside its root.",[149,636,637],{},"Two things to keep in mind:",[639,640,641,654],"ul",{},[642,643,644,647,648,650,651,653],"li",{},[400,645,646],{},"Custom disks."," If you've remapped ",[153,649,193],{}," (or any disk you allowlist) to point somewhere broader — say, the project root or a shared NFS mount — the agent will see everything inside it. Audit your ",[153,652,155],{}," before adding a disk to the allowlist.",[642,655,656,659,660,663,664,666],{},[400,657,658],{},"The agent folder."," ",[153,661,662],{},"laraclaw\u002F"," holds the instructions, personas, and skills, and lives at the project root by default, where it is not reachable through the stock ",[153,665,193],{}," disk. If you add a disk that does reach them, the agent could rewrite its own behavior on the fly. Keep those directories out of any allowlisted disk's root.",[149,668,669,670,673],{},"The safest production posture is a dedicated disk pointed at a folder you've created specifically for the agent to use (",[153,671,672],{},"storage\u002Fapp\u002Fagent",", an S3 bucket, etc.) and nothing else in the allowlist.",[675,676,677],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":178,"searchDepth":679,"depth":679,"links":680},2,[681,682,683,684,685,686,687,688,689],{"id":147,"depth":679,"text":5},{"id":163,"depth":679,"text":164},{"id":196,"depth":679,"text":197},{"id":327,"depth":679,"text":328},{"id":411,"depth":679,"text":412},{"id":463,"depth":679,"text":464},{"id":510,"depth":679,"text":511},{"id":566,"depth":679,"text":567},{"id":585,"depth":679,"text":586},"Read, write, move, copy, and delete files on any allowed Laravel storage disk.","md",null,{},true,{"title":70,"description":690},"YqrLc3qREKT7-_exO49RQ-T6MFGwy9Sr8IQsf1mcOqI",[698,700],{"title":60,"path":61,"stem":62,"description":699,"children":-1},"How Laraclaw stores files coming in from a connector and going back out to one.",{"title":74,"path":75,"stem":76,"description":701,"children":-1},"Reply with synthesized audio instead of (or in addition to) text.",1786661906119]