Pinodock
Chrome Extension · New Tab Replacement

Your new tab.
Completely reimagined.

A smart browser assistant that thinks on your device first. Press ⌘⇧P for 60+ commands — fuzzy tab search, snippets, clipboard history, Markdown tools, and more. Press ⌘K on any page to search tabs, bookmarks, and history instantly. Gemini Nano answers AI queries locally — private, free, no API key. Cloud LLM escalates only when needed, with up to 10–15× token savings built in.

No account needed
100% local & private
Free to start
Pinodock
GitHub
Linear
Recently Copied
git commit -m "feat: add fuzzy search"
https://linear.app/pencilcard/issue/ENG-512
Pomodoro
Focus
24:07
Session 2 of 4
Pause
Skip
Today
3 / 5
Ship PR #89
Fix lint errors
Standup
Review feedback
Write release notes
Clipboard saved
Just now · Local only
247
clips stored
0
sent to server
100%
Local Processing
Every operation on your machine
0 ms
Network Latency
No server round-trips, ever
Free
Forever
No subscription, no tricks
4-in-1
Features
Search, clipboard, timer, todos
Features

Everything your workflow needs.
Nothing it doesn’t.

Built for developers, designers, and anyone who lives in their browser all day.

Fuzzy Search

Find anything
in your browser.

Hit ⌘K and search across every open tab, saved bookmark, and browser history entry simultaneously — all indexed locally, no external queries.

✓ Tabs ✓ Bookmarks ✓ History ✓ Local only
Pinodock — Search
linear eng esc
Li
ENG-512 — Keyboard nav bug
linear.app · Open tab
Tab
Li
ENG-492 — Auth refresh
linear.app · Bookmark
Bookmark
Li
ENG-388 — Search indexing
linear.app · History · 2h ago
History
Pomodoro Timer

Stay in flow.
Built right in.

No more switching to a separate app. Pinodock's Pomodoro timer lives in every new tab, with a visual progress ring and automatic session tracking. Stay focused without breaking your rhythm.

✓ Visual ring ✓ Session tracking ✓ Break alerts
Pinodock — Pomodoro
Deep Focus Session
24:07remaining
Session 3 of 4 · 75 min focused today
Clipboard History

Never lose
a copy again.

Pinodock keeps a searchable history of everything you've copied — snippets, URLs, code, credentials — stored completely on your machine. Paste anything from any past session instantly.

✓ Searchable ✓ Local only ✓ Persistent
Pinodock — Clipboard
git commit -m "feat: fuzzy search engine" now
https://linear.app/pencilcard/ENG-512 4m
const result = await db.query(sql`SELECT...`) 12m
npm run build:prod --no-cache 1h
[email protected] 2h
Developer Toolkit

Your entire dev toolbox.
One keystroke away.

Hit ⌘K and type a slash command — or open the Tools tab for full-panel editors. Decode JWTs, generate passwords, test regex, convert currencies, diff text, hash strings, run custom JS in a sandboxed environment, and write Markdown with live preview.

✓ /jwt decoder ✓ /hash SHA-256 ✓ /pass generator ✓ /regex tester ✓ /currency ✓ /diff ✓ Script runner ✓ Markdown pad ✓ 100% local
Pinodock — Tools
▶ Script 📝 Markdown 🔑 JWT # Hash 🔒 Password
const res = await fetch('https://api.coindesk.com/v1/bpi/currentprice.json')
const d = await res.json()
return `Bitcoin: $${"{"}d.bpi.USD.rate{"}"}`
Output Bitcoin: $105,234.50
▶ Run ⌘↵
Reading List

Save it now.
Read it later.

Save any URL directly from the command palette with /read <url> <title>. Browse, filter unread, and open articles without losing your place. Everything stored locally — no syncing, no account.

✓ Save from launcher ✓ Filter unread/read ✓ Search by title ✓ Local only
Pinodock — Reading
Unread All Read 3
🔶
Ask HN: How do you structure your new tab?
news.ycombinator.com · 12m ago
G
Chrome Extensions MV3 Migration Guide
developer.chrome.com · 1h ago
TypeScript 5.8 — What's new
devblogs.microsoft.com · 2d ago
✦ Smart Assistant

On-device first.
Cloud when it counts.

