Skip to content

Releases: ToolsEnabled/toolsenabled-slides

ToolsEnabled Slides 0.1.9 (prerelease)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 14 Oct 20:06

ToolsEnabled Slides 0.1.9 (prerelease)

Published 2026-10-14. Source commit 3df997d7d85e8ed72e457c9533b18bdd21fdf920. It adds two commits to 0.1.8 (tag v0.1.8, commit 16a404febadfe8dcdc29b822e92a73ab6c9c3416): the fixes from the 2026-10-14 fresh-user verification of 0.1.8 and from the plugin directory's review, and the version change. The tools, studio, panes and mod work as before; each tool now also has a top-level title, refusals log one line, and the ppt CLI checks its host.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.8 (see CHANGELOG.md):

  • A refused import or export (an existing destination, a path outside the workspace, a lock, a pause, or a deck the import helper refuses, such as one with external links) logs one line, for example Export refused: Output already exists; choose a new destination, instead of a stack trace in the host's MCP log. An import the helper refuses for an unknown reason also keeps the helper's diagnostics and logs Import refused: invalid or unsupported PPTX content once. Other failures keep their full diagnostics.
  • tools/list gives each tool a top-level title, the same text as its annotations.title, which clients of MCP 2025-06-18 show first.
  • The ppt CLI refuses a SUITE_HOST other than 127.0.0.1, localhost or ::1, as the server does, and when no server answers it names node src/cli/studio.js (npm run studio) instead of npm start and a suite/server.js that does not exist.
  • The MCP test client gives the Slides child it starts only the operating-system basics and the suite's SUITE_* and SLIDES_* settings, as README already said.
  • The plugin directory read some files as pairing a remote address with a credential; none sends anything off the machine. The studio's loopback origin is now built by one helper, src/lib/origins.js, and the files the directory listed spell no address other than loopback; in four tests the startup-link pattern, the hostile Host and Origin values and the deck with an external link moved into helper and fixture files. The release tools' network reads moved into tools/release_fetch.py and tools/local_health.py. The checks are unchanged.
  • README's "What this plugin runs, sends and reads" answers each directory hold that stays in one sentence; docs/CLAUDE-INSTALL.md says to use a fresh extract for the local marketplace route.
  • tools/source-files.json lists the ten new files, so the source ZIP has 238 members (0.1.8: 228).

Files in this release

