{"ok":true,"site":{"host":"trygoodfolder.com","url":"https://trygoodfolder.com/dashboard?demo=1","type":"live","desc":"GoodFolder gives a folder on your computer a history you can read. See what an agent or a person changed, who did it, and return to any earlier version. Your files stay where they are and keep their…","tools":[{"name":"list_folders","kind":"answer","impl":"imperative","description":"List the person's folders already connected to GoodFolder with protection status and when each was last saved. This dashboard cannot connect or save a local filesystem folder.","title":"List folders","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"get_local_save_guidance","kind":"answer","impl":"imperative","description":"Explain how to protect and save an existing folder on the local computer. Use this when someone asks to save or protect a local folder: the dashboard is not a save surface and this tool makes no changes.","title":"Explain local folder setup","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"get_workspace_context","kind":"answer","impl":"imperative","description":"Read which GoodFolder, document, and Change Proposal the person currently has open.","title":"Read workspace context","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"list_files","kind":"answer","impl":"imperative","description":"List every file in the GoodFolder currently open, including which documents can be read or edited in the dashboard.","title":"List files","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"read_document_outline","kind":"answer","impl":"imperative","description":"Read the headings and structure of the document currently open. This does not change the document.","title":"Read document outline","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"read_selected_text","kind":"answer","impl":"imperative","description":"Read the passage the person has selected in the open document. Returns no text when there is no active selection.","title":"Read selection","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"read_file_context","kind":"answer","impl":"imperative","description":"Read a bounded line range from the open text file or a named text file. This never changes the file.","title":"Read file context","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"document":{"type":"string","description":"Optional file path; defaults to the file currently open."},"startLine":{"type":"number","description":"One-based first line, default 1."},"lineCount":{"type":"number","description":"Number of lines, default 80 and at most 200."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"read_table_range","kind":"answer","impl":"imperative","description":"Read a bounded, structured range from a CSV or TSV file, including cell addresses and values. This never changes the table.","title":"Read table range","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"document":{"type":"string","description":"Optional CSV or TSV path; defaults to the file currently open."},"startRow":{"type":"number","description":"One-based first row, default 1 and at most 200."},"startColumn":{"type":"number","description":"One-based first column, default 1 and at most 40."},"rowCount":{"type":"number","description":"Number of rows, default 25."},"columnCount":{"type":"number","description":"Number of columns, default 12."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"read_image","kind":"answer","impl":"imperative","description":"Read a small image from the open GoodFolder as a data URL, so it can be used in a reviewable visual proposal. This never changes the folder.","title":"Read image","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Image path in the open GoodFolder."}},"required":["path"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"get_page_render_report","kind":"answer","impl":"imperative","description":"Read what happened when the web page currently open was rendered in the dashboard: which files beside it were used, which it asked for and did not find, and any errors its own scripts reported. Use this after proposing a change to a web page. This never changes the folder.","title":"Read what the page did","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"get_document_history","kind":"answer","impl":"imperative","description":"Read saves that mention the document currently open, newest first.","title":"Read document history","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum entries, default 10 and at most 25."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_new_goodfolder","kind":"act","impl":"imperative","description":"Prepare a reviewable request for a brand-new empty GoodFolder. The owner must accept it in the dashboard before any folder is created. Never use this for an existing local folder.","title":"Propose new GoodFolder","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Name for the brand-new empty GoodFolder, at most 80 characters."},"explanation":{"type":"string","description":"Why this new workspace is needed, at most 1,000 characters."}},"required":["name","explanation"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"list_change_proposals","kind":"answer","impl":"imperative","description":"List Change Proposals for the GoodFolder currently open, including their review status and affected documents.","title":"List Change Proposals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Optional status: open, accepted, rejected, or needs-review."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"explain_change_proposal","kind":"act","impl":"imperative","description":"Explain one Change Proposal with the exact before and suggested text for human review.","title":"Explain Change Proposal","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"proposalId":{"type":"string","description":"Change Proposal id."}},"required":["proposalId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_file_change","kind":"act","impl":"imperative","description":"Create a reviewable one-file suggestion. text_replace works on any file readable as text, source files included; table_update takes exact CSV/TSV cells; asset_replace puts a file somebody already sent up in place of this one. This never changes the file; only the folder owner can accept it.","title":"Propose file change","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"document":{"type":"string","description":"Exact file path in the current GoodFolder."},"operation":{"type":"string","enum":["text_replace","table_update","asset_replace"],"description":"The kind of reviewable change."},"section":{"type":"string","description":"Optional named section or context for a text replacement."},"originalText":{"type":"string","description":"Exact current text for text_replace, at most 20,000 characters."},"replacementText":{"type":"string","description":"Suggested text for text_replace, at most 20,000 characters."},"changes":{"type":"array","maxItems":100,"description":"Exact CSV/TSV cell changes for table_update.","items":{"type":"object","properties":{"address":{"type":"string"},"before":{"type":"string"},"replacement":{"type":"string"}},"required":["address","before","replacement"],"additionalProperties":false}},"stagingAssetId":{"type":"string","description":"Short-lived temporary upload id for a later asset_replace operation."},"mimeType":{"type":"string","description":"Uploaded asset MIME type for a later asset_replace operation."},"extension":{"type":"string","description":"Uploaded asset extension for a later asset_replace operation."},"explanation":{"type":"string","description":"Why the change is useful, at most 500 characters."},"title":{"type":"string","description":"Short Change Proposal title."}},"required":["document","operation","explanation","title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_document_change","kind":"act","impl":"imperative","description":"Compatibility alias for propose_file_change with the text_replace operation. This does not change the document; only the folder owner can accept it.","title":"Propose document change","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"document":{"type":"string","description":"Document path in the current GoodFolder."},"section":{"type":"string","description":"Selected passage or named section."},"originalText":{"type":"string","description":"Exact current text, at most 20,000 characters."},"replacementText":{"type":"string","description":"Suggested replacement, at most 20,000 characters."},"explanation":{"type":"string","description":"Short reason for the suggestion, at most 500 characters."},"title":{"type":"string","description":"Short Change Proposal title."}},"required":["document","section","originalText","replacementText","explanation","title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_document_media","kind":"act","impl":"imperative","description":"Create one reviewable Change Proposal that adds generated media and inserts its Markdown or HTML reference into a text document. The bytes wait outside the folder; accepting the whole proposal adds the media and edits the document in one Save. This never changes the folder by itself.","title":"Propose media in document","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"document":{"type":"string","description":"Exact path of the text document in the open GoodFolder."},"assetPath":{"type":"string","description":"New path the image, video, or audio file will have if accepted, including its extension."},"assetDataUrl":{"type":"string","description":"The generated image, video, or audio as a base64 data URL. Inline media is limited to 25 MB."},"anchorText":{"type":"string","description":"Exact existing document text to anchor the insertion, at most 20,000 characters."},"insertionText":{"type":"string","description":"Markdown or HTML that refers to assetPath, at most 20,000 characters."},"placement":{"type":"string","enum":["before","after"],"description":"Put insertionText before or after anchorText."},"section":{"type":"string","description":"Optional section name shown during review."},"explanation":{"type":"string","description":"Why the media belongs here, at most 500 characters."},"title":{"type":"string","description":"Short Change Proposal title."}},"required":["document","assetPath","assetDataUrl","anchorText","insertionText","placement","explanation","title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_generated_file","kind":"act","impl":"imperative","description":"Create a reviewable DOCX, XLSX, PDF, PowerPoint, or bitmap image from structured content. The complete file waits outside the folder for the owner to preview and accept; this never changes the folder by itself.","title":"Propose generated file","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"New or existing path in the open GoodFolder, with a matching .docx, .xlsx, .pdf, .pptx, .png, .jpg, .jpeg, or .webp extension."},"artifactType":{"type":"string","enum":["document","spreadsheet","pdf","presentation","image"],"description":"Type of complete file to prepare."},"content":{"type":"object","description":"Structured file content: blocks for document/PDF, sheets for spreadsheet, slides for presentation, or a PNG/JPEG/WebP dataUrl for image."},"brand":{"type":"object","description":"Optional common brand kit with name, backgroundColor, accentColor, and a PNG/JPEG/WebP logoDataUrl returned by read_image."},"explanation":{"type":"string","description":"Why this complete file was prepared, at most 500 characters."},"title":{"type":"string","description":"Short Change Proposal title."}},"required":["path","artifactType","content","explanation","title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"comment_on_change_proposal","kind":"transact","impl":"imperative","description":"Add a comment to a Change Proposal for the people reviewing it. This adds discussion but does not change any document.","title":"Comment on Change Proposal","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"proposalId":{"type":"string","description":"Change Proposal id."},"comment":{"type":"string","description":"Comment, at most 4,000 characters."}},"required":["proposalId","comment"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"comment_on_document","kind":"act","impl":"imperative","description":"Leave a review comment on a selected passage in the open document. This does not change the document.","title":"Comment on document","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"quotedText":{"type":"string","description":"Exact selected passage, at most 20,000 characters."},"comment":{"type":"string","description":"Comment, at most 4,000 characters."}},"required":["quotedText","comment"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"get_timeline","kind":"answer","impl":"imperative","description":"Read a folder's timeline of saves, newest first. Each entry says who saved it, what changed in plain language, and which files mattered most.","title":"Read timeline","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"folder":{"type":"string","description":"Folder name. Leave off for the first folder."},"limit":{"type":"number","description":"How many entries (default 10, max 25)."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"find_saves","kind":"answer","impl":"imperative","description":"Search one folder's timeline by text in a save's label or by file path. Answers like “when did we touch the invoice?”.","title":"Find saves","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Text to look for in labels or file paths."},"folder":{"type":"string","description":"Folder name. Leave off for the first folder."}},"required":["query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"explain_save","kind":"act","impl":"imperative","description":"Explain one save in plain language: who made it, when, what changed, and which files were involved.","title":"Explain save","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"number":{"type":"number","description":"The save's number from the timeline."},"folder":{"type":"string","description":"Folder name. Leave off for the first folder."}},"required":["number"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"preview_restore","kind":"answer","impl":"imperative","description":"Preview going back to an earlier save: which files would be brought back. For one previewable file, use propose_restore_file to open a reviewable browser proposal; a connected computer can restore the whole folder. This never changes anything by itself.","title":"Preview going back","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"number":{"type":"number","description":"The save number to go back to."},"folder":{"type":"string","description":"Folder name. Leave off for the first folder."}},"required":["number"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]},{"name":"propose_restore_file","kind":"act","impl":"imperative","description":"Prepare a reviewable replacement of one previewable file with its exact bytes from an earlier save. The folder changes only if its owner accepts the proposal.","title":"Propose restoring a file","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Exact file path to bring back from the earlier save."},"number":{"type":"number","description":"Earlier save number to use."},"folder":{"type":"string","description":"Folder name. Leave off for the open folder."}},"required":["path","number"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/dashboard?demo=1","pages":["/dashboard?demo=1"]}],"category":"Productivity & Business","favicon":"/favicons/trygoodfolder.com.png","apiSurface":"spec","toolCount":25}}