Skip to content

Foxl v0.2.27

Choose a tag to compare

@foxl-bot foxl-bot released this 10 May 02:38
· 4 commits to main since this release

Integrations / Skills / Tools: scoped roles + sidebar reorder

  • Sidebar reshuffled to Integrations → Skills → Tools → Schedules. Agents stays at the top of the Extend group; everything else reorders so the flow reads outward from "connect me to a service" (Integrations), to "what the agent can do" (Skills / Tools), to "when it runs" (Schedules).
  • Integrations is now third-party only. Integrations used to list every skill with requires metadata, which swept in local document processors (pdf / pptx / xlsx / docx), coding helpers (codex-cli / claude-code / gemini / coding-agent / electron / skill-creator), and developer ergonomics (browser-tool / exec-tool / git-tool / code-search-tool / web-fetch-tool / research-assistant / autoresearch / tmux / video-frames / sherpa-onnx-tts / healthcheck). None of those reach outside the machine, so they don't belong on a "connect Foxl to another service" page. IntegrationsPage now uses an explicit allowlist in SKILL_CATEGORY — OAuth providers (Microsoft 365, Slack) plus SaaS-shaped skills (notion, obsidian, github, gws, weather, outlook, outlook-web, quip, himalaya, spotify, spotify-player, sonos, voice-call). Categories reduced to Featured / Productivity / Communication / Media & Audio / Automation; the "Dev Tools" and "Other" sections are gone.
  • Skills page remains the full list. Enable state is the same bit across both pages (POST /api/skills/:id/enable + /disable), so toggling a skill on from Integrations shows up on Skills and vice versa. Skills still presents the raw MD contents and the richer per-skill configuration; Integrations is intentionally the simpler, opinionated face of that same state.
  • git removed as a built-in tool. The dedicated git tool (subcommand API for status/diff/log/branch/checkout/commit/push/pull/add/stash) duplicated what the agent already does through exec — piping + custom flags all work better from exec anyway. Dropped from tool-profiles.ts (standard and full profiles) and from SKILL_PROVIDED_TOOLS in registry.ts and skill-tools.ts. exec already covers git operations; the agent still knows about git through skill instructions and the exec approval path for push/commit.

Integrations page: unified connect modal + skill cleanup

  • Hero carousel now rotates through skills, not just OAuth. The rotating hero at the top of the Integrations page was gated on hero.kind === 'oauth', so once the carousel rolled past Microsoft 365 and Slack it hid itself entirely for the skill items (position 3 and 4). Every Item now carries a gradient and samplePrompt, with skill-specific hero decoration (SKILL_HERO map for github/notion/obsidian/gws/spotify/sonos/weather/himalaya/outlook/quip/trello) and a neutral fallback for the rest. Hero renders for all item kinds.
  • M365 and Slack go through the same Codex-style install modal. Clicking Connect on an OAuth row used to kick straight to the browser; now it opens OAuthConnectDialog (shares the CodexInstallDialog shell used by skill credentials) with the provider icon + Foxl icon at the top, permission bullets (Mail.ReadWrite / chat:write / etc.), and the workspace subdomain input for Slack. The primary button says "Continue to Microsoft 365" / "Continue to Slack" and only then launches the OAuth flow. Disconnect still one-clicks from the row.
  • Channels pane: no more extra "+" on connected channels. ChannelRow rendered the Plus button unconditionally even when an instance was already configured, so connected channels showed Stop / Edit / Remove and a redundant "+". Plus is now gated to adapters with zero instances. Adding another instance of the same adapter is a deliberate future feature, not a sneak-in default.
  • Channel icons restored. bridgeManager.listAvailableChannels() / getChannelsByCategory() never populated an icon field, so every channel row was rendering <img src="undefined"> and falling back to two-letter initials. Both methods now emit icon: "/channel-icons/<type>.svg" directly from the registry, matching the static assets in apps/web/public/channel-icons/ (Telegram, Discord, Slack, Matrix, Signal, WhatsApp, Teams, etc.).
  • Skill library trimmed ~60%. Deleted 32 rarely-used skills from the local skills dir (1password, apple-notes/notes-native/photos/reminders, bear-notes, bird, blogwatcher, blucli, camsnap, code-review, drawio, eightctl, food-order, gifgrep, goplaces, imsg, kakaotalk, kiro-send-tool, local-places, mole, oracle, peekaboo, sag, songsee, things-mac, wacli, openhue, whisper, whisper-api; plus discord and slack skill folders — those duplicated the native Channel adapters). The ~21 document/productivity skills that survive ship enabled: true by default (browser-tool, code-search-tool, exec-tool, git-tool, gws, github, morning-briefing, notion, obsidian, research-assistant, session-logs, skill-creator, web-fetch-tool, weather, outlook, outlook-web, pdf, pptx, xlsx, docx, quip). The rest default to enabled: false so they stop bloating the prompt token count until a user flips them on.
  • Skill install modal always shows a primary button. Before, the Connect <Service> button at the bottom of the skill secrets dialog only rendered when the skill had env vars AND at least one input was typed. Skills with no required env vars (just CLI bins) had no CTA at all, and skills with stored credentials showed nothing beyond the pre-filled inputs. Modal now always renders the button with three label states: "Enable " (no env vars — one click to acknowledge), "Connect " (user filled something), or " is connected" (already stored, nothing typed).
  • Integrations API surfaces skills with array-form requires. /api/integrations/skills used to only show skills whose requires was an object literal { env, bins }. Skills like gws / himalaya / quip declare requires: [binname] (array form) and were silently skipped. Server now normalizes both shapes, treating UPPER_SNAKE_CASE entries as env vars and the rest as CLI bins, while still skipping integration:* entries (those are OAuth-gated by shouldIncludeSkill).

