RyJo

Omnitool is a Chrome extension prototype that enables quick access to custom utilities.


Omnitool has an omnibox-style interface for tool search and invocation, offering speed, simplicity, and flexibility for tasks lacking support from built-in browser tools.

I created Omnitool with inspiration from experience on a small developer team supporting a suite of CMS and service-backed web applications for a Fortune 50 client. Day-to-day operations included repeated tasks such as:

Team members had previously written a handful of small (and very useful) one-off browser extensions. The concept for Omnitool came about as a means to consolidate these tools and provide an efficient, intuitive interface.

Some noteworthy features listed by objective:

  1. SIMPLE
    • A unified omnibox-style tool search interface.
    • A consistent command-based model for tool invocation.
    • A pattern for wrapping pre-existing pages as tools with an 'iframe'.
help screenshot autocomplete screenshot

  1. FAST
    • Quick-opening when configured with a keyboard shortcut (rec. CMD + K).
    • Autocomplete for tool search.
    • A tool invocation history with shortcuts for tool selection and re-invocation.

execution history screenshot lorem command screenshot

  1. FLEXIBLE
    • Tool definitions that support a wide range of custom tools.
    • Optional tool implementations patterns for tool panes, tool execution output, and hybrid text/GUI tool interfaces.
    • Tool 'pinning' to allow for multiple tool selection.

links tool screenshot color tool screenshot pinned tool screenshot

The Omnitool 'demo-tools' branch includes tool samples that showcase these features (as shown in screenshots above.)

The tool development pattern is accessible to most web developers. A tool definition consists of a small package of files.

tool definition files screenshot

The tool logic and metadata is defined in a JS/TS module.

sample tool logic screenshot

The optional tool UI is defined in a linked Vue component.

tool Vue component screenshot

See the source on Github.

That's about it! In the future I may provide additional implementation details in a separate post.

Some quirks that I would like to address prior to release:

Thank you for reading! I'm looking forward to testing and feedback to see if this prototype is worth further development.

Cheers!