Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.Tool count: 12.Client note: ctx is injected by the MCP server and is not supplied as a user argument.
Save Parashell documents to disk.Saves the active document, a named document, or all open documents. Documentsthat already have a file path are saved in place. Documents without a storedpath are written as <Name>.FCStd into fallback_dir, or into your homedirectory (e.g. C:\Users\<you> on Windows) when fallback_dir is omitted.Runs automatically before every execute_code call.Args: doc_name: Name of a specific document to save. If omitted, all open documents are saved. fallback_dir: Directory used to save documents that have no FileName yet. If omitted, the user's home directory is used.
Execute arbitrary Python code in Parashell.Parashell exposes a FreeCAD-compatible Python API. Import the APIunder its original module names inside the snippet - use 'import FreeCAD' and'import FreeCADGui' with the FreeCAD-compatible API. Object TypeIds (e.g.'Part::Box', 'PartDesign::Body') are FreeCAD-compatible.Every model edit must run inside an open transaction. Open one withtransaction_create, pass its id here, then transaction_apply to persist thechanges or transaction_cancel to roll them back.Args: code: The Python code to execute inside Parashell's interpreter. reason: A non-technical, straight-to-the-point explanation of why you are running this code. Must be between 10 and 25 words. expected_action: A non-technical, straight-to-the-point description of the expected output and logic. Must be between 5 and 15 words. transaction_id: Id of the open transaction returned by transaction_create.
Failure behavior: if the snippet raises, only the objects created by that failed
call are removed and the document is recomputed. Edits from earlier successful
calls in the same open transaction are preserved, and the transaction stays open
so you can continue or cancel it explicitly with transaction_cancel. The response
lists what was reverted; nothing is saved on failure, so a failed run never leaves
new partial objects behind for the next autosave to persist. Execution waits for
the queued GUI task to finish; it does not report a timeout while the same code
continues mutating the document in the background.
Ask the user where to save a model via a save-location prompt.Opens a dialog letting the user pick a folder and a file name (the .FCStdextension is fixed), then saves the document there. Use this when a model hasno save location yet so applied changes persist where the user wants. Returnswhere the model was saved, or that the user cancelled.Args: doc_name: Document to save. If omitted, the active document is used. suggested_name: Optional default file name to pre-fill (without extension).
Hard-reset a document to the exact state before an applied transaction.Like reverting a commit and every commit above it: restores the pre-changecheckpoint captured before the given transaction opened, discarding the targettransaction's edits and every later change. Transactions newer than the targetare marked cancelled. Restoration verifies document identity and the checkpointobject set before autosave. This destroys applied work - confirm with the userbefore using it when changes would be lost.Args: transaction_id: Id of the applied transaction whose changes should be removed.
Apply an open transaction: commit its changes, recompute, and save.Finalizes every edit made under the transaction as a single atomic change,recomputes the document, and autosaves it (to its existing path, or to yourhome directory as <Name>.FCStd if it has none). The transaction becomes'applied'.Args: transaction_id: Id of the open transaction to apply.
Cancel a transaction and roll back its changes.For an open transaction this aborts and undoes every change made under it.For an already-applied transaction it undoes the committed change (onlypossible if no newer transaction sits on top of it). The transaction becomes'cancelled' and can then be removed with transaction_delete.Args: transaction_id: Id of the transaction to cancel.
Open a new transaction against a document and get its id.Transactions work like Terraform: open one here, route every edit(create_object, edit_object, delete_object, insert_part_from_library,execute_code, and any other model change) through its id while it is open,review the pending changes with transaction_plan, then transaction_apply topersist and save them or transaction_cancel to roll everything back. Creationwrites a pre-change file checkpoint before opening the native transaction andfails safely if that checkpoint cannot be created. Only one transaction can beopen per document at a time.Args: doc_name: Document to open the transaction on. label: Optional human label for the transaction. reason: Optional explanation of what this transaction is for.
Permanently remove a transaction record.Only cancelled transactions can be deleted; cancel an open or appliedtransaction first. This purges the bookkeeping record only - the document isnot modified.Args: transaction_id: Id of the cancelled transaction to delete.
Preview the pending changes of a transaction without persisting them.Returns a Terraform-style plan of what would change on apply: objects to add,change, and destroy, plus the recorded operation log. Safe to call repeatedly.Args: transaction_id: Id of the transaction returned by transaction_create.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Parashell Documentation","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/parashell/8OGWQZCWQItHK4X4/logo/light.svg?fit=max\u0026auto=format\u0026n=8OGWQZCWQItHK4X4\u0026q=85\u0026s=d64e2a7d493cc48ac8900ef8381523c9","dark":"https://mintcdn.com/parashell/8OGWQZCWQItHK4X4/logo/dark.svg?fit=max\u0026auto=format\u0026n=8OGWQZCWQItHK4X4\u0026q=85\u0026s=ae1cf22217d6ac3de739b06f58b548ec"},"favicon":"https://mintcdn.com/parashell/IYmwLyZ-sZl7LYKn/favicon.svg?fit=max\u0026auto=format\u0026n=IYmwLyZ-sZl7LYKn\u0026q=85\u0026s=ff303c016b5f9c127d9e68c4042f1f31","navbar":{"links":[{"href":"mailto:contact@parashell.cloud","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dash.parashell.cloud"}},"footer":{"socials":{"github":"https://github.com/TryParashell","linkedin":"https://linkedin.com/company/parashell"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"https://parashell.cloud/docs"},{"anchor":"Blog","icon":"newspaper","href":"https://parashell.cloud/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"parashell","hasAudioNarration":false,"actualSubdomain":"parashell","customDomains":["docs.parashell.cloud"],"gitSource":{"type":"github","owner":"tryparashell","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"bd62a92e-65ac-46f7-aceb-96093a2fb44c","liveDeploymentHistoryId":"6a6df0f6d6ea14047fa8c9fb","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a6df0f6d6ea14047fa8c9fb"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{},"buildId":"6a6df0f6d6ea14047fa8c9fb:success","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Agent Reference","count":18},{"language":"default","tag":"MCP Tools","count":18},{"language":"default","tag":"Tool reference","count":9}],"searchSettings":{"maxResults":20}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"agent/tools/transactions-files","slug":"/agent/tools/transactions-files","pageMetadata":{"title":"Transactions and file tools","description":"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.","href":"/agent/tools/transactions-files"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.`}),`\n`,_jsxs(_components.p,{children:[`Tool count: `,_jsx(_components.code,{children:`12`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Client note: `,_jsx(_components.code,{children:`ctx`}),` is injected by the MCP server and is not supplied as a user argument.`]}),`\n`,_jsx(Heading,{level:`2`,id:`autosave`,children:_jsx(_components.code,{children:`autosave`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`autosave(doc_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, fallback_dir: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Save Parashell documents to disk.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Saves the active document, a named document, or all open documents. Documents`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`that already have a file path are saved in place. Documents without a stored`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`path are written as \u003cName>.FCStd into fallback_dir, or into your home`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`directory (e.g. C:\\\\Users\\\\\u003cyou> on Windows) when fallback_dir is omitted.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Runs automatically before every execute_code call.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` doc_name: Name of a specific document to save. If omitted, all open`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` documents are saved.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` fallback_dir: Directory used to save documents that have no FileName`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` yet. If omitted, the user's home directory is used.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`execute_code`,children:_jsx(_components.code,{children:`execute_code`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`execute_code(code: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, reason: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, expected_action: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ImageContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Execute arbitrary Python code in Parashell.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Parashell exposes a FreeCAD-compatible Python API. Import the API`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`under its original module names inside the snippet - use 'import FreeCAD' and`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'import FreeCADGui' with the FreeCAD-compatible API. Object TypeIds (e.g.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'Part::Box', 'PartDesign::Body') are FreeCAD-compatible.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Every model edit must run inside an open transaction. Open one with`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`transaction_create, pass its id here, then transaction_apply to persist the`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`changes or transaction_cancel to roll them back.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` code: The Python code to execute inside Parashell's interpreter.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` reason: A non-technical, straight-to-the-point explanation of why you`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` are running this code. Must be between 10 and 25 words.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` expected_action: A non-technical, straight-to-the-point description of`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` the expected output and logic. Must be between 5 and 15 words.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the open transaction returned by transaction_create.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Failure behavior: if the snippet raises, only the objects created by that failed\ncall are removed and the document is recomputed. Edits from earlier successful\ncalls in the same open transaction are preserved, and the transaction stays open\nso you can continue or cancel it explicitly with transaction_cancel. The response\nlists what was reverted; nothing is saved on failure, so a failed run never leaves\nnew partial objects behind for the next autosave to persist. Execution waits for\nthe queued GUI task to finish; it does not report a timeout while the same code\ncontinues mutating the document in the background.`}),`\n`,_jsx(Heading,{level:`2`,id:`is_file_saved`,children:_jsx(_components.code,{children:`is_file_saved`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`is_file_saved(doc_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Report whether a document is saved to a file on disk.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` doc_name: Document to check. If omitted, the active document is used.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`request_file_save`,children:_jsx(_components.code,{children:`request_file_save`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`request_file_save(doc_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, suggested_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Ask the user where to save a model via a save-location prompt.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Opens a dialog letting the user pick a folder and a file name (the .FCStd`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`extension is fixed), then saves the document there. Use this when a model has`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`no save location yet so applied changes persist where the user wants. Returns`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`where the model was saved, or that the user cancelled.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` doc_name: Document to save. If omitted, the active document is used.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` suggested_name: Optional default file name to pre-fill (without extension).`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`rollback_to_transaction`,children:_jsx(_components.code,{children:`rollback_to_transaction`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`rollback_to_transaction(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ImageContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Hard-reset a document to the exact state before an applied transaction.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Like reverting a commit and every commit above it: restores the pre-change`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`checkpoint captured before the given transaction opened, discarding the target`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`transaction's edits and every later change. Transactions newer than the target`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`are marked cancelled. Restoration verifies document identity and the checkpoint`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`object set before autosave. This destroys applied work - confirm with the user`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`before using it when changes would be lost.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the applied transaction whose changes should be removed.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_apply`,children:_jsx(_components.code,{children:`transaction_apply`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_apply(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ImageContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Apply an open transaction: commit its changes, recompute, and save.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Finalizes every edit made under the transaction as a single atomic change,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`recomputes the document, and autosaves it (to its existing path, or to your`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`home directory as \u003cName>.FCStd if it has none). The transaction becomes`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'applied'.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the open transaction to apply.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_cancel`,children:_jsx(_components.code,{children:`transaction_cancel`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_cancel(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ImageContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Cancel a transaction and roll back its changes.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`For an open transaction this aborts and undoes every change made under it.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`For an already-applied transaction it undoes the committed change (only`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`possible if no newer transaction sits on top of it). The transaction becomes`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'cancelled' and can then be removed with transaction_delete.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the transaction to cancel.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_create`,children:_jsx(_components.code,{children:`transaction_create`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_create(doc_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, label: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, reason: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Open a new transaction against a document and get its id.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Transactions work like Terraform: open one here, route every edit`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`(create_object, edit_object, delete_object, insert_part_from_library,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`execute_code, and any other model change) through its id while it is open,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`review the pending changes with transaction_plan, then transaction_apply to`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`persist and save them or transaction_cancel to roll everything back. Creation`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`writes a pre-change file checkpoint before opening the native transaction and`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`fails safely if that checkpoint cannot be created. Only one transaction can be`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`open per document at a time.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` doc_name: Document to open the transaction on.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` label: Optional human label for the transaction.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` reason: Optional explanation of what this transaction is for.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_delete`,children:_jsx(_components.code,{children:`transaction_delete`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_delete(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Permanently remove a transaction record.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Only cancelled transactions can be deleted; cancel an open or applied`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`transaction first. This purges the bookkeeping record only - the document is`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`not modified.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the cancelled transaction to delete.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_get`,children:_jsx(_components.code,{children:`transaction_get`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_get(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Get the full record of a single transaction, including its operation log.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the transaction to inspect.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_list`,children:_jsx(_components.code,{children:`transaction_list`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_list(doc_name: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`List tracked transactions and their status.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` doc_name: Optional document to filter by. If omitted, lists all`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transactions across every document.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`transaction_plan`,children:_jsx(_components.code,{children:`transaction_plan`})}),`\n`,_jsx(_components.p,{children:`Signature:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`transaction_plan(transaction_id: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` list[TextContent]`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Descriptor:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Preview the pending changes of a transaction without persisting them.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Returns a Terraform-style plan of what would change on apply: objects to add,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`change, and destroy, plus the recorded operation log. Safe to call repeatedly.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Args:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` transaction_id: Id of the transaction returned by transaction_create.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Transactions and file tools","description":"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.","href":"/agent/tools/transactions-files"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"autosave","slug":"autosave","depth":2,"children":[]},{"title":"execute_code","slug":"execute_code","depth":2,"children":[]},{"title":"is_file_saved","slug":"is_file_saved","depth":2,"children":[]},{"title":"request_file_save","slug":"request_file_save","depth":2,"children":[]},{"title":"rollback_to_transaction","slug":"rollback_to_transaction","depth":2,"children":[]},{"title":"transaction_apply","slug":"transaction_apply","depth":2,"children":[]},{"title":"transaction_cancel","slug":"transaction_cancel","depth":2,"children":[]},{"title":"transaction_create","slug":"transaction_create","depth":2,"children":[]},{"title":"transaction_delete","slug":"transaction_delete","depth":2,"children":[]},{"title":"transaction_get","slug":"transaction_get","depth":2,"children":[]},{"title":"transaction_list","slug":"transaction_list","depth":2,"children":[]},{"title":"transaction_plan","slug":"transaction_plan","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"parashell","siteName":"Parashell Documentation","title":"Transactions and file tools - Parashell Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-23T22:14:26.969Z","originalFileLocation":"agent/tools/transactions-files.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Parashell Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Transactions and file tools - Parashell Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Parashell Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.parashell.cloud/agent/tools/transactions-files\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://parashell.mintlify.app/_mintlify/api/og/v2?division=MCP+Tools\u0026amp;title=Transactions+and+file+tools\u0026amp;description=Transactions%2C+rollback%2C+save-state+inspection%2C+save-location+prompting%2C+autosave%2C+and+guarded+Python+execution.\u0026amp;theme=912f762d37832ee0eda1fa60\u0026amp;signature=a19effdb7894fe93a5117cfc732ad71ddf20f8724254df8d5cc6e9a8d06cfa27\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Transactions and file tools - Parashell Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://parashell.mintlify.app/_mintlify/api/og/v2?division=MCP+Tools\u0026amp;title=Transactions+and+file+tools\u0026amp;description=Transactions%2C+rollback%2C+save-state+inspection%2C+save-location+prompting%2C+autosave%2C+and+guarded+Python+execution.\u0026amp;theme=912f762d37832ee0eda1fa60\u0026amp;signature=a19effdb7894fe93a5117cfc732ad71ddf20f8724254df8d5cc6e9a8d06cfa27\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/parashell/jW2Bo4d5Li1mOshW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Parashell Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.parashell.cloud/agent/tools/transactions-files\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/agent/tools/transactions-files.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.parashell.cloud/#organization\",\"name\":\"Parashell Documentation\",\"url\":\"https://docs.parashell.cloud\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/parashell/8OGWQZCWQItHK4X4/logo/light.svg?fit=max\u0026auto=format\u0026n=8OGWQZCWQItHK4X4\u0026q=85\u0026s=d64e2a7d493cc48ac8900ef8381523c9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.parashell.cloud#website\",\"name\":\"Parashell Documentation\",\"url\":\"https://docs.parashell.cloud\",\"publisher\":{\"@id\":\"https://docs.parashell.cloud/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.parashell.cloud/agent/tools/transactions-files#webpage\",\"url\":\"https://docs.parashell.cloud/agent/tools/transactions-files\",\"name\":\"Transactions and file tools\",\"description\":\"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\",\"dateModified\":\"2026-07-23T22:14:26.969Z\",\"isPartOf\":{\"@id\":\"https://docs.parashell.cloud#website\"},\"breadcrumb\":{\"@id\":\"https://docs.parashell.cloud/agent/tools/transactions-files#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.parashell.cloud/agent/tools/transactions-files#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"MCP Tools\",\"item\":\"https://docs.parashell.cloud/agent/tools/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transactions and file tools\",\"item\":\"https://docs.parashell.cloud/agent/tools/transactions-files\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.parashell.cloud/agent/tools/transactions-files#article\",\"headline\":\"Transactions and file tools\",\"name\":\"Transactions and file tools\",\"description\":\"Transactions, rollback, save-state inspection, save-location prompting, autosave, and guarded Python execution.\",\"url\":\"https://docs.parashell.cloud/agent/tools/transactions-files\",\"mainEntityOfPage\":{\"@id\":\"https://docs.parashell.cloud/agent/tools/transactions-files#webpage\"},\"dateModified\":\"2026-07-23T22:14:26.969Z\",\"publisher\":{\"@id\":\"https://docs.parashell.cloud/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.parashell.cloud#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Parashell Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Parashell Documentation","nav":{"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"https://parashell.cloud/docs"},{"anchor":"Blog","icon":"newspaper","href":"https://parashell.cloud/blog"}]},"pages":[{"group":"Agent Reference","pages":[{"title":"Parashell agent reference","href":"/index"},{"title":"Agent quickstart","href":"/quickstart"},{"title":"Operating model","href":"/agent/operating-model"},{"title":"Schemas","href":"/agent/schemas"},{"title":"API coverage","href":"/agent/api-coverage"},{"title":"FreeCAD-compatible online API map","href":"/agent/freecad-compatible-online-api-map"},{"title":"Best practices","href":"/agent/best-practices"},{"title":"Python quirks","href":"/agent/python-quirks"},{"title":"Compatible modules","href":"/agent/compatible-modules"},{"title":"Runtime introspection","href":"/agent/runtime-introspection"},{"title":"TypeIds and properties","href":"/agent/typeids-properties"},{"title":"Python API","href":"/agent/python-api"},{"title":"Python syntax","href":"/agent/python-syntax"},{"title":"Workflows","href":"/agent/workflows"},{"title":"Python reference: core stubs","href":"/agent/python-reference-core"},{"title":"Python reference: modeling stubs","href":"/agent/python-reference-modeling"},{"title":"Python reference: workbench stubs","href":"/agent/python-reference-workbenches"},{"title":"Python reference: miscellaneous stubs","href":"/agent/python-reference-misc"}]},{"group":"MCP Tools","pages":[{"title":"MCP tool index","href":"/agent/tools/index"},{"group":"Tool reference","pages":[{"title":"MCP tool reference","href":"/agent/tools/reference/index"},{"title":"execute_code","href":"/agent/tools/reference/execute_code"},{"title":"gather_context","href":"/agent/tools/reference/gather_context"},{"title":"get_ortho","href":"/agent/tools/reference/get_ortho"},{"title":"get_view","href":"/agent/tools/reference/get_view"},{"title":"get_world_state","href":"/agent/tools/reference/get_world_state"},{"title":"grep","href":"/agent/tools/reference/grep"},{"title":"part_design_polar_pattern","href":"/agent/tools/reference/part_design_polar_pattern"},{"title":"rollback_to_transaction","href":"/agent/tools/reference/rollback_to_transaction"}]},{"title":"Document and object tools","href":"/agent/tools/document-objects"},{"title":"Inspection and rendering tools","href":"/agent/tools/inspection-rendering"},{"title":"Sketch and spreadsheet tools","href":"/agent/tools/sketch-spreadsheet"},{"title":"Geometry builder tools","href":"/agent/tools/geometry-builders"},{"title":"Validation and measurement tools","description":"Geometry health, mass properties, solid verification, interference checks, bounding boxes, and distance measurement.","href":"/agent/tools/validation-measurement"},{"title":"Transactions and file tools","href":"/agent/tools/transactions-files"},{"title":"Calcinator tools","description":"Scientific, symbolic, statistical, matrix, vector, and constant-resolution tools for derived CAD values.","href":"/agent/tools/calcinator"},{"title":"Research and web tools","href":"/agent/tools/research-web"}]}]},"title":"Transactions and file tools - Parashell Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}