Skip to content

Tacite desktop

Changelog

13 documented releases, with features, fixes, and improvements. Older entries describe the product at the time of that release.

v0.17.1

Fixed

  • macOS release artifacts — Publish both the stable DMG alias and immutable versioned DMG, then verify every artifact referenced by latest-mac.yml before reporting upload success.
  • Release failure handling — Fail closed when the macOS update manifest is missing, empty, or references an unavailable artifact.
  • Settings accessibility — Give the icon-only Settings button an explicit accessible name for screen readers and other assistive technology.

Tests

  • Added release-uploader integration coverage for successful uploads, manifest URL verification, simulated 404 responses, and missing or empty manifests.

v0.17.0

Added

  • Task intelligence controls — Added task-level intelligence actions and exposed generated task details so users can inspect and refine AI-assisted work.
  • Founder seat enforcement — Added plan-aware team seat limits and aligned the founder entitlement gate with current pricing.
  • Recoverable cleanup layer — Added centralized, Trash-backed path cleanup across build artifacts, migrations, embeddings, activity monitoring, IPC sockets, backups, and deployment tooling.

Changed

  • Denser project task boards — Increased task-board information density while preserving task-detail editing paths.
  • Homepage positioning — Aligned the production homepage and managed-AI messaging with the current business plan.
  • Safer release and deployment cleanup — Replaced permanent cleanup paths with bounded Trash or backup rotation behavior, including DMG replacement and frontend rollback retention.

Fixed

  • Search focus and editing stability — Preserved search input focus, edits, match-case behavior, and intentional focus changes across navigation and unmounts.
  • Productivity backup fidelity — Serialized metric imports and preserved dated history, summary deltas, derived metrics, and round-trip restore behavior.
  • Windows activity tracking — Prevented invalid focus sessions and hardened the native activity-window probe.
  • Database and enrichment safety — Preserved colliding migration backups, normalized denied-path aliases, retained original allowlist paths, and kept weaker FTS retrieval matches.
  • Pro upgrade and AI diagnostics — Simplified upgrade/error states while preserving managed-AI diagnostics.

Tests

  • Added regression coverage for recoverable deletion policy, database migration fixtures, backup behavior, and task/productivity workflows.

v0.16.2

Added

  • Premium /test8 decision-observatory landing page — Added a responsive, owner-governed decision-memory narrative with an interactive approve/edit/reject demo, explicit local-activity privacy boundaries, accessible motion controls, dedicated SEO metadata, and Cloudflare deployment wiring.
  • Premium /test7 decision-system landing page — Added a responsive editorial concept for Tacite's owner-approved decision records, including animated signal flow, an interactive approval demo, reduced-motion support, dedicated SEO metadata, and Cloudflare deployment wiring.

Changed

  • Test 6 promoted to the production homepage — The approved decision-system landing page now renders at https://tacite.ai/, with production canonical metadata, social previews, structured data, and a regression guard that keeps comparison routes isolated.
  • Website design experiments — Added isolated /test through /test6 landing-page variants and hardened Cloudflare composition, route-specific SEO, no-index protection, and explicit 404 handling while the production direction was evaluated.
  • Teams feature hidden by default — Phase 1 of the teams strip. New installs land in personal-secretary mode with no Teams sidebar entry, no TeamWidget on the dashboard, no drafts inbox button in the header, no Teams mobile tab pill. The underlying team code stays on disk and can be re-enabled via the enableTeams() toggle in AuthContext (no UI surface for the toggle yet). Existing users whose tacite-team-enabled localStorage flag is already set continue to see teams as before. tacite-cos is the recommended home for new team workflows; the full code/data deletion is deferred to a follow-up release once the personal version has demand evidence.
  • Renamed signInForTeams → signInWithGoogle — The function and the corresponding shell props (onSignInForTeams → onSignInWithGoogle) were misnamed: this is the unconditional OAuth entry for personal Google Calendar and Supabase task/project sync, not a team-specific call. Renaming preserves the same behavior under a name that matches reality.

v0.16.1

