{"slug": "i-gave-my-keyboard-shortcut-a-terminal-and-a-browser", "title": "I gave my keyboard shortcut a terminal and a browser", "summary": "OmniKey's @omniAgent feature lets users invoke an AI agent from any text field with Command-T, giving it shell access as the logged-in user, web search via DuckDuckGo, Serper, Brave, Tavily or SearXNG, a dedicated browser debug profile that can read logged-in pages, and any registered Model Context Protocol (MCP) server. The agent supports stdio, HTTP and SSE transports, seeds three stdio servers on a fresh install (filesystem, playwright and git), and connects only to the server it needs per request rather than to all configured servers. The post warns that shell commands run with the user's privileges and that browser access requires an explicit grant via `omnikey grant-browser-access`, with credentials described as the security boundary.", "body_md": "[← All posts](https://omnikeyai.ca/blog)\n\n# I Gave My Keyboard Shortcut a Terminal and a Browser\n\nHow OmniAgent uses terminal access, authenticated browser sessions, and MCP tools to answer questions about your actual workflow.\n\nMost AI desktop tools can rewrite your sentence. Few can go find out whether the sentence is true.\n\nA model that only sees your selected text is a good editor. A model that can run a command, read a logged-in dashboard, and query a database answers questions about your actual situation. OmniKey does both. Command-E and Command-G are the editor. @omniAgent is the other thing.\n\n## How It Works\n\nType an instruction anywhere, starting with @omniAgent. Select it. Press Command-T.\n\n```\n@omniAgent find every TODO in this project and group them by area\n```\n\nThe agent works and pastes the result back in place. While running it can reach:\n\n```\nYour terminal — shell commands, as your user\nThe web — DuckDuckGo, Serper, Brave, Tavily, or SearXNG\nYour browser — pages in a dedicated debug profile, including logged-in ones\nAny MCP server you've registered\n```\n\nThe last one is the lever. Everything else is fixed; MCP is what you extend.\n\n## Why Mcp Matters\n\nModel Context Protocol is a standard for exposing tools to a model. A server declares what it can do; the agent discovers those tools and calls them when relevant.\n\nSo the agent's abilities aren't fixed at install time. Register a Postgres server and it can answer questions about your data. Register GitHub and it can reason about your pull requests.\n\n```\nomnikey mcp add\nomnikey mcp list\nomnikey mcp toggle <id>\n```\n\nstdio, HTTP, and SSE transports are supported. A fresh install seeds three stdio servers so there's something to try immediately: filesystem, playwright, and git.\n\nOne design decision worth knowing: the agent sees every server you've configured but connects only to the one it needs. Ten registered servers don't mean ten connections per request. You can also name one explicitly — \"use the Slack server to find that thread.\"\n\n## Five Recipes\n\nThese are example prompts, not benchmark results. Register and authenticate the relevant MCP server first, and give the agent the repository, thread URL, or dashboard it should inspect.\n\n1. Audit your own codebase\n\n```\n@omniAgent find all TODO and FIXME comments in this repo, group them by\ndirectory, and tell me which area has the most unfinished work\n```\n\nTerminal access only, no MCP server. Good first test because you can verify every line.\n\n2. Summarise a pull request\n\nWith the GitHub MCP server:\n\n```\n@omniAgent use GitHub to summarise the open PRs touching the auth module\nand flag any waiting more than a week\n```\n\n3. Triage a Slack thread\n\nWith a Slack MCP server, written from inside the Slack message box:\n\n```\n@omniAgent read this thread, summarise what was decided, and draft a reply\nthat answers the open question\n```\n\nThe reply lands where you were already typing.\n\n4. Ask your database a question\n\nWith a read-only Postgres MCP server:\n\n```\n@omniAgent how many signups did we get last week, broken down by day?\n```\n\nPoint it at a read-only replica with a read-only role. The agent is exactly as constrained as the credentials you give it — the credentials are the security boundary.\n\n5. Pull numbers off an internal dashboard\n\nThis one uses browser access rather than MCP:\n\n```\nomnikey grant-browser-access\n```\n\nThen:\n\n```\n@omniAgent read the Grafana dashboard in my open tab and summarise which\nservice regressed this week\n```\n\nThe agent reads the rendered page from your own logged-in session. No API tokens, no screenshot-and-paste. People underestimate this until they try it — a lot of important information lives behind a login and has no API.\n\n## The Safety Part\n\nAn agent with shell access running as your user is powerful and dangerous. Pretending otherwise would be dishonest.\n\nReview your terminal-access settings before running a task; shell commands execute with your user privileges. Browser access needs an explicit grant that creates a separate debug profile rather than touching your main one. Every MCP server is one you registered.\n\nOnce enabled, treat an @omniAgent task the way you'd treat pasting a script from the internet into your shell. Read what you're asking for. Use read-only credentials where you can.\n\nThe other side: nothing leaves your machine except to providers you chose. Your prompt goes to your LLM provider, searches to your search provider, MCP traffic wherever you pointed it. No OmniKey server in the path, no telemetry, no usage counters. MIT on GitHub if you'd rather verify than trust.\n\n## The Pattern\n\nThe agent earns its keep when the question is about your situation, not about language. \"Rewrite this paragraph\" is a model problem. \"Which service regressed this week\" is a context problem — and context is what MCP, terminal, and browser access are for.\n\nWe're collecting recipes people have actually run, with exact commands. There's an open issue if you build one worth sharing.\n\n```\nbrew install GurinderRawala/omnikey/omnikey-cli\nomnikey onboard\nomnikey mcp add\n```\n\n", "url": "https://wpnews.pro/news/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser", "canonical_source": "https://omnikeyai.ca/blog/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser", "published_at": "2026-11-10 05:25:59+00:00", "updated_at": "2026-11-10 05:52:08.917505+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "ai-products"], "entities": ["OmniKey", "@omniAgent", "Model Context Protocol", "DuckDuckGo", "Serper", "Brave", "Tavily", "SearXNG"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser", "markdown": "https://wpnews.pro/news/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser.md", "text": "https://wpnews.pro/news/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser.txt", "jsonld": "https://wpnews.pro/news/i-gave-my-keyboard-shortcut-a-terminal-and-a-browser.jsonld"}}