{"id":50717730,"url":"https://github.com/jpsala/copicu","last_synced_at":"2026-06-13T04:01:08.485Z","repository":{"id":363560035,"uuid":"1260163838","full_name":"jpsala/copicu","owner":"jpsala","description":"Local-first clipboard workbench for search, scripts, and AI-assisted workflows.","archived":false,"fork":false,"pushed_at":"2026-06-09T14:38:45.000Z","size":1128,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T20:22:40.134Z","etag":null,"topics":["ai","automation","clipboard","clipboard-manager","local-first","productivity","rust","sqlite","tauri","typescript","windows"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jpsala.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-05T08:06:29.000Z","updated_at":"2026-06-09T14:53:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jpsala/copicu","commit_stats":null,"previous_names":["jpsala/copicu"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jpsala/copicu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpsala%2Fcopicu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpsala%2Fcopicu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpsala%2Fcopicu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpsala%2Fcopicu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jpsala","download_url":"https://codeload.github.com/jpsala/copicu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpsala%2Fcopicu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34271500,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","automation","clipboard","clipboard-manager","local-first","productivity","rust","sqlite","tauri","typescript","windows"],"created_at":"2026-06-09T20:01:50.508Z","updated_at":"2026-06-13T04:01:08.479Z","avatar_url":"https://github.com/jpsala.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Copicu\n\n**Copicu is a local-first clipboard workbench for search, reuse, automation, and AI-assisted workflows.**\n\nCopicu started as a CopyQ-inspired clipboard manager, but the goal is not to clone CopyQ feature by feature. CopyQ proves that clipboard history, commands, shortcuts, menus, paste workflows, and scripting are useful. Copicu takes that idea and rebuilds it around a smaller native core, a modern keyboard-first UI, structured metadata, local scripts, and a path toward privacy-aware AI commands.\n\nThe clipboard is usually treated as a passive list of things you copied. Copicu treats it as working memory: searchable, previewable, editable, taggable, scriptable, and reusable.\n\n![Synthetic Copicu picker demo](docs/assets/gifs/copicu-synthetic-picker-demo.gif)\n\n## Install Windows Alpha\n\nCopicu currently ships as a Windows alpha prerelease.\n\n1. Download the latest Windows installer from [Releases](https://github.com/jpsala/copicu/releases).\n2. Run the `Copicu_*_x64-setup.exe` installer.\n3. Open Copicu and use the picker to search, copy, edit, tag, or paste synthetic/test clipboard items first.\n\nCurrent alpha release:\n\n- [v0.1.0-alpha.1](https://github.com/jpsala/copicu/releases/tag/v0.1.0-alpha.1)\n- Asset: `Copicu_0.1.0_x64-setup.exe`\n- Windows x64 NSIS installer\n- SHA256: `931DE5582DD6912AA0332CF51E751FA5B55D88085114A502CF610A3D74095266`\n\nThis is early software. Do not test with sensitive clipboard content until you are comfortable with the alpha limitations and local data model.\n\n## Alpha Limitations\n\nCopicu is usable for experimentation and dogfooding, but it is not stable software yet.\n\nKnown limitations:\n\n- Windows is the primary tested platform right now.\n- APIs, settings, script contracts, and UI behavior can still change.\n- Paste-to-previous-window depends on Windows focus behavior, target apps, timing, and paste shortcuts.\n- Scripts are trusted local automation, not a secure sandbox or marketplace.\n- AI is optional and disabled by default; selected-content AI actions may send selected clipboard content to the configured provider.\n- Rich clipboard formats are still evolving. Text and image-only capture exist, but full HTML/RTF/custom-format fidelity is not a compatibility promise.\n- Copicu is CopyQ-inspired, not CopyQ-compatible. It does not run CopyQ scripts or promise full CopyQ parity.\n\nGood alpha feedback includes Windows version, target app, install method, Copicu version or commit, exact steps, and synthetic reproduction data.\n\n## What To Test And Report\n\nThe most useful alpha reports are narrow and reproducible:\n\n- clipboard capture from common Windows apps;\n- paste-to-previous-window behavior in specific target apps;\n- shortcut, tray, hide/show, and focus behavior;\n- picker search, keyboard navigation, and preview readability;\n- script/action ideas that would save real daily effort;\n- AI command mode friction, using only synthetic or non-sensitive clips;\n- performance symptoms with large synthetic histories.\n\nPlease do not paste real clipboard payloads into issues. Reduce examples to synthetic data.\n\n## Why Copicu Exists\n\nPower users copy useful fragments all day:\n\n- code snippets;\n- URLs and research links;\n- prompts and partial answers;\n- error messages and stack traces;\n- terminal commands;\n- Markdown fragments;\n- chat and email drafts;\n- screenshots;\n- temporary notes;\n- text that needs to be cleaned, summarized, tagged, transformed, or pasted somewhere else.\n\nMost clipboard managers help you remember those fragments. Copicu is meant to help you **do something with them**.\n\nThe long-term direction is simple:\n\n\u003e Search your clipboard like a history, organize it like a workspace, automate it like a tool, and command it like an assistant.\n\n## Inspired By CopyQ, Not A CopyQ Clone\n\nCopicu is strongly inspired by [CopyQ](https://hluk.github.io/CopyQ/). CopyQ is one of the best references for what an advanced clipboard manager can become: history, commands, shortcuts, scripting, menus, tabs, and deep customization.\n\nCopicu is not trying to be CopyQ-compatible. It does not aim to run CopyQ scripts, match CopyQ internals, or promise full feature parity.\n\nInstead, Copicu uses CopyQ as a baseline and explores a different product shape:\n\n- a small native core in Rust;\n- a Tauri 2 desktop shell;\n- TypeScript/React UI;\n- SQLite-backed structured metadata;\n- local blob storage for large payloads and images;\n- a compact keyboard-first picker;\n- explicit host APIs for copy, paste, window focus, search, metadata, and actions;\n- trusted local TypeScript/JavaScript scripts;\n- AI-assisted search, summaries, and command planning as an action layer.\n\n## What It Can Do Today\n\nCopicu is early-stage, but the core is already functional.\n\nCurrent capabilities include:\n\n- clipboard history capture for text;\n- image-only clipboard capture with normalized PNG blobs;\n- SQLite persistence for history and metadata;\n- blob storage outside SQLite for image and large payload data;\n- hash-based deduplication;\n- searchable picker;\n- keyboard navigation;\n- copy selected item;\n- paste selected item into the previous window on Windows;\n- target-aware paste shortcuts on Windows;\n- item editing;\n- item metadata: title, tags, notes, MIME hints;\n- tag management and tag-filtered picker routes;\n- built-in actions;\n- trusted local TypeScript/JavaScript scripts;\n- command palette;\n- local and global shortcut routes;\n- AI-assisted search mode;\n- temporary AI-generated script actions;\n- Markdown output windows for AI/script-generated summaries, drafts, reports, and compilations.\n\n## The Picker Is The Product\n\nCopicu is designed as a desktop utility, not a web app wrapped in a marketing shell.\n\nThe main surface is the picker:\n\n- open it with a shortcut;\n- type to search;\n- navigate with the keyboard;\n- preview content;\n- copy or paste the selected item;\n- edit content or metadata;\n- run actions from item menus or the command palette.\n\nThe UI should feel fast, discreet, precise, and useful immediately. Motion and polish are used to clarify state and focus, not to decorate the app.\n\n## Large Histories\n\nCopicu is designed for large clipboard histories without treating the picker like a giant DOM list.\n\nThe current architecture uses SQLite for local history/metadata and paginated queries, while `@tanstack/react-virtual` keeps the picker from rendering thousands of rows in React at once. The UI renders only the visible rows plus a small overscan buffer.\n\nThis is a design direction, not an unlimited-history benchmark claim. Storage size, indexes, blob payloads, thumbnails, retention policy, preview generation, and query shape still matter. Copicu should handle thousands of items more gracefully than a fully rendered React list, but public benchmarks are still needed before making stronger claims.\n\nCurrent local synthetic benchmark work measures paged search over generated test data, not real clipboard payloads. On one 10k-item synthetic dataset, skipping result-count recalculation for incremental page loads roughly halved some query timings. That is useful engineering evidence, but it is not a broad performance guarantee.\n\n## Scripts And Actions\n\nCopicu has a shared concept called an **Action**.\n\nAn action can be built into the app or defined by a local script. Actions can run from the picker, item menus, command palette, local shortcuts, global shortcuts, clipboard-change triggers, and future surfaces.\n\nScripts are local TypeScript or JavaScript files. By default, Copicu looks for them in:\n\n```text\nDocuments/Copicu/Scripts\n```\n\nScripts use `defineAction({...})` metadata to describe:\n\n- id;\n- name;\n- description;\n- triggers;\n- input requirements;\n- local/global shortcuts;\n- capabilities;\n- logging behavior.\n\nThis makes scripts discoverable before they run. Copicu can show diagnostics, decide when a script is valid, and route it through the same host APIs used by the native UI.\n\nExample script ideas:\n\n- tag the selected clipboard item;\n- normalize whitespace and copy the result;\n- join selected snippets;\n- extract URLs from selected clips;\n- filter the picker to a useful query;\n- paste a transformed item into the previous app;\n- open copied URLs;\n- create a Markdown summary from checked items;\n- react to clipboard changes;\n- build small personal workflows around your clipboard history.\n\nScripts are currently trusted local automation, not a sandboxed marketplace model. Treat them like code you choose to run on your own machine.\n\nRead the scripting guide: [docs/user/scripts.md](docs/user/scripts.md)\n\n## AI Command Mode\n\nCopicu is not limited to traditional search.\n\nInstead of only typing a keyword like `docker`, `invoice`, or `meeting`, the goal is to let you write intent:\n\n```text\nshow me the clips about the auth bug\nsummarize the checked items\ntag these as work\nfind the command I copied yesterday\nclean this text and copy the result\nturn these snippets into Markdown\nextract the URLs from the selected clips\nshow only long text clips\ntake the checked items and make a short report\nfind things that look like error logs\nprepare this for pasting into Slack\nmark three more items related to this one\n```\n\nThe idea is not \"AI chat bolted onto a clipboard manager.\" The idea is a local clipboard workspace where natural-language commands can become concrete operations.\n\nA command can become:\n\n- a structured local search;\n- a filtered picker view;\n- a set of selected or marked items;\n- metadata updates;\n- tags or notes;\n- a text transformation;\n- a Markdown output;\n- a copied result;\n- a temporary script executed through the same action runner as normal scripts.\n\nFor example:\n\n```text\ntake the checked clips and make a concise project summary\n```\n\ncan become:\n\n1. read only the checked item IDs;\n2. fetch the required item content;\n3. ask the configured AI provider for Markdown;\n4. show the result in a review window;\n5. let the user copy it, export it, or add it back to history.\n\nAI in Copicu is meant to use explicit host capabilities. It should not get raw access to SQLite, the filesystem, the shell, native input, or the whole clipboard history by default.\n\n## AI Provider Configuration\n\nAI is disabled by default.\n\nWhen enabled, Copicu uses an OpenAI-compatible endpoint. Secrets are read from environment variables or a local `.env` file, using fixed names:\n\n```text\nCOPICU_AI_ENDPOINT=https://openrouter.ai/api/v1\nCOPICU_AI_MODEL=openai/gpt-4.1-mini\nCOPICU_AI_API_KEY=your_key_here\n```\n\nUse [.env.example](.env.example) as the template. It includes example blocks for OpenRouter, OpenAI, and Groq.\n\n`COPICU_AI_API_KEY` is the fixed secret key name. `COPICU_AI_ENDPOINT` and `COPICU_AI_MODEL` can override Settings when present. Do not commit `.env`.\n\n## Privacy Model\n\nClipboard history is sensitive.\n\nCopicu is local-first by design:\n\n- history metadata is stored locally in SQLite;\n- image and blob payloads are stored locally as files;\n- scripts are local files;\n- script source code is not stored in SQLite;\n- script logs should record IDs, kinds, counts, lengths, and outcomes, not clipboard payloads;\n- tests and examples use synthetic data;\n- real clipboard dumps, local databases, `.env` files, secrets, and private logs should never be committed.\n\nAI features are designed as explicit actions. Some AI operations, such as simple AI search planning, can work without sending clipboard content. Other operations, such as summarizing selected items, necessarily send selected content to the configured provider and should remain intentional, capability-based, and reviewable.\n\n## Roadmap\n\nThe direction is a fast, private, keyboard-first clipboard workbench with:\n\n- richer previews for text, code, URLs, HTML, Markdown, and images;\n- robust paste-to-previous-window behavior;\n- stronger tags, saved filters, and smart collections;\n- more built-in actions;\n- a stable script/action API;\n- AI-assisted search, tagging, extraction, cleanup, and summaries;\n- privacy gates for AI and scripts;\n- better packaging and releases;\n- cross-platform support where native behavior can be made reliable.\n\n## Status\n\nCopicu is active early-stage software.\n\nIt is usable for experimentation and dogfooding, but APIs and behavior are still evolving. The current priority is to keep the native core reliable while growing the product around search, metadata, scripts, and AI-assisted actions.\n\n## Development\n\nRequirements:\n\n- Node.js/npm;\n- Rust;\n- Tauri 2 prerequisites for your platform;\n- WebView2 on Windows.\n\nCommon commands:\n\n```powershell\nnpm install\nnpm run build\nnpm run visual:check\nnpm run perf:history -- 10000\nnpm run rust:test\nnpm run tauri:dev\n```\n\nAI setup for local development:\n\n```powershell\nCopy-Item .env.example .env\n# then edit .env and set COPICU_AI_API_KEY\n```\n\nBuild the desktop app:\n\n```powershell\nnpm run tauri:build\n```\n\n## Working With Coding Agents\n\nCopicu is intentionally documented for agent-assisted development.\n\nThe repository includes an [AGENTS.md](AGENTS.md) file and a layered documentation system under [docs/](docs/). This means a contributor can clone the repo, open it with a coding agent, and give the agent enough project context without replaying the whole history of the project.\n\nRecommended agent bootstrap:\n\n```text\nRead AGENTS.md first.\nThen read docs/README.md, docs/WORKING_MEMORY.md, docs/PROJECT.md,\ndocs/ASSISTANT_RULES.md and docs/DEVELOPMENT.md.\nFor specific work, use docs/TOPICS.md as the router and open only the relevant topic.\n```\n\nThe goal is to make agents useful without turning every session into archaeology. Durable decisions live in stable docs, live work lives in `docs/active-work/`, feature plans live in `specs/`, and topic-specific context lives in `docs/topics/`.\n\nThis helps with:\n\n- preserving product direction across sessions;\n- avoiding accidental CopyQ parity creep;\n- keeping privacy rules visible;\n- giving agents the native-risk map for clipboard, focus, shortcuts, tray, paste, and storage;\n- making larger changes start from specs instead of ad hoc edits;\n- letting external contributors understand why the app is shaped this way.\n\nThere is no separate `CLOG.md` in the current repo. The equivalent \"current log\" is [docs/WORKING_MEMORY.md](docs/WORKING_MEMORY.md), supported by [docs/active-work/](docs/active-work/) and [docs/TOPICS.md](docs/TOPICS.md).\n\nLocal tool caches such as `.agents/` are intentionally not committed. The portable project context is the Markdown documentation that ships with the repo.\n\n## Documentation\n\nUser-facing docs:\n\n- [docs/user/README.md](docs/user/README.md)\n- [docs/user/scripts.md](docs/user/scripts.md)\n\nInternal project docs:\n\n- [docs/README.md](docs/README.md)\n- [docs/PROJECT.md](docs/PROJECT.md)\n- [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)\n- [docs/TOPICS.md](docs/TOPICS.md)\n\n## Contributing\n\nContributions are welcome, especially around:\n\n- public screenshots and gifs with synthetic data;\n- clipboard capture reliability;\n- Windows focus and paste behavior;\n- rich MIME, HTML, RTF, and image handling;\n- picker UX and accessibility;\n- search and filtering;\n- tag workflows;\n- built-in actions;\n- scripting API design;\n- AI-assisted workflows;\n- privacy and safety boundaries;\n- packaging and releases;\n- docs, tests, and examples.\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Before starting a large feature, open an issue or discussion. Copicu is CopyQ-inspired, but not aiming for full CopyQ parity by default.\n\n## Name\n\nThe name **Copicu** comes from the CopyQ inspiration without claiming compatibility. It is a separate project with its own product direction: local clipboard intelligence, structured metadata, personal automation, and AI-assisted workflows.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpsala%2Fcopicu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpsala%2Fcopicu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpsala%2Fcopicu/lists"}