Security

  • Hardened Electron packaging and secret handling (#139) — Renderer no longer receives process.env.API_KEY / GOOGLE_CLIENT_ID; PUBLIC_GOOGLE_CLIENT_ID is centralized with no import cycle. Enabled the Electron fuse set (onlyLoadAppFromAsar, embedded ASAR integrity, cookie encryption, Node CLI/inspect off). Added verify-electron-package.cjs, a secret-scan that gates the packaged app against future leaks, and the website deploy script now fails loud and chmod 600s .env.

Fixed

  • Catch-up local date keys (#139) — todayKey() now resolves in local time instead of UTC, fixing day-boundary mismatches in the Catch-Up flow.
  • Build no longer trips on a locked Windows app.asar output path.

Changed

  • Agent activity tracking — Added the Tacite MCP server config, the Electron release agent skill, and a gstack skill guard hook for in-app agent session tracking.

Tests

  • De-time-bombed the voiceAnchorService fixtures (hardcoded dates aged past the 30-day anchor cap) and the fkCascadeMigration schema-head assertion (now derived from the migration registry), and excluded .worktrees/** from vitest discovery so stale local worktree copies stop polluting the suite.

v0.14.1

Changed

  • Marketing site repositioning for YC review — Rewrote the landing page to lead with the AI-chief-of-staff value proposition and the hard-money frame ("saving you ,000 per year"). Killed all "local-first / no surveillance / Trusted by 3 consulting teams" copy from the customer-facing surface, including SEO meta, OpenGraph, Twitter cards, structured data, and noscript fallback.
  • Customer proof block — Replaced the abstract three-item proof block with four named-customer testimonials carrying speakers and roles: Hejia Geng (Founder, Science Intelligence) as the hero quote with logo, plus Stephanie Badr (CEO, EPE Energy Consulting), Zesen Huang (Head of Workgroup, ESM-Bench), and Ian B. (UT McCombs Operations) as the side-three.
  • Loved-by logo strip — New CustomerLogoStrip component renders four customer logos under the hero CTA, with the Science Intelligence logo linking out to scienceintelligence.org. Per-customer logo darkening flag (logoNeedsDarken) handles white-on-transparent assets without modifying the file.
  • FAQ rewrite — Six pilot-stage questions a YC partner or real prospect would ask (differentiation vs Notion AI / Linear / Slack standup bots; what week-1 looks like; sensitive-client handling; install footprint; non-fit teams; post-signup process). Old generic placeholders removed.
  • Top-nav and footer brand — Dropped the <img> and standardized on the tacite.ai wordmark for a no-asset, always-visible header.

Fixed

  • Test invariants — tacite-content.test.ts updated to match the new content shape (hero subtitle, four-customer logo strip, four-quote proof block with team/speaker/shape/quote fields, customer-strip/proof drift guard).

Added

  • Team-agent live ask path — End-to-end live askAboutTeammate flow: schema foundation, scoped retrieval, narrative generator, two-lane relay dispatch with cancel propagation, pre-generation guardrails, and a drafts inbox UI backed by a preload bridge. Flag flipped to live-first.
  • Team-memo — Team-scoped memo layer (OpenViking-informed) for shared narrative state.
  • Teams page simplification — Single-stream layout replaces the Overview/People split. New presentational components (TeamAlignmentStream glue, derivePulseLine util, four new cards), listAskThread IPC + renderer wrapper for per-teammate threads, jargon rewrite, TeamSwitcherDropdown a11y improvements.
  • team-sim --live and --live --self — Live mode drives the real team-agent path; --self enables ask-yourself smoke testing.
  • TVL demo route — /tvl route for the slide 8 capture-loop demo on the website, with screen-recording-friendly scaling.
  • Test pinning pass (313 new test files) — Auto-improve invariant pinning across services, hooks, components, and electron helpers (privacy gates, parsing/extraction helpers, state machines, retention windows, FK rollbacks, capsule aggregators, and more).

Changed

  • TacitCat grounding — Chat is now grounded so it stops hallucinating file/folder activity.
  • AgentSessionGuard — Pinned IDLE/ACTIVE state machine invariants.
  • proactiveEngine — Pinned constant invariants.
  • teamAgentAdapter — Pinned sharing-level privacy gates.

Fixed

  • team-query privacy leak — Closed leak on the require_approval / show_draft path.
  • team-agent empty-output handling — Empty LLM output now treated as generation_failed instead of silently passing.
  • team-agent electron-vite bundle — Switched to static imports so the live ask path bundles correctly.
  • SettingsPanel — Use template literal for the retention-days helper text.
  • 4-agent branch review fixes — Six issues surfaced by the review pipeline.

Removed

  • components/LandingPage.test.tsx — obsolete; the form it tested moved to a standalone page on main (see 0.13.0 early-access work).

v0.13.1

Changed

  • Early access firework celebration — On successful form submission, the qualification form is replaced with a full-width firework animation and bold "You're in." confirmation, instead of a small inline text message.

v0.13.0

Added

  • Early access email-only CTA — Replaced the full qualification form with a streamlined email-only early access flow, backed by a Supabase edge function that sends confirmation emails via Resend.
  • Early access confirmation email — Automated welcome email sent on signup with personalized team context and direct reply-to support.
  • Open-source RAG integration plan — Design plan for team memory layer (OpenViking-inspired static memory).

Changed

  • Tacite.AI branding — Updated email sender name, subject line, and sign-off from "Tacite" to "Tacite.AI" across early access emails.
  • Prominent form confirmation — On successful early access submission, the form is now replaced with a large centered success state (checkmark icon, heading, bolded email) instead of a small inline text message.
  • Early access form polish — Added required asterisks to form fields; explicit contact methodology in email HTML.
  • CI deploy workflow — Website now deploys on every push to main (removed path filter).

Fixed

  • Auto-update 404 error resolved by aligning NSIS artifact name with R2 upload path.
  • Header icons no longer overlap page content (switched from absolute to flow layout).
  • Supabase early access trigger fixed to use net.http_post instead of extensions.http_post.

v0.12.0

Added

  • Teams page redesign — Merged 3-tab layout (Overview/People/Knowledge) into 2 tabs (Overview/People). Knowledge features migrated into the People tab. Search merged into People tab.
  • Morning Brief overhaul — Redesigned with expandable sections, example brief preview, and new CTAs (Share Update, Find Time). Brief now clears immediately on team switch instead of showing stale data.
  • Integrations page — New nav item and scaffold page with Google Calendar, Google Drive, and Slack connection cards. Gmail, GitHub, and Notion shown as coming soon.
  • team-sim --deep command — New deep pipeline trace command added to the existing team-sim CLI. Follows capsule data through every enrichment stage with structured output.
  • Background capsule enrichment — processPendingEnrichments() retries pending/failed capsule enrichments on a background timer (up to 3 attempts). Pre-loads commit messages and linked tasks at capsule creation time so the initial payload is never empty.
  • Git log fallback — When activity_annotations is empty, capsule enrichment now queries git directly from known repo roots (git_repo_roots table) to recover commit messages.
  • IDE-aware path resolution — Improved path resolution that detects IDE-open files before falling back to PowerShell/UIA on Windows. Includes deep pipeline diagnostic (--deep command).
  • teamQueryFormatting service — Extracted formatting logic from teamQueryService.ts into a dedicated teamQueryFormatting.ts service with 426 tests.

Changed

  • TeamSettingsModal — Expanded with two modes (settings and presence/trust). Bandwidth, trust level, relay status, and auto-respond controls moved here from YourTeamPresenceCard.
  • Team access gate — Simplified: presence of shareableWorkContext.threadTitle is now the trust gate (it was already trust-gated at enrichment time). Removed redundant isTrustedForSharing call.
  • Capsule enrichment logging — Gemini fallback errors now log a warning with the error message instead of silently swallowing the exception.
  • Enrichment agent denylist — Hardened file read denylist and GitHub API auth in readFile.ts and fetchPr.ts.
  • Electron version pinned to 41.1.0 (removed caret) for reproducible builds.
  • chalk moved to correct sort position in devDependencies.

Fixed

  • Morning brief no longer shows previous team's data when switching teams — state clears immediately.
  • activity_events table missing project_id column — added to base schema and legacy migration so existing databases are healed on next startup.
  • onOpenSchedule prop now correctly wired through to MorningBriefBanner's Find Time button.
  • Empty right column removed; TeamPulsePanel height fixed on the teams page.
  • Role view cache poisoning, requeue loops, and invalid date params in capsule enrichment.
  • Enrichment agent file read denylist gaps and GitHub API auth failures.

Removed

  • ChiefOfStaffPanel component deleted (superseded by TeamAlignmentPanel).
  • YourTeamPresenceCard component deleted (controls moved to TeamSettingsModal).
  • TeamKnowledgeTab component deleted (content merged into TeamPeopleTab).

v0.11.0

Added

  • Task suggestions are now powered by a dedicated useTaskSuggestions hook that streams AI-generated suggestions alongside related files from your RAG index. Suggestions load in the background without blocking the UI.
  • Catch-up suggestion logic extracted into pure helper functions (extractCatchUpSuggestions, rankSuggestions), making the CatchUp flow testable and reusable without rendering the modal.

Changed

  • Product renamed from Atomize to Tacite across the entire codebase — UI labels, deep-link schemes (tacite://), storage keys, MCP server names, email addresses, and documentation. Existing data is automatically migrated on first launch; old atomize-* localStorage keys are cleaned up on write.
  • MCP bridge binary renamed to tacite-mcp-bridge.cjs. Agent auto-setup now writes tacite MCP server entries. Old atomize entries are cleaned up on uninstall. The bridge continues to accept both tacite_* and atomize_* tool names for backward compatibility.
  • MCP config (.mcp.json) updated to reference the renamed bridge file and server key.
  • AGENT_MAP.md updated to reflect the new name and routing conventions.

Removed

  • Focus Mode (NowMode) has been removed. The dedicated NowMode component, its CSS, and all route references are gone. The feature was underused and added UI surface area that conflicted with the simplified scheduling model.

v0.10.0

Added

  • Context engine is now on by default. When Tacite has enough activity signal, team capsules are automatically enriched with your active work context — no configuration required. An emergency kill switch is available in Settings → Data → Diagnostics if you experience latency issues.
  • Team capsule freshness is now visible when you ask about a teammate's progress. The response card shows exactly how old the underlying work snapshot is (e.g. "2h 14m ago") with color coding: green under 2 hours, amber up to 8 hours, orange beyond 8 hours, gray when no capsule exists yet.
  • Team Pulse now uses real signal states (live, snapshot, no update) instead of synthetic workload percentages. Teammates with no recent activity show a neutral state rather than misleading green availability dots.

Changed

  • Capsule sync is no longer triggered on every 30-second team poll or realtime channel update. A dedicated 4-hour background cadence handles routine syncs, while user-initiated actions (opening a team, asking for progress) still force an immediate sync.
  • The team query service no longer contains a dormant helper that read activity data from Supabase. Activity data is local-only; that path was a privacy risk even when unused.
  • The "getting started" empty state for Team Overview now shows an honest warming-up message instead of a simulated team view.

Fixed

  • Garbled "Generating鈥?" text in the Team Pulse standup button replaced with "Generating..."

v0.9.2

Fixed

  • Team onboarding "Your First Day" card no longer reappears after dismissal on app restart. The dismissFirstDay function now persists the dismissal to the database before updating local state, ensuring the dismissed state survives reloads.
  • Analytics: team_first_day_dismissed event is now tracked correctly. The event type was missing from the analytics allowlist, causing it to be silently dropped.
  • Analytics: dismissal events are no longer logged when persistence fails — only emitted when the database write succeeds.

Changed

  • Added diagnostic logging to useActivationArc and the setActivationState IPC handler to surface persistence failures in the debug console, making future issues easier to diagnose.
  • setActivationState IPC handler now runs a verification query after each write and logs the result for troubleshooting.

v0.9.1

Fixed

  • Team capsule sync no longer crashes with Buffer is not defined in the browser renderer. serializedByteLength now uses TextEncoder (browser-native) with a Node.js Buffer fallback for the Electron main process.
  • TeamProvider is now mounted at the AppShell level, ensuring team context is always available to components inside the app shell regardless of data loading state.

v0.9.0

Added

  • Memory import: users can now copy a standardized extraction prompt into any AI assistant (ChatGPT, Gemini, Claude, or any other), paste the structured response back, and Tacite stores it as verified user context. Import button is now the primary CTA on the onboarding Personalize screen.
  • CAT and TUS now receive the full imported memory summary (up to 5000 chars) in every conversation — previously truncated to 500 chars.

Fixed

  • Imported memory data (imported-memory-data key) was silently rejected by the IPC allowlist and never persisted. Now correctly stored.
  • tacit-user-description character limit raised from 400 to 5000 to accommodate full AI memory exports.
  • set-tus-setting IPC handler now validates the value is a string and caps imported-memory-data blobs at 50k chars to prevent SQLite bloat.
  • Modal state reset now happens before close to avoid React state updates on unmounted components.
  • aiBotContext truncation test strengthened to assert the 5000-char boundary is present, not just absent at 5001.

Changed

  • Memory import UI redesigned from a source-picker (ChatGPT/Gemini/Claude/Manual tabs) to a unified 2-step flow: copy prompt → paste response. Matches Gemini's import pattern.
  • Import CTA promoted to primary button on Personalize screen; manual description textarea demoted below an "or describe yourself manually" divider.