Pinodock runs AI entirely on your device using Chrome’s built-in Gemini Nano — no API key, no cost, nothing leaving your machine. Simple queries skip classification and answer instantly on-device. Complex queries are routed intelligently: real-time data opens your preferred search engine, deep reasoning escalates to your cloud LLM with streamed replies. Before anything reaches the cloud, Nano strips PII, compresses the prompt, and threads in a compressed summary of your prior conversation — cutting token spend by up to 10–15× versus sending raw history. Every query is tracked in an on-device analytics panel so you can see exactly how much you’ve saved. Skills like !standup, !commit, and !explain are always handled locally.

✓ Gemini Nano · on-device · free ✓ No API key required ✓ Smart routing: device → search → cloud ✓ Fast-path: short queries answered instantly ✓ PII stripped before any cloud call ✓ 10–15× token savings via Nano compression ✓ Conversation history threaded on-device ✓ Streamed replies — OpenAI · DeepSeek · Perplexity ✓ Usage analytics: tokens saved, cost estimate, routing breakdown ✓ Session chat history with regenerate · /stats · /chat ✓ /ask @claude · /ai @gemini · route any query to a specific provider ✓ /advice @github — read your open GitHub tab, ask any LLM ✓ /advice @gmail · @gcal · @todoist · @aws — live tab context for AI
Pinodock — Smart Assistant
!standup reviewed auth PR, fixing merge conflicts today
PII filter — nothing sensitive found
Fast path — short query, skipped classifier
Gemini Nano — answered on-device instantly
Cloud LLM — not needed · 0 API calls
Yesterday: Reviewed and approved the auth PR.
Today: Resolving merge conflicts from auth branch.
Blockers: None.
✓ Nano · on-device ✦ 0 tokens sent $0.00 click to copy
⚡ Script Commands

Write once.
Run from the palette.

Write a few lines of JavaScript, give it a !trigger, and run it from the launcher with optional input. Like Raycast Script Commands but browser-native — fetch() works, your typed text is passed as input, and results surface directly in the palette.

✓ !trigger syntax ✓ Input passthrough ✓ fetch() support ✓ Sandboxed JS ✓ Return string or { label, value, url }
Pinodock — Script Commands
!slug My Awesome Blog Post Title
// URL slug generator
return input
  .toLowerCase()
  .replace(/[^a-z0-9]+/g, '-')
  .replace(/^-|-$/g, '')
my-awesome-blog-post-title ⏎ copy
Browser-wide Command Palette

Alfred for your browser.
On any tab.

Hit ⌘⇧P on any page — even with video playing, forms open, or code loaded. A dark overlay surfaces instantly over the page. Switch to any open tab, search bookmarks, paste from clipboard history, grab a saved snippet, generate a QR code, build a UTM link, pick a color, or run any of the 30+ slash commands. Zero context switch. Works on every http/https page via Shadow DOM so it never interferes with the page underneath.

✓ Any tab, any page ✓ /tab — switch open tabs ✓ /bm — search bookmarks ✓ /clip — clipboard history ✓ /snip — saved snippets ✓ QR · UTM · UUID · color picker ✓ Shadow DOM isolated
Any page — ⌘⇧P
/tab lin ⌘⇧P
Li
ENG-512 — Keyboard nav bug
linear.app
↗ switch
Li
ENG-492 — Auth refresh
linear.app
↗ switch
Gh
pencilcard/pinodock — Pull requests
github.com
↗ switch
/bm /clip /snip /uuid /qr 30+ more
Address Bar Launcher

Launch without
opening a tab.

Type pd in Chrome’s address bar and hit Space — Pinodock takes over. Run browser commands, search engines, and tab management without ever leaving the address bar. Use @g, @gh, @yt to search any engine. Run /group-tabs, /dark-mode, or /save-session without switching focus. DuckDuckGo !bangs work too.

✓ pd @g · @gh · @yt · @npm · @mdn — search any engine ✓ /group-tabs — group all tabs by domain ✓ /close-tabs <pattern> — close matching tabs ✓ /save-session — snapshot all open tabs ✓ /sessions list — view saved sessions ✓ /dark-mode mocha — theme the active page ✓ /tabs list — see all open tabs in a notification ✓ !bangs — DuckDuckGo bang redirects
Chrome address bar — type “pd”
pd @gh pinodock cli Enter
🐙
Search GitHub for “pinodock cli”
github.com/search?q=pinodock+cli
↩ open
📑
/group-tabs — group all open tabs by domain
🌙
/dark-mode — theme the active page (mocha · matcha · cold-brew)
💾
/save-session — snapshot all current tabs
✏ Web Highlights

Mark it. Find it.
Keep it forever.

Select any text on any webpage and a colour picker pops up. Pick a shade and the highlight sticks — even after you close the tab. Pinodock re-applies your marks automatically the next time you visit. Every highlight is logged in the Highlights tab with the source URL, title, and timestamp so you can review and search them from any new tab.