Tray menu streamlined (Codex-style)

  • Menu bar / system tray dropdown trimmed to essentials. Clicking the Foxl tray icon now shows a compact Codex-style menu: the three most recent chats under a "Recent" header (each jumps straight to the thread via the navigate IPC with conversationId), a "Usage" block pulled from /api/usage?range=7d (total tokens + spent USD, 7-day window), then New Chat / Open Foxl / Quit Foxl. Removed the noisy mid-menu toggles (Stop Agent, Dark Mode, Always on Top, Open Workspace, Reload) - they lived in the tray for years and nobody used them since the same actions exist in-app. Menu rebuilds lazily on mouse-enter / right-click so recents + usage stay fresh without polling. Applied in both main.js (dev) and main-production.js.

Pricing and billing UI restored

  • Pricing section back on foxl.ai. Landing page pricing, nav links (desktop + mobile), and Terms/Privacy/Refund legal copy all restored from the 2026-04 "billing disabled" freeze. BILLING_ENABLED flags removed from AccountPage and ChatPage, so Subscription / Credit Top-up cards and the upgrade-on-credits-exhausted alert render again. Discord bot's "pricing is currently disabled" system prompt reverted. Credits doc page back in the docs nav, EULA dialog + License button back in Settings -> About.
  • Copy cleanup across landing, blog, and app. Removed "open" / "open project" / "open-source" framing (Foxl is proprietary; only the brand voice was drifting). "Free" is preserved wherever honest ("Free to start" / "Free to download"). Hero subtitle condensed to three short lines. About and Footer tightened. Dead Features.tsx component deleted. Model-selector tooltip "Open source model" -> "Local model". SettingsPage sample model line refreshed from Opus 4.6 -> Opus 4.7 to match current default. Hero demo terminal art updated from opus-4-6-v1[1m] -> opus-4-7-v1[1m].

Credit usage in sidebar user popover

  • Credit progress in the avatar popover. Clicking the user avatar in the sidebar footer now shows a compact credit breakdown: tier badge (Pro/Ultra) next to the name, a progress bar showing NN% used, and an "Upgrade" link for free-tier users that jumps to the Account page. Bar turns amber above 80% used and red above 95%. Reads user.credits / user.tier from useAuth() so it stays in sync with the Account page without a separate fetch.
  • Popover label matches the bar direction. First pass shipped remaining / total text (e.g. 1032 / 5100) next to a bar that filled left-to-right as used% - the two were in direct conflict. Swapped to NN% used, and flipped the color thresholds to match (80% amber / 95% red instead of 20% remaining / 5% remaining). The full used / remaining / monthly total breakdown stays on the Account page where there is room for three stats side by side.

Docs site refreshed for v0.2.27

  • MDX sources updated for current models. models.mdx adaptive-thinking section, faq.mdx "what models" answer, providers.mdx Anthropic setup, conversations.mdx extended-thinking note, web-app.mdx feature bullet, and index.mdx feature card all now mention Opus 4.7 alongside 4.6 / Sonnet 4.6 instead of listing 4.6 as the flagship. Stale tool/skill counts ("21 built-in tools", "69 installable skills", "73 skills") replaced with "20 built-in tools" and "skill library".
  • credits.mdx priced for Opus 4.7. Per-token and per-turn pricing tables now include Opus 4.7 rows (15/75/1.5 credits per 1M tokens, matching the relay meter). Features column no longer advertises "73 skills" - now just "skill library".
  • llms.txt / llms-full.txt regenerated from the updated MDX so AI crawlers and /llms.txt consumers see the current product state. docs.foxl.ai redeployed.

Logos render at full opacity everywhere

  • No more dimmed brand marks. Removed opacity-70 from the Foxl word-logo in Settings > About and in the empty-chat "Good evening" greeting, opacity-60 from the favicon shown above the Hero demo's greeting block (both desktop and mobile mockups), opacity-50 from the macOS/Windows/iOS/Android platform SVGs under the landing Hero download buttons. The channel-logo marquee no longer uses opacity-25 grayscale brightness-[0.6] - the 30 channel icons now render at full color, with only the subtle scale-110 hover left. Every other provider/channel icon across Settings, Channels, and Integrations was already rendering at 100% opacity and is unchanged.

SEO overhaul for foxl.ai

  • index.html rewritten for crawlers. Title, description, and OG/Twitter meta all reflect the current product (Opus 4.7, Windows support, Pro/Ultra plans). Removed stale "Free, Open" framing, "73 skills" / "Ollama" specifics, and "no subscriptions" claim that contradicted the restored Pro/Ultra tiers. Added keywords and googlebot meta, og:image:alt, twitter:site.
  • Structured data expanded. SoftwareApplication now lists three Offer entries (Free/Pro/Ultra), bumped softwareVersion 0.2.19 -> 0.2.27, refreshed featureList. Organization entry upgraded to an ImageObject logo with email. FAQPage mainEntity matches the current FAQ copy (Opus 4.7, Pro/Ultra, no "open project"). WebSite gets a SearchAction pointing at /blog?q=.
  • Fallback HTML content refreshed. The no-JS fallback body that crawlers see (SPA content doesn't render without JS) now advertises Windows download, Pricing section, current FAQ, and accurate About copy. Added aria-label to nav elements.
  • Blog meta refreshed. worker.js /blog/introducing-foxl and /blog/73-skills descriptions no longer promise "no subscriptions" or "73 skills and counting" (counts change; framing no longer matches).