Ocelot File Manager

All pages

Debugging

Settings ▸ Plugins

The pane lists every plugin found in ~/Library/Application Support/OcelotFM/Plugins with its state, its permissions (an explanation appears on hover; tools that run any program are marked) and a tail of its log. "Reveal Folder" opens the Plugins folder; "Reload All" rescans it, restarts every plugin and clears the unresponsive state.

States you will meet:

The log

ocelot.log, console.log and a process plugin's stderr all land in the plugin's log. Lines are cut at 4 096 characters and capped at 100 a second; when lines are dropped, the next one says how many. The log also records every refused call with the permission it lacked, every value a column returned with the wrong type, and every manifest problem.

Builds made from source

A build made with make run watches the Plugins folder and reloads a plugin whose files changed, so editing main.js and saving is enough. Such builds also have Settings ▸ Plugins ▸ "Sandbox Self-Test…", which runs every rule of the plugin sandbox on this Mac and reports what held, and accept the launch flag -OcelotSandboxSelfTest /path/to/report.txt for the same from a terminal.

Common problems

SymptomCause
A command is missing from the menuIts availability is not met: minSelection defaults to 1, so a command for the empty area needs 0; inside an archive, commands need "schemes": ["archive"].
The command is there but greyed outThe same rules; requiresWritableDirectory in a read-only folder.
spawn says the tool was not foundTools come from /usr/bin, /bin, /usr/sbin, /sbin, /usr/local/bin and /opt/homebrew/bin, never from PATH; the name must match the permission exactly.
The tool fails to write a fileOnly $OCELOT_PLUGIN_DATA and $TMPDIR are writable; /tmp and the plugin's own folder are not.
The tool cannot reach the networknetwork.client is missing from the manifest.
perl does not start; sips cannot saveKnown limits of the sandbox; use python3 or a shell, and convert images in a process plugin.
A column stays emptyThe provider returned values for other paths than asked, a value of the wrong type for the declared type, or ran out of its 2 seconds. Check the log.
A column is never askedIt is hidden (defaultVisible: false and not turned on by the user), or the folder is inside an archive.
The badge does not change after git addThe cache key is the file's path and date; name the index in refreshWhenChanged or call invalidateColumn.
notify does nothingIt was called from a column provider or at the top level, or the plugin passed 10 toasts in a minute.