Send to the shared area
When one item or a multi-selection is active, the shared-area button can copy the selected part from the workspace, group, true/false action branch, dialog, and variables surfaces into the device-local library.
No-Code Workspace — Block Reference
Deletes a sandboxed file or folder
Documented for app version 1.0.50Updated:
Block Preview
Captured from the in-app Visual Builder block card in the English UI.

Deletes the configured sandbox file path. Use it for cleanup, removing temporary exports, and controlled cleanup after recovery flows.
Use it when you want to:
Clean up temporary reports or cache files
Remove an intermediate file after a successful export
Refresh stale output at the end of a recovery flow
Add FILE_DELETE
Enter the file path
For critical flows, validate the target first with ASSERT, FILE_READ, or COMPARE
Local sandbox file or folder path to delete
| Parameter | Description |
|---|---|
| File Path | Local sandbox file or folder path to delete |
Scenario: Clean up a temporary report after export
Create the report with HTTP_REQUEST or FILE_WRITE
If the flow succeeds, FILE_DELETE -> path = logs/temp_report.txt
Record cleanup with LOG
COMBINATIONS:
FILE_READ + ASSERT + FILE_DELETE: validate then clean up
ERROR_HANDLER + FILE_DELETE: remove corrupt intermediate output
FILE_WRITE + FILE_DELETE: one-time export cleanup
Keep delete blocks in cleanup or recovery sections when possible; separate them from the main data production steps.
WARNING:
Delete operations cannot be undone; folders are deleted with their contents
A path that does not exist counts as already deleted and raises no error
A path outside the sandbox or an invalid path is rejected and the block raises an error
Add precondition checks before deleting valuable user data
The same block at three levels: a quick start, the real options, and professional techniques.
FILE_DELETE removes the sandbox file or folder path you specify. Use it to clean up temporary reports, cache, or intermediate output you no longer need. The delete is irreversible, so reviewing the target before deleting matters.
The path still passes sandbox validation at runtime: paths that escape the sandbox, contain null bytes, or are invalid are not deleted but rejected. A path that does not exist counts as already deleted and raises no error; folders are deleted together with their contents. If the path is rejected or the delete fails, the generated code raises an error (inside a run-forever loop it logs the failure and the loop continues). You can make the path dynamic by binding it to a variable with the lightbulb, but dynamic paths carry a higher risk of a wrong value; in critical flows validate the target first with ASSERT, FILE_READ, or COMPARE. Keeping delete blocks in cleanup/recovery sections separates them from main data production.
Place FILE_DELETE at the end of one-time export flows: produce a temp file with FILE_WRITE, process it, and delete only AFTER success is confirmed. To refresh corrupt or half-written intermediate output, delete and regenerate inside an ERROR_HANDLER recovery branch. If you use a dynamic path, verify with FILE_READ right before deleting that the file has the expected content (the strongest guard against deleting the wrong file). Never delete valuable user data directly; keep deletable items in a separate, dedicated cache/temp directory so even a wrong variable only affects throwaway data.
Small, reproducible examples that combine several blocks — build them straight into your own macro.
This block is useful on its own — but it shines when paired with the right partners.
Confirms by content that you are deleting the right file before an irreversible action.
Deletes corrupt intermediate output in the recovery branch and regenerates a clean state.
Completes a write-process-delete lifecycle for one-time temporary files.
Forgetting the delete is irreversible. Fix: never delete valuable data directly; add a precondition (FILE_READ/ASSERT/COMPARE) first.
Ignoring that a dynamic path bound with the lightbulb can hold a wrong value. Fix: verify the path points to the expected file right before deleting.
Placing the delete in the middle of main data production. Fix: group deletes in a cleanup/recovery section, separate from critical production steps.
Keep everything deletable in a dedicated cache/ or temp/ directory so even a mistake only touches throwaway data, never your real output.
Log delete success/failure; it makes diagnosing cases like a sandbox rejection or a missing file much easier afterward.
The Lua below is what the Code Editor generates for this block with sample settings. Adding cases, branches, actions or loops, or changing settings, extends the generated code accordingly. Study it to see what the block does under the hood, to learn Lua, or to copy and adapt it. Use the Copy button (top-right) to paste it into the Code Editor, or “Try in Editor →” to run it in the live editor.
local _file_delete_ok1 = File.delete("scripts/output.txt")
if not _file_delete_ok1 then
error("FILE_DELETE action returned false: FILE_DELETE")
endNote: generated code can evolve across versions; helper names (e.g. _reg1, m1) and internal optimizations may change. The logic and the called APIs reflect the block’s behavior.
The guidance below is not identical for every block. It summarizes the professional controls that most often repeat in the selected block family.
Use file paths, key names, regex sources, and JSON paths with clear naming discipline.
Define default outputs clearly so the builder flow does not collapse when data is missing.
For KV or file writes, verifying the result in the next block is healthier in production-grade flows.
Instead of carrying large raw payloads, extract the value you need and pass it forward via a result variable.
TOUCH and TOUCH_BREAK cover recipe-style touch flows. Raw pointer choreography such as Touch.down, Touch.move, Touch.up, Touch.dispatch, Touch.reset, Touch.breakAll, and Touch.releaseAfter is not exposed as a first-class builder block.
Touch.downTouch.moveTouch.upTouch.dispatchTouch.resetTouch.breakAllTouch.releaseAfterThe DIALOG block and dialog designer cover a bounded field set in the builder: Info Text, Text Input, Checkbox, Description, Radio Group, Dropdown, Multi Select, Tab Group, Date Time, Number Range, Slider, Image Picker, Color Picker, File Picker, Recorder Picker, Tag, Signature, and Spacer. The buttons are designed too: the Positive button and Negative button tabs set each button’s text, background, and border color, corner radius, and minimum height next to a preview. Freer Setting.builder composition, multi-step wizard flows, and mixed HUD/dialog choreography still do not map 1:1 into the builder.
Coming soonv1.0.51Two more fields: Agent Detect references (agent_detect_editor) lets the user pick a saved reference set or add and edit references, and Save confirms the selection; Navigation setup editor (navigation_editor) edits a saved map, marker and route from the Dialog and returns the setup and route selection without moving the character.
Setting.builderDialogHudTextViewAgentDetectEditorNavigationEditorHTTP_GET, HTTP_POST, and HTTP_PUT cover common fixed-method flows; HTTP_REQUEST covers one bounded request with method, header lines, body, content type, query parameters (GET and DELETE), timeout, and a bounded retry. These blocks never throw; they write the status code (-1 on a network failure). Cookie handling, chained request objects, and lower-level client flows still need the code editor.
Request()Request.setCookieRequest.getCookiesCUSTOM_CODEThe MAP, LIST, JSON_PARSE, REGEX_MATCH, and METRICS blocks cover the everyday cases: map actions, a static list, reading a value from a JSON path, regex match, find, replace, and split, and metrics actions. The rest of the Map, Array, JSON, Regex, and Metrics APIs (for example Array sort, filter, and map) is broader than the builder recipe model and stays on the CUSTOM_CODE and code editor side.
MapArrayJSONRegexMetricsRuntime helpers, raw Request objects, Lua built-ins such as print/pcall/xpcall, and free-form object chaining patterns are represented through CUSTOM_CODE or the code editor.
RuntimeRequestprintpcallxpcallCUSTOM_CODEEach block card now exposes an independent breakpoint toggle. When enabled, the breakpoint preference is stored with the block.
Breakpoints are only emitted into runtime code when Debug Mode is enabled from Visual Builder settings. When Debug Mode is off, breakpoints stay saved but do not pause execution.
Use ASSERT for fail-fast validation, and use breakpoints for step-by-step tracing and controlled pauses in the same flow.
Variables defined with SET_VARIABLE are accessible throughout the macro (global scope). All blocks can read/write the same variable.
However, a variable defined inside a GROUP will be 'nil' (undefined) until the GROUP executes. Blocks outside the GROUP using this variable may produce unexpected results.
FOR_EACH loop variables (item and index) only carry valid values inside the loop body. Outside the loop they are outside local scope and should not be used.
TRY_CATCH error variable is only valid within the catch block. If the try block succeeds, the catch branch is not entered and the error variable remains undefined.
TIP: Before using a variable inside a GROUP, assign a default value with SET_VARIABLE outside the GROUP. This way the variable won't be nil even if the GROUP has not run.
You can embed variable values and calculations into text fields using {{ expression }} syntax. Expressions inside double curly braces are evaluated as Lua code and the result is inserted into the text.
{{ expression }}Skor: {{ score + 1 }} → "Skor: " .. tostring(score + 1){{ name }} kazandı! → tostring(name) .. " kazandı!"X:{{ x }} Y:{{ y }} → "X:" .. tostring(x) .. " Y:" .. tostring(y)Expressions are checked by the sandbox policy. Security-sensitive calls like loadstring, require, debug are automatically blocked.
Keep scan regions as small as possible — improves speed, reduces false matches.
Always add an exit condition when using infinite loops (BREAK, timeout, or conditional exit).
Use network operations and error-prone steps inside TRY_CATCH.
If you need global error handling, use the Error Handler (ERROR_HANDLER) block as a singleton in the project.
Small coordinate offsets (CLICK/SWIPE) improve tap accuracy across different DPI and screen scales.
Customize macros with Dialog block — different parameters each run.
Define repeating steps once with GROUP_CALL, call from many places.
Cross-macro local library
The Local Shared Macro Area moves blocks, variables, dialog fields, gallery assets, and imported media dependencies between macros on the same device. It is device-local, not cloud sync, not Firebase sharing, and not a replacement for public macro sharing.
Professional usage model: put a reusable login flow, common scan region, shared dialog form, variable group, template image, color profile, replay recording, or imported PLAY_SOUND media file into the shared area from one macro, then import it from the relevant + menu in another macro.
VISUAL_BLOCKSVARIABLESDIALOG_FIELDSTEMPLATE_IMAGECOLOR_SWATCHREPLAY_RECORDMEDIA_FILEWhen one item or a multi-selection is active, the shared-area button can copy the selected part from the workspace, group, true/false action branch, dialog, and variables surfaces into the device-local library.
The shared-area entry under the + menu imports the selected item into the surface that opened it. Main workspace, group, action branch, dialog, and variables each receive the compatible item type.
Gallery items include template images, color swatches, replay records, and imported audio/media files. They can move between macros on the same device so repeated templates, colors, recordings, and PLAY_SOUND media assets do not need to be captured again.
The shared area is not a permanent dumping ground. Delete stale shared items from the shared-library panel; imports create a copy in the target macro and do not rewrite the source macro flow.
AI assistant
Tell MH AI what you want in plain language; it proposes the right block sequence and lands it in the workspace after you approve. In the current release it works with cloud providers such as Gemini, Claude, and OpenAI; on-device local models are on the roadmap.