File SHA-256
toolsenabled-slides-0.1.9.zip (688,231 bytes, the source distribution) 9aa4aead4bb6ffaec4fa159c45a102190b4502dfa98444eff114d282bded94e4
toolsenabled-slides-0.1.9.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.9.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.9 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.9. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides, then install from the toolsenabled-slides marketplace in the /plugins browser (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 116; FAILED 0; DISPLAY=unset, exit 0 (115 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 164 node:test tests, 130 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. Before the change, on the same machine, 0.1.8 gave FILES 112; FAILED 0; DISPLAY=unset with 154 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks; the difference is the new test files and tests. The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 116; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks, 37 discovered tools, 3 PPTX slides and real PPTX, PDF and PNG exports. This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.300). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add of the extracted ZIP followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.9 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected. The ZIP was built twice, each in a fresh clone of the release commit, with byte-identical results. Codex was not run for this release; its manifest changes only in its version. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.8 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 14 Oct 01:44

ToolsEnabled Slides 0.1.8 (beta)

Published 2026-10-13. Source commit 16a404febadfe8dcdc29b822e92a73ab6c9c3416. It adds two commits to 0.1.7 (tag v0.1.7, commit 48178418d15d882ac7aa492c58540b1b98ae04e6): the fixes from the 2026-10-13 fresh-user re-test of 0.1.7, and the version change. The tools, studio, panes and the Claude Code and Codex plugin manifests are unchanged; one startup line of the server changes.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.7 (see CHANGELOG.md):

  • A start of a workspace whose deck model exists but whose presentation.pptx is missing (a client's health check can stop the first start before its first render) now logs presentation.pptx is missing, rendering it for rev N to stderr. creating the initial presentation.pptx is printed only when the deck itself is new. Nothing else about the start changes; test/js/first-boot.test.js pins both lines.
  • README no longer says that agent file tools can read the one-time studio link "even from mode-600 logs". The log's mode depends on the MCP host and your umask: Claude Code 2.1.296 wrote it as mode 644 under umask 022, readable by every local account. Open the link promptly, before assigning agent work, and never ask the agent to retrieve it. test/js/readme-studio-link.test.js pins the wording.
  • test/js/dashboard-browser-session.test.js failed on a busy machine and passed alone: each of its waits (a real Chromium start, page loads, server state) allowed 10 s. The waits now go through test/helpers/until.js, 30 s each by default; SLIDES_TEST_WAIT_MS sets another deadline, and a wait that never holds names what it waited for. The checks are unchanged. test/js/until-helper.test.js covers the helper, and docs/TESTING.md describes the setting.
  • tools/source-files.json lists the three new test files, so the source ZIP has 228 members (0.1.7: 225).

Files in this release

File SHA-256
toolsenabled-slides-0.1.8.zip (677,411 bytes, the source distribution) 816c1b1f1e6b6719f3904103529beebcd3dc0389e488d57669dba22379421e95
toolsenabled-slides-0.1.8.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.8.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.8 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.8. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides, then install from the toolsenabled-slides marketplace in the /plugins browser (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 112; FAILED 0; DISPLAY=unset, exit 0 (111 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 154 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. Before the change, on the same machine, 0.1.7 gave FILES 110; FAILED 0; DISPLAY=unset with 149 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks; the difference is the two new test files (five node:test tests). The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 112; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks, 37 discovered tools, 3 PPTX slides and real PPTX, PDF and PNG exports. This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add of the extracted ZIP followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.8 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected. The ZIP was built twice, each in a fresh clone of the release commit, with byte-identical results. Codex was not run for this release; its manifest is unchanged from 0.1.7. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.7 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 23:27

ToolsEnabled Slides 0.1.7 (beta)

Published 2026-10-13. Source commit 48178418d15d882ac7aa492c58540b1b98ae04e6. It adds two commits to 0.1.6 (tag v0.1.6, commit 628f9ffb7a8ae9004f6cb1dd9d82070386f65175): Codex plugin manifest and documentation fixes for installs from this repository's own marketplace, and the version change. The server, tools, studio, panes and the Claude Code plugin are unchanged.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.6 (see CHANGELOG.md):

  • The Codex manifest, .codex-plugin/plugin.json, declares "hooks": {}. Without a hooks field Codex reads hooks/hooks.json, which here is the Claude Code /slides mod and not a Codex hook file. An explicit hooks value replaces that default discovery, and an empty one adds no hooks.
  • The Codex manifest declares "skills": "./skills/", which OpenAI's documentation requires for Codex-format packages with skills. Codex already fell back to skills/.
  • The Codex listing gains interface.supportURL https://toolsenabled.ai/support/ (the website and privacy links were already set), and its shortDescription is "Local PowerPoint deck editing", within the 30-character limit.
  • README, docs/CLAUDE-INSTALL.md and the skill use only Codex commands that OpenAI documents: add the marketplace with codex plugin marketplace add ToolsEnabled/toolsenabled-slides, then install ToolsEnabled Slides from the toolsenabled-slides marketplace in Codex's /plugins browser. For the CLI views, the installed plugin folder is named as a version folder under ~/.codex/plugins/cache/toolsenabled-slides/toolsenabled-slides/. They used to name codex plugin add and codex plugin list --json.
  • The package test that checks the Codex manifest now also checks the empty hooks object, the skills path, the description length and the listing links.

Files in this release

File SHA-256
toolsenabled-slides-0.1.7.zip (673,891 bytes, the source distribution) d2b91230d83bdd9925dc86a488288b7f14e0f12168b381aab41e78b38897a7b9
toolsenabled-slides-0.1.7.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.7.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.7 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.7. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides, then install from the toolsenabled-slides marketplace in the /plugins browser (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 110; FAILED 0; DISPLAY=unset, exit 0 (109 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 149 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. These are the same counts as 0.1.6 on the same machine before the change. The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 110; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks, 37 discovered tools, 3 PPTX slides and real PPTX, PDF and PNG exports. This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add of the extracted ZIP followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.7 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected. The ZIP was built twice, each in a fresh clone of the release commit, with byte-identical results. Codex was not run for this release: the Codex manifest follows OpenAI's published plugin documentation and was checked against the public openai/codex source, whose hooks loader reads hooks/hooks.json only when the manifest has no hooks value. Codex installation from the repository marketplace and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.7. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.6 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 20:29

ToolsEnabled Slides 0.1.6 (beta)

Published 2026-10-13. Source commit 628f9ffb7a8ae9004f6cb1dd9d82070386f65175. It adds two commits to 0.1.5 (tag v0.1.5, commit 402bf1c736c5c59dec729b5470f9187af0aafb14): documentation and test-layout fixes from a review against the Claude plugin directory policy, and the version change. The server, tools, studio and panes are unchanged.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.5 (see CHANGELOG.md):

  • README has a "Try it" section with the shortest path from nothing to a working result: prepare the external runtime from the 0.1.0 wheel bundle, make the folders, install the plugin with its four settings, then three prompts, each with the result it shows: Show me the deck. (one title slide at revision 0), adding a slide titled "Quarterly results" with three bullets (Claude locks s1 first because adding a slide changes the whole deck; two slides at revision 2), and exporting quarterly-results.pptx, a two-slide PowerPoint file in the workspace. No account or API key is needed.
  • SECURITY.md says Slides is provided "as is", without warranty of any kind, as this repository's LICENSE (MIT) says. It used to cite https://toolsenabled.ai/terms/, which covers only Fleet and the website.
  • The skill used to give the model the path of the Claude Code log that holds the one-time dashboard link. It now says that the human finds the link in the host's MCP log, as the README explains. The rest of the skill is unchanged.
  • test/js/managed-presentation.test.js no longer runs a program itself. The python-pptx helper that writes a user deck moved unchanged to test/helpers/user-deck.js, so the test file that polls the local server over HTTP runs no child process. The test checks the same behaviour as before: with the 0.1.4 code restored it fails the same way.

Files in this release

File SHA-256
toolsenabled-slides-0.1.6.zip (673146 bytes, the source distribution) 7c727ddba957a4db89b86084a9cfb570c380f84432a21834f3aa8f7f67f9c995
toolsenabled-slides-0.1.6.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.6.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.6 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.6. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides then codex plugin add toolsenabled-slides@toolsenabled-slides (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 110; FAILED 0; DISPLAY=unset, exit 0 (109 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 149 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. These are the same counts as 0.1.5 on the same machine before the change. The /slides mod's hook tests (claude plugin test): 33/33. With the 0.1.4 code that overwrote a user's presentation.pptx restored in a scratch copy, test/js/managed-presentation.test.js still fails as it did on 0.1.4.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 110; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks (initialize, golden tools/list, locks required, 3-slide MCP editing, attach and detach, real exports, import, EOF shutdown, lease released), 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

The README "Try it" path, run headless from the extracted ZIP with the server started as .mcp.json starts it: ppt_show returns "Untitled Presentation" at revision 0 with one title slide; ppt_add_slide is refused until s1 is locked, then adds "Quarterly results", and ppt_set_bullets sets the three bullets (two slides at revision 2); ppt_export writes quarterly-results.pptx, which python-pptx reads back as the two slides.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add of the extracted ZIP followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.6 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected. The ZIP was built twice, each in a fresh clone of the release commit, with byte-identical results. The Codex marketplace file follows the published repo-marketplace format; Codex installation from it and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.6. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.5 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 18:17

ToolsEnabled Slides 0.1.5 (beta)

Published 2026-10-13. Source commit 402bf1c736c5c59dec729b5470f9187af0aafb14. It adds eight commits to 0.1.4 (tag v0.1.4, commit e36f4ae918192c5e8f6073b5d27c5757dd030b24): fixes for three defects that a code review of 0.1.4 confirmed, with their tests and docs, and the version change.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.4 (see CHANGELOG.md):

  • ppt_import respects protections on single objects. In 0.1.4 it checked only slide protections, so an agent holding every slide lock could replace a deck in which a human had protected an object. The object was lost, the studio could not remove its protection ("no such element"), and the next start refused the workspace with "Cannot start with invalid state.json: protections[0] names missing element …" until state.json was edited by hand. Import is now refused while any slide or object of the deck is protected, and the refusal names it, for example "Protected content must be unlocked by the human before replacing the deck (element e1 on slide s1 is protected)".
  • A workspace that an earlier release left in that state starts again. At startup, a protection that names an object the deck no longer has is removed, the previous state.json is kept as .slides-state/state-before-protection-repair-<time>-<id>.json, and the log says, for example, "Removed 1 protection for objects no longer in the deck (element e1 on slide s1); the previous state.json is kept as …". Any other mismatch between state.json and the deck still stops the start.
  • An MCP edit or import refused because content is protected now answers "PROTECTED." with the reason. It used to answer "PAUSED. The human has paused all editing …", which told the agent to wait for a Resume that would never come. A real pause still answers "PAUSED.".
  • presentation.pptx in the workspace is the deck as Slides renders it. A presentation.pptx that Slides did not write (your own deck with that name, or changes saved over the render in PowerPoint) is now copied to presentation.user-<time>.pptx before a render replaces it, and the log names the copy. In 0.1.4 it was overwritten without a copy, on the first start or at the next render. If the copy cannot be made, the render is not published. Renders that Slides wrote itself are replaced as before. README now says to give imported decks another name.
  • ppt_lint right after an edit reports font lint as pending ("Font lint waits for the render of rev N …; run lint again after it") until presentation.pptx has been rendered for that revision, and caches nothing meanwhile. It used to check the fonts of the previous render and report them against the new slide order and revision, so after a slide move it named the wrong slide. The studio now refreshes its lint panel when a render is published.

Files in this release

File SHA-256
toolsenabled-slides-0.1.5.zip (671835 bytes, the source distribution) c3d73a0e25a4ff35c029d0d20d9103cf024f9fde39899c4f6c1044baf054a51c
toolsenabled-slides-0.1.5.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.5.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.5 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.5. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides then codex plugin add toolsenabled-slides@toolsenabled-slides (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 110; FAILED 0; DISPLAY=unset, exit 0 (109 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 149 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. On 0.1.4 the same suite ran FILES 107; FAILED 0 with 144 node:test tests. The five new tests are in three new files: test/js/import-protections.test.js (import refused for a protected object, a workspace with a protection on a missing object starts, protected-content refusals say PROTECTED), test/js/managed-presentation.test.js and test/js/lint-render-pending.test.js. Each failed on the 0.1.4 code for the reason described above. The protections suite's case for a protection on a missing object now expects the set-aside instead of a failed start, and the shared-lint unit test also covers the pending path. The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 110; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks (initialize, golden tools/list, locks required, 3-slide MCP editing, attach and detach, real exports, import, EOF shutdown, lease released), 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add from the clone followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.5 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected. The Codex marketplace file follows the published repo-marketplace format; Codex installation from it and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.5. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.4 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 13:16

ToolsEnabled Slides 0.1.4 (beta)

Published 2026-10-13. Source commit e36f4ae918192c5e8f6073b5d27c5757dd030b24. It adds four commits to 0.1.3 (tag v0.1.3, commit 49ce1ce7d507586a62fc18dee0ee04ff999c67a6): three small fixes found by a fresh-user check of 0.1.3, and the version change.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.3 (see CHANGELOG.md):

  • A lock refusal names the slides to lock. ppt_add_slide with a slide still unlocked now returns, for example, "Lock the affected slides with ppt_lock before editing: s2 (add-slide changes the whole deck, so it needs every current slide locked)" instead of the bare instruction. The HTTP response also lists them as lockSlides. Which edits need which locks is unchanged.
  • A start that finds no presentation.pptx yet logs "creating the initial presentation.pptx" instead of "presentation needs a boot render: ENOENT …". This happened when claude mcp list stopped the first start before its first render. A deck that is out of date for another reason logs "presentation.pptx is out of date, rendering it again: ".
  • node src/cli/doctor.js prints install commands only for what is missing. With everything present it prints none.
  • node tools/mcp-config.mjs names Node.js by the PATH entry that runs it (for example /usr/local/bin/node), not the file a version manager links it to.
  • Install docs: after the documented claude plugin install, Claude Code prints "2 userConfig options not yet set". This is expected. The two are the optional renderer and LibreOffice settings, which keep their defaults (Claude Code counts every option without a saved value). The docs now name Claude Code 2.1.296, the version this release was tested with.

Files in this release

File SHA-256
toolsenabled-slides-0.1.4.zip (662614 bytes, the source distribution) 05a0fcd8e84376ed5212cdf99f87242a9401a49654983bf8b421b1471a68a729
toolsenabled-slides-0.1.4.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.4.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.4 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.4. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides then codex plugin add toolsenabled-slides@toolsenabled-slides (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 107; FAILED 0; DISPLAY=unset, exit 0 (106 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 144 node:test tests, 127 Python tests (6 Windows-only skips) and 692 scripted checks, all passing. On 0.1.3 the same suite ran 140 node:test tests. The four new ones check the named slides in a lock refusal, the start after an interrupted first start, doctor's install output and the registration helper's Node.js path; each failed on the 0.1.3 code before its fix. The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 107; FAILED 0; DISPLAY=unset, exit 0, with the same counts.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks (initialize, golden tools/list, locks required, 3-slide MCP editing, attach and detach, real exports, import, EOF shutdown, lease released), 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json, its marketplace.json and the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add from the clone followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.4 and printed the expected "2 userConfig options not yet set". claude mcp list showed its server connected, and a second claude mcp list logged "creating the initial presentation.pptx". The Codex marketplace file follows the published repo-marketplace format; Codex installation from it and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.4. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.3 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 11:48

ToolsEnabled Slides 0.1.3 (beta)

Published 2026-10-13. Source commit 49ce1ce7d507586a62fc18dee0ee04ff999c67a6, three commits on top of the public main 7850ed3a4b30e56bbb7212c9bb804c5123cebc47 (the 0.1.2 release plus the plugin-directory preparation).

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.2 (see CHANGELOG.md):

  • Every one of the 37 MCP tools declares a plain title and the readOnlyHint, destructiveHint, idempotentHint and openWorldHint annotations, reviewed against each tool's handler. Eight tools only read; the other 29 are marked destructive, ten of them newly and conservatively (ppt_add_*, ppt_note, ppt_lock, ppt_unlock, ppt_task_done, ppt_export: an edit clears redo and can drop the oldest undo state, a board post can drop old agent messages, an export trims its receipt list; an export still never overwrites a file). No tool reaches beyond this computer. Tool names, inputs and behavior are unchanged; docs/MCP.md lists the rules.
  • Claude Code starts the MCP server as node ${CLAUDE_PLUGIN_ROOT}/slides-mcp.js, with the settings passed as environment variables and the same strict plugin-mode startup as the Codex manifest. The node on the PATH that Claude Code runs with must be Node.js 22 or newer; node_executable is still the Node.js the /slides panes run.
  • The start-up error for a missing workspace no longer says "the Codex plugin".
  • The repository carries the plugin directory's listing icon, and the source ZIP includes it.
  • README: a new section, "What this plugin runs, sends and reads", lists the programs the plugin starts, what it reads and writes, what it sends and where, and the events the /slides mod handles. The install command shows the four required settings.
  • The Claude plugin manifest names the documentation, privacy (https://toolsenabled.ai/privacy/) and support (https://toolsenabled.ai/support/) pages, and the Claude, Codex and Desktop manifests use https://toolsenabled.ai/slides/ as the homepage.
  • Tests that start the server or the CLI next to placeholder hosts pass the child only the operating-system basics and the suite's own settings; new tests start the server exactly as .mcp.json does and pin every tool's annotations.

Files in this release

File SHA-256
toolsenabled-slides-0.1.3.zip (659383 bytes, the source distribution) e97aa22738642d1ffc33a70bf6c5a83187531bfb87780c01cf988d7a8adadc22
toolsenabled-slides-0.1.3.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.3.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.3 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.3. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code, with Node.js 22 or newer on its PATH; without the Python and workspace settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides then codex plugin add toolsenabled-slides@toolsenabled-slides (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 107; FAILED 0; DISPLAY=unset, exit 0 (106 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle: 140 node:test tests, 127 Python tests (6 Windows-only skips) and 654 scripted checks, all passing. Selected in-suite results: tool annotations 2/2, golden tools/list 2/2, Claude package 6/6, security 10/10. The /slides mod's hook tests (claude plugin test): 33/33.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 107; FAILED 0; DISPLAY=unset, exit 0.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks (initialize, golden tools/list with the new annotations, locks required, 3-slide MCP editing, attach and detach, real exports, import, EOF shutdown, lease released), 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree, its plugin.json and its marketplace.json (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add from the clone followed by claude plugin install -s local toolsenabled-slides@toolsenabled-slides with the four settings listed the plugin at 0.1.3, and claude mcp list showed its server connected. The Codex marketplace file follows the published repo-marketplace format; Codex installation from it and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.3. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.2 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 06:46

ToolsEnabled Slides 0.1.2 (beta)

Published 2026-10-13. Source commit 40ce2c3e252d3e06914598b81c559c1a469923e5 (tree 7f321a46044c8820be5a90398c38d72ac3024f17), one commit on top of the public main 05d2f59d0f30eae55d5d0f0691caa7eca1d79edb (the 0.1.1 release plus the security policy).

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.1, from the fresh-user verification of 0.1.1 (see CHANGELOG.md):

  • ppt_import/ppt_export results carry the workspace confinement reason (for example Output already exists; choose a new destination) instead of a generic export failure.
  • Tool-argument schema failures are labelled Invalid arguments: … instead of Tool crashed: ….
  • A refused workspace lease at startup is reported in one line, without a stack trace, by src/server.js and slides-mcp.js.
  • Shutdown during the background thumbnail render logs thumbnail render cancelled at shutdown instead of surfacing LibreOffice's javaldx warning as Renderer failed.
  • The prepared-runtime failure message carries the tools/setup-runtime.py hint once.
  • ppt_show and docs/MCP.md describe the real slide and element id formats: s/e plus 8 hex characters for created objects, s1/e1/e2 for the default deck, sN/eN_M for imported decks. The 37-tool list is otherwise unchanged.
  • The repository is its own plugin marketplace for Claude Code (.claude-plugin/marketplace.json) and Codex (.agents/plugins/marketplace.json); README and docs/CLAUDE-INSTALL.md carry the literal install commands.
  • README adds the download-and-verify step and states that no Claude Desktop bundle is distributed; docs/CLAUDE-INSTALL.md verifies the asset's .sha256 file instead of a "SHA256 manifest" and links the wheel bundle with its hash; docs/TESTING.md names the prepared runtime the plugin-mode tests need; CHANGELOG dates 0.1.1.

Files in this release

File SHA-256
toolsenabled-slides-0.1.2.zip (638382 bytes, the source distribution) ccb1d70c72ab3701fbc1598a718cb1342554843a8a4f766f1293541e3e8d5fc5
toolsenabled-slides-0.1.2.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.2.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md use is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.2 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.2. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and directory publication remain held until production-signed bytes and the required qualification are verified.

Plugin installation: claude plugin marketplace add ToolsEnabled/toolsenabled-slides, then claude plugin install -s local toolsenabled-slides@toolsenabled-slides --config python_executable="/absolute/private/Slides Runtime/bin/python" --config node_executable=/absolute/node --config workspace_directory="/absolute/decks/Project Update" --config port=4599 (Claude Code; without the four settings the plugin installs but starts no server); codex plugin marketplace add ToolsEnabled/toolsenabled-slides then codex plugin add toolsenabled-slides@toolsenabled-slides (Codex). Both need the external runtime prepared as docs/CLAUDE-INSTALL.md describes.

What was tested

Full Linux suite on the release commit: FILES 107; FAILED 0; DISPLAY=unset, exit 0 (106 direct test files plus fixture generation), with SUITE_PYTHON pointing at a runtime prepared by tools/setup-runtime.py from the 0.1.0 wheel bundle. Selected in-suite results: security 10/10, error texts 3/3, renderer 3/3, media tool errors 33/33, golden tools/list 2/2, PDF race 11/11.

The same suite from the extracted ZIP (unzip, then node test/run.js inside slides/ with the same prepared runtime): FILES 107; FAILED 0; DISPLAY=unset, exit 0.

Strict real-LibreOffice lifecycle on the extracted ZIP: exit 0, ok: true, 9 named checks (initialize, golden tools/list, locks required, 3-slide MCP editing, attach and detach, real exports, import, EOF shutdown, lease released), 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Marketplace: claude plugin validate --strict passes on the release tree and on the extracted ZIP (Claude Code 2.1.296). In a scratch CLAUDE_CONFIG_DIR, claude plugin marketplace add followed by claude plugin install toolsenabled-slides@toolsenabled-slides succeeded both from the clone and from the extracted ZIP directory and listed the plugin at 0.1.2. The Codex marketplace file follows the published repo-marketplace format; Codex installation from it and the packaged-ZIP Codex host gate (tools/prove-codex-plugin.py) were not run for 0.1.2. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.1 (beta)

Pre-release

Choose a tag to compare

@ToolsEnabled-Inc ToolsEnabled-Inc released this 13 Oct 04:45

ToolsEnabled Slides 0.1.1 (beta)

Published 2026-10-13. Source commit fe1841d4e96f5c532abe051f043f04f2b9c24605 (tree 6fce4db4782cb4f2ff0ddadb468d3df9d9f92de6), one commit on top of the public 0.1.0 history.

This release provides Linux presentation editing over MCP, a local live studio, read-only Claude panes and Codex CLI views, slide locks, human dashboard controls, and PPTX/PDF/PNG export. Linux is the supported release scope. Native Windows shutdown, macOS, trusted production signing and native Desktop installation remain unqualified.

The MCP host supplies the agent. Slides does not make model calls or require a built-in online account or API key. The source ZIP contains no wheels, copied runtimes, workspace data, signing keys or packaging evidence. Prepare the Python runtime explicitly; Linux PDF/PNG also require LibreOffice.

Changes since 0.1.0: deck-wide lock scope, task ownership checks, literal selector handling and the Codex transport gate were corrected (see CHANGELOG.md).

Files in this release

File SHA-256
toolsenabled-slides-0.1.1.zip (631267 bytes, the source distribution) 75789145c225dfe2a424c8f58dc62d10a4e3b9da61baf6e1843dc529c2d6640b
toolsenabled-slides-0.1.1.zip.sha256 the line above, sha256sum -c format

Verify before extracting:

sha256sum -c toolsenabled-slides-0.1.1.zip.sha256

The offline Python wheel bundle that README and docs/CLAUDE-INSTALL.md mention is unchanged since 0.1.0 and is not re-attached here. Use the 0.1.0 asset, which works with 0.1.1 (same six pins): toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip, SHA-256 a29454931420b8d9547eeb8d17c389a005cf0343a927d7a275f15eb3cab25fec.

No Claude Desktop bundle (.mcpb) is distributed with 0.1.1. An MCPB manifest is included in the source for future Desktop qualification; registry metadata and marketplace publication remain held until production-signed bytes and the required qualification are verified.

What was tested

Full Linux suite on the frozen source: FILES 106; FAILED 0; DISPLAY=unset, exit 0 (105 direct test files plus fixture generation). Selected in-suite results: PDF 11/11, locks/selectors 10/10, proof redaction 3/3 and P-ENV 6/6.

Strict real-LibreOffice lifecycle on the same snapshot: exit 0, ok: true, 9 named checks, 37 discovered tools, 3 PPTX slides, 3 PDF pages and 3 PNG images (1600 × 901 each). This is one strict lifecycle run with its retained exports and stderr, not coverage of every tool.

Packaged-ZIP Codex qualification on the exact ZIP above: 4/4 modes passed, each gate exit 0. Inline discovered 37 tools; root-only, no-env and no-python each discovered 0 and confirmed the intended negative cause. Every receipt reports modelCalls: 0, ownerProfileUsed: false and leaseReleased: true. Tested with Codex CLI 0.162.1; this does not claim a real TUI/model turn. No native Windows/macOS/Desktop or production certificate trust is inferred.

Support and security contact: support@toolsenabled.ai (security policy: https://toolsenabled.ai/security/).

ToolsEnabled Slides 0.1.0 (beta)

Pre-release

Choose a tag to compare

@JoshuaPinckard JoshuaPinckard released this 02 Oct 07:24

ToolsEnabled Slides 0.1.0 (beta) lets an AI agent build and edit real PowerPoint decks through MCP while you watch in a local browser studio. You keep pause, resume, undo and redo in a private dashboard, and the agent can export PPTX, PDF and PNG. Slides makes no model calls of its own and needs no account, API key or internet connection. MIT licensed. This is the first public release: a prerelease published only here on GitHub Releases, not listed in any plugin marketplace or directory.

What it does

  • 36 MCP tools to read a deck, add and edit slides, text, bullets, speaker notes, shapes, images, video, styles and transitions, import an existing .pptx, check quality with ppt_lint, and export.
  • You stay in control. Edits appear live in the studio. Pause, resume, undo, redo, protecting slides or objects, and downloads work only in your dashboard session, which you open with a one-time link Slides prints at startup. They are not MCP tools.
  • Several agents, one deck. An agent must lock a slide before editing it and can release only its own locks. A shared board carries notes and house rules.
  • Careful import. Macros, OLE and ActiveX objects, external links, embedded Excel workbooks (including ordinary Excel-backed charts), SVG, WMF/EMF and other unsupported images, and imported video are refused. GIF and APNG images keep their animation in PPTX exports; PDF and PNG show the first frame.
  • Exports never overwrite. Each export writes a new file or folder inside the workspace. PPTX needs only Python; PDF and PNG use LibreOffice.
  • Offline, pinned runtime. Slides' Python packages are installed from hash-pinned wheels into a separate folder you choose. Nothing installs itself at startup.

Install (Linux x86_64)

You need Node.js 22 or later, CPython 3.12 and glibc 2.28 or later. For PDF and PNG you also need LibreOffice Impress (sudo apt-get install libreoffice-impress on Ubuntu); PPTX export works without it.

  1. Download toolsenabled-slides-0.1.0.zip, toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip and both .sha256 files, then run sha256sum -c toolsenabled-slides-0.1.0.zip.sha256 toolsenabled-slides-0.1.0-cp312-linux-x86_64-wheels.zip.sha256.

  2. Extract both ZIPs. Prepare the Python runtime in a new folder outside the Slides folder (its parent folder must exist):
    python3.12 /absolute/slides/tools/setup-runtime.py --runtime "/absolute/private/Slides Runtime" --wheels /absolute/downloads/cp312-linux-x86_64 --pip-wheel /absolute/downloads/cp312-linux-x86_64/pip-24.3.1-py3-none-any.whl
    It checks every wheel against the hashes in the source, installs only those wheels and prints the runtime's Python path.

  3. Pick an absolute workspace folder for your deck, outside the Slides folder, and print the registration for your client. The helper only prints; it changes nothing. Set SUITE_PYTHON first, or the helper prints your system Python, which doesn't have Slides' packages.

    export SLIDES_WORKSPACE=/absolute/decks/project-update
    export SUITE_PYTHON="/absolute/private/Slides Runtime/bin/python"
    node /absolute/slides/tools/mcp-config.mjs --client claude
    
    • Claude Code: run the printed claude mcp add command from your presentation project.
    • Codex: use --client codex and run the printed codex mcp add command.
    • DeepSeek Harness: use --client deepseek and add the printed extension block to your harness configuration.

    Use a separate workspace and port (SUITE_PORT) for each deck you have open at the same time.

  4. Open the dashboard link yourself before giving the agent any work, and never ask the agent to fetch it. The simplest way for any client: with the same SLIDES_WORKSPACE and SUITE_PYTHON set, run node /absolute/slides/src/cli/studio.js in a terminal. Open the one-time link it prints, keep that tab, then start your agent, which attaches to that studio. In Claude Code you can instead start claude --debug-file /absolute/private/claude-debug.log and find /studio#launch= in that file.

  5. Then ask, for example: "Use Slides to make a three-slide project update. Read the board and outline, lock the slides, then export update.pptx and update.pdf."

The ZIP also contains Claude Code and Codex plugin manifests and a workflow skill. Their plugin marketplace isn't published yet, so the claude plugin marketplace add ToolsEnabled/toolsenabled-plugins step in docs/CLAUDE-INSTALL.md doesn't work yet. Use the registration above until it does.

Tested on this exact release (source commit ee8fe7a, tag v0.1.0; ZIP SHA-256 cc547ff8d9295b206f22459723eca95f5b8c0aaccdad35bfcaa51ca68ace7ba7)

  • 95 of 95 test runs passed headless, from source and from the extracted ZIP. On the exact ZIP, the MCP lifecycle check passed 9 of 9: 36 tools, 3 slides, locks, PPTX export and re-import, attach and detach, and clean shutdown.
  • The ZIP rebuilds byte for byte from this public source with its own tools/package.py. The Linux wheel bundle rebuilds byte for byte from its pinned wheels with tools/package-wheels.py.
  • LibreOffice 24.2.7.2 on Linux (during the code review): the lifecycle check with PDF and PNG output passed 9 of 9. A 200-slide deck was imported and exported to PPTX, PDF and 200 PNGs. Pages with animated GIF and APNG images rendered their first frame, and the original image bytes came through PPTX export unchanged.
  • Codex plugin loading, no model: Codex 0.158.0 installed the plugin from this exact ZIP into fresh, empty profiles with a scrubbed environment. It listed all 36 tools and used the configured workspace and the prepared Python. With the server entry removed, with no settings forwarded, or with the Python setting not forwarded (even with a working .venv inside the plugin), it started no tools, each for the expected reason.
  • Real Claude Code turn: Claude Code 2.1.287 installed the plugin from a local copy of this release's exact 178 source files, using a fresh plugin cache. The model saw all 36 Slides tools. In one turn it made 20 Slides calls with no errors, locked every slide before editing it, got a clean lint, released its locks and exported update.pptx. An independent check confirmed the 3 slides, their text and the speaker notes.
  • Independent security reviews over several rounds, ending with a focused review of the final changes: nothing at Critical, High or Medium severity. The two Low findings are listed below.

Tested on an earlier 0.1.0 candidate (not these exact bytes)

  • DeepSeek Harness (DeepSeek V4.1 Flash through NVIDIA's OpenAI-compatible endpoint), registered from the helper's output with the Python path added by hand: 17 Slides calls, a lock before every edit, no tool errors, and an export that passed the same independent check. It didn't run lint, because DeepSeek has no workflow skill and the prompt didn't ask for it. A separate lint of its result was clean.
  • A Codex editing turn, registered directly rather than as a plugin: 22 Slides calls, a lock before every edit, a clean lint and a verified export.
  • The first full LibreOffice run, with the same 200-slide and animated-image checks.
  • That candidate's security review found three Medium issues, all fixed in this release. Since then, this release has tightened checks on the files inside imported decks, made both plugins require the prepared Python runtime and refuse overlapping folders, stopped Python from writing cache files into the plugin, and changed one tool's schema so Claude Code sees all 36 tools (it saw 35 before). It also adds the Python path to every printed registration. The tests and client checks above cover these changes, but no DeepSeek or Codex editing turn has been rerun on them.

Known limits

  • Only Linux x86_64 was tested. macOS and Windows are not qualified, and their wheel bundles are not attached. Native Claude Desktop installation is not qualified either: no Desktop bundle (.mcpb) is attached, and no production-signed bundle exists.
  • Claude Code installing straight from this release's download link has not been tested yet. The real Claude Code turn used a local copy with the same plugin files, and the direct claude mcp add registration above was not part of that turn.
  • Terminal studio workspace check (Low). src/cli/studio.js creates its workspace folder before checking it. If SLIDES_WORKSPACE is unset, empty, relative or starts with ~, the studio creates and uses a folder under the current directory (for example, one literally named ~). This happens even in plugin mode, where the MCP server itself would refuse. A workspace inside the plugin's install folder is created before it is refused. Always set an absolute workspace outside the Slides folder.
  • Test record correction (Low). One pre-release Codex plugin-loading check for this release ran in a signed-in Codex profile instead of an empty one, and its record said otherwise. It made no model calls and didn't change the release files. The Codex result above comes from the later check in fresh, empty profiles.
  • PDF and PNG are static. Fonts, effects and complex formatting can differ between LibreOffice and PowerPoint, so check exported pages before sharing. Native object animations and embedded MP4 playback need desktop PowerPoint on Windows, which is not qualified.
  • Imports are limited to 32 MiB and 200 slides. Replace embedded Excel charts with images before importing.
  • Slides is a local, single-user app. A process running as the same user can act as you, and an agent with file or shell tools can read an unused dashboard link from host logs. Don't expose its port through a tunnel or proxy. See SECURITY.md.
  • A checksum shows the content is identical; it isn't a publisher signature.

ToolsEnabled is not affiliated with or endorsed by Anthropic, OpenAI, DeepSeek, Cursor or NVIDIA.