✦ 5 highlight colours ✦ Persists across sessions ✦ Auto re-applies on revisit ✦ 📌 Save to Sticky Notes
Research paper — example.com
The study found that context switching costs up to 40% of productive capacity in knowledge workers.
Participants who used time-blocking reported 2.3× higher task completion rates compared to reactive scheduling.
Deep work sessions of 90 minutes aligned with ultradian rhythm peaks yielded the best outcomes.
📌 Save to notes
3 saved highlights
"context switching costs up to 40%…" · example.com · 2m ago
"2.3× higher task completion rates" · example.com · 2m ago
🗂 Tab Groups

Organise chaos.
Restore context.

Create named, colour-coded Chrome tab groups directly from the new tab — no more manually dragging tabs. Save any group as a preset and restore the exact set of URLs with one click later. Works alongside your workspace presets: presets open tabs, groups organise the tabs you already have open.

✦ 9 Chrome group colours ✦ Save & restore groups ✦ Collapse / expand ✦ Add active tab to group
Tab Groups
Open groups (3)
Research 4 tabs
Focus Save
Design refs 2 tabs
Focus Save
Saved groups (2)
Sprint planning 6 URLs Restore
Bug triage 3 URLs Restore
Sample Scripts

Start with these.
Build your own next.

Copy any script into Settings → ✦ AI → Script Commands and give it a trigger. Type ! in the palette to run it instantly.

!slug URL Slug

Convert any text to a clean URL-safe slug. Type !slug My Blog Title and get the slug instantly.

// input = text typed after !slug
return input
  .toLowerCase()
  .replace(/[^a-z0-9]+/g, '-')
  .replace(/^-|-$/g, '')
my-awesome-blog-post-title
!btc Bitcoin Price

Fetch live Bitcoin price from CoinDesk. No API key required — just run !btc.

const r = await fetch(
  'https://api.coindesk.com/v1/bpi/currentprice.json'
)
const d = await r.json()
return 'BTC $' + d.bpi.USD.rate
BTC $105,234.50
!wc Word Counter

Count words and characters in any text. Paste content after !wc for an instant count.

const words = input.trim()
  .split(/\s+/).filter(Boolean)
return words.length + ' words · '
  + input.length + ' chars'
247 words · 1,482 chars
!ip My Public IP

Fetch your current public IP address via ipify. Hit Enter to copy it to the clipboard.

const r = await fetch(
  'https://api.ipify.org?format=json'
)
const d = await r.json()
return { label: d.ip, value: d.ip }
203.0.113.42
!ts Unix Timestamp

No input = current ms timestamp. Pass a timestamp to convert it to ISO date string.

if (!input) return String(Date.now())
const n = Number(input)
return new Date(
  n > 1e10 ? n : n * 1000
).toISOString()
2026-05-18T12:34:56.000Z
!pr PR Description

Generate a GitHub PR description stub. Pass the branch name as input, copy and paste into GitHub.

const b = input || 'feature/my-feature'
return [
  '## Summary\n- \n',
  '## Test plan\n- [ ] \n',
  'Branch: ' + b
].join('\n')
## Summary ↵ - ↵ ↵ ## Test plan…
Plugins & Integrations

Connect your entire workflow.
Right from your new tab.

Pinodock reads data from services you're already logged into — no extra accounts, no OAuth flows. Just open a tab and your widgets come alive.

🔶
Hacker News Live

Top stories from the HN front page, refreshed every 5 minutes. Click any headline to open it.

+ Add to Pinodock
Crypto Prices Live

BTC, ETH and SOL prices with 24h change via CoinGecko. No API key needed.

+ Add to Pinodock
🤖
Reddit Feed Live

Top posts from any subreddit you choose. Configure once, reads daily top posts.

+ Add to Pinodock
🎵
Spotify Connected

Now playing track and artist. Reads your Spotify Web Player session — no login required.

Needs: open.spotify.com
+ Add to Pinodock
📅
Google Calendar Connected

Today's events pulled from your Google Calendar session. Keep a tab open and your schedule appears.

Needs: calendar.google.com
+ Add to Pinodock
✉️
Gmail Connected

Unread count and latest subject lines from your inbox — live from your Gmail tab.

Needs: mail.google.com
+ Add to Pinodock
▶️
YouTube Studio Connected

Recent video views and subscriber count directly from YouTube Studio. For creators.

Needs: studio.youtube.com
+ Add to Pinodock
☁️
AWS Console Connected

Current month cost and active region pulled from your AWS Console session. No IAM keys needed.

Needs: console.aws.amazon.com
+ Add to Pinodock
🐙
GitHub Connected

Notification count and your username from your active GitHub session.

Needs: github.com
+ Add to Pinodock
Todoist Connected

Today's and overdue tasks from Todoist. Reads your auth token from the open Todoist tab.

Needs: app.todoist.com
+ Add to Pinodock
💬
Slack Soon

Unread DMs and channel mentions from your Slack workspace.

Coming soon
🟣
Linear Soon

Issues assigned to you, sprint progress, and cycle updates.

Coming soon
📝
Notion Soon

Recent pages and open tasks from your Notion workspace.

Coming soon

All connected plugins use your existing browser session — no OAuth, no API keys, no data sent to PencilCard.
Read the privacy policy →

Customise

Three ways to make it yours.

Snippets fill in templates. Skills teach the AI new tricks. Workflows chain steps together. No coding required — just text and Markdown.

Snippets

Fill-in templates
for anything you type repeatedly.

Write a snippet with {paramName} placeholders. When you paste it, Pinodock shows a fill-in form — one field per unique param, a live preview, then copies the finished text.

  • Name your snippet and write the template using {param} tokens for anything that changes
  • Multiple uses of the same param name fill in together — write {name} twice, fill it once
  • Works for URLs, emails, Slack messages, SQL queries, CLI commands — anything text-based
  • Parameterised snippets show a ⚙️ icon instead of 📄 so you can spot them at a glance
Set up: ⌘⇧P → /snip → New snippet
snippet · {param} syntax
── Jira ticket URL ─────────────────
https://{org}.atlassian.net/browse/{ticket}

── GitHub PR link ──────────────────
https://github.com/{org}/{repo}/pull/{pr}

── CLI command ─────────────────────
docker run -it --rm -p {port}:{port} {image}

── Email draft ─────────────────────
Subject: Re: {project}{topic}

Hi {name},

{message}

Best, {sender}
org=acme · ticket=PROJ-42 https://acme.atlassian.net/browse/PROJ-42
port=3000 · image=node:20 docker run -it --rm -p 3000:3000 node:20
Jira / Linear links GitHub PRs & issues Email drafts SQL queries Slack messages Docker commands kubectl commands Vercel / AWS URLs
Skills

Teach the AI
a new job. In plain Markdown.

A Skill is a Markdown file with a frontmatter header and a plain-English system prompt as the body. Give it a trigger word. Type !trigger your input in the palette — the skill runs instantly against your configured LLM.

  • Frontmatter sets the name, trigger word, and whether to force cloud LLM (or let Gemini Nano try first)
  • The body is your system prompt — write it in plain English, structure the output format exactly how you want it
  • Whatever you type after !trigger becomes the user input passed to the model
  • Works with any provider: Gemini Nano on-device, or your BYOK OpenAI / Claude / Gemini / DeepSeek key
Set up: Settings → ✦ AI → Skills → New skill
skill · Markdown format
---
name: Sprint Summary
trigger: !sprint
description: Summarise a sprint from rough notes
forceCloud: false
---

You summarise agile sprint notes.
Given rough bullet points, produce:

**Completed:** [what shipped — bullets]
**Carried over:** [what didn't — bullets]
**Key learning:** [one sentence]

Keep it tight. One sentence per bullet.
!sprint auth done, dashboard 80%, 2 bugs open Completed: auth · Carried over: dashboard…
!pr — PR description !standup !review — code review !commit message !bug report !explain code !brief — client brief !tone — rewrite tone
Workflows

Chain steps together.
Run them with one command.

A Workflow is a sequence of steps — search, open tabs, AI transform, call a webhook, wait, branch on conditions. Each step can use {{variable}} to reference the output of any previous step. Build it in the visual Workflow Builder, run it with /workflow run name.

  • open-tabs — open a set of URLs in a new window for a context switch (e.g. morning work setup)
  • ai-transform — run a prompt over any text; output is available to the next step as {{stepN}}
  • webhook — POST a JSON payload to any URL (Slack, Zapier, n8n, your own API)
  • conditional — branch on eq / contains / regex to skip steps or take alternate paths
  • wait — pause N ms between steps when timing matters
Create: /workflow new Morning Setup
workflow · step chain
── Morning Setup workflow ───────────

Step 1 · open-tabs
  urls: notion.so, github.com/notifications,
        mail.google.com

Step 2 · ai-transform
  prompt: "List 3 focus priorities for today"
  input: {{today}}

Step 3 · webhook
  url: https://hooks.slack.com/...
  payload: { text: {{step2}} }

── Code Review workflow ─────────────

Step 1 · ai-transform
  prompt: "Review for security issues"
  input: {{clipboard}}

Step 2 · ai-transform
  prompt: "Rewrite as a Jira ticket"
  input: {{step1}}
Morning work setup Code review → Jira Standup → Slack post Research → summary Tab context switch Webhook automation
Command Palette

60+ commands. All keyboard-first.

Press ⌘⇧P on any new tab to open — or ⌘K on any page for instant tab & bookmark search.

🧭 Navigation
/tabSwitch to any open tab
/bmSearch bookmarks
/historyBrowse browser history
/dlRecent downloads
/rlYour reading list
/saveSave current page
✏️ Create
/todoCapture a task
/noteQuick note to scratch pad
/snipPaste a saved snippet
/clipClipboard history picker
📝 Markdown
/mdpadLive Markdown editor + preview
/tomdHTML → Markdown
/csvtableCSV → Markdown table
/json2mdJSON → Markdown
🔧 Developer Tools
/uuidGenerate a UUID v4
/colorColor picker & converter
/jwtDecode a JWT token
/hashSHA-256 hash any text
/qrQR code generator
/passStrong password generator
/base64Encode / decode Base64
/utmUTM link builder
/calcQuick calculator (= prefix)
/currencyLive FX conversion
✦ AI
/askQuick AI answer (on-device first)
/aiFull threaded AI conversation
/ragSearch your saved documents
/skillsBrowse AI skills & automations
Launch pricing

Free now. Pro later.

The production launch is free and local-first. Pro remains a waitlist until checkout, restore, and entitlement checks are reliable end to end.

Free
$0
Free tier plan (no time limit)
  • ⌘K global launcher — tabs, bookmarks, history from any page
  • ⌘⇧P command palette — 60+ slash commands
  • New tab dashboard — clock, weather, greeting, quick links
  • Todos & task manager
  • Pomodoro timer with session tracking
  • Scratch pad, reading list, clipboard history
  • Hacker News, Crypto, Reddit live widgets
  • Background images — daily, Unsplash, custom URL, local file
  • /calc · /color · /uuid · /qr · /hash · /jwt · /pass · /currency
  • Gemini Nano on-device AI — no API key, no cost
  • BYOK cloud AI — 3 sessions/week (OpenAI · Claude · Gemini · DeepSeek)
  • 100% local · zero cloud storage · zero tracking
Add to Chrome — Free
Waitlist
Pro later
Soon
No payment today · final price published before checkout opens
  • Everything in Free
  • Planned expanded cloud AI and BYOK workflows
  • Planned advanced automations and connected-app workflows
  • Planned sync, premium customization, and usage history
  • Final feature list ships before paid checkout opens
Join the Pro waitlist →

All features are local and private. Pro upgrades fund continued development. No data ever leaves your browser.

Common Questions

Straight answers.

Everything you need to know before you install.

Does Pinodock send my data anywhere?
No. Your tabs, bookmarks, history, todos, notes, clipboard, and snippets never leave your browser. On-device AI (Gemini Nano) runs entirely locally. Cloud AI is opt-in, BYOK, and only fires when you explicitly ask. Full privacy policy →
Do I need an account or API key?
No account needed for anything in the Free tier. On-device AI works out of the box in Chrome 127+. To use cloud LLMs (OpenAI, Claude, Gemini, DeepSeek) you bring your own key — Pinodock never stores it outside your browser.
Which browsers are supported?
Chrome and any Chromium-based browser (Edge, Brave, Arc, Vivaldi). Firefox is not supported — it lacks the extension APIs needed for the Cmd+K overlay and new-tab replacement.
How is this different from other new tab extensions?
Most new tab extensions are dashboards. Pinodock is a keyboard-first productivity layer — a command palette that searches your entire browser (60+ commands), plus an AI assistant that runs locally before ever touching a server. The new tab is just the launchpad.
Will it slow down my browser?
No. The extension uses a service worker (MV3) with no persistent background process. It wakes only when you open a new tab or press ⌘K. The RAG model loads lazily — only when you use /rag.
What happens if I uninstall it?
All data is stored in Chrome's local extension storage. Uninstalling removes everything cleanly. You can also export your data anytime from Settings → Data → Export before uninstalling.
Get started

Install Pinodock.
Free to start.

No account. No email. No API key. Gemini Nano runs on your device from the first query. Pro is a waitlist while the paid entitlement path is hardened.