Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions extensions/fifteen-million-merits/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules

# Raycast specific files
raycast-env.d.ts
.raycast-swift-build
.swiftpm
compiled_raycast_swift
compiled_raycast_rust

# misc
.DS_Store
4 changes: 4 additions & 0 deletions extensions/fifteen-million-merits/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"printWidth": 120,
"singleQuote": false
}
11 changes: 11 additions & 0 deletions extensions/fifteen-million-merits/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Fifteen Million Merits Changelog

## [Initial Version] - {PR_MERGE_DATE}

### Features

- **AI Agent Session Tracking**: Monitor active sessions from popular AI agents.
- **Dynamic Focus Mode**: Triggers Raycast Focus mode when no AI agents are active.
- **Auto-Completion**: Automatically stops Focus mode once an AI agent session is initiated.
- **Menu Bar Integration**: Real-time counter display and quick controls in the macOS menu bar.
- **Universal Hooks**: One-click setup for Claude Code, Cursor, Opencode, and Codex CLI.
39 changes: 39 additions & 0 deletions extensions/fifteen-million-merits/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Fifteen Million Merits

Trigger Raycast Focus and block Social Media unless you have work currently running in AI agents. Inspired by a tweet from [@theo](https://x.com/theo/status/2006524110265106510).


## Features

- **AI Agent Session Tracking**: Monitor active sessions from popular AI agents.
- **Dynamic Focus Mode**: Triggers Raycast Focus mode when no AI agents are active.
- **Auto-Completion**: Automatically stops Focus mode once an AI agent session is initiated.
- **Menu Bar Integration**: Real-time counter display and quick controls in the macOS menu bar.
- **Universal Hooks**: One-click setup for Claude Code, Cursor, Opencode, and Codex CLI.

## How it Works

The extension manages a session counter:
- **Count = 0**: Raycast Focus mode starts (blocking distracting categories).
- **Count > 0**: Raycast Focus mode completes (deactivating blocks).

This logic ensures that if you are not actively using an AI agent, your environment remains distraction-free.

## AI Agent Integrations

The `Setup AI Agent Hooks` command configures the following agents:

1. **Claude Code**: Modifies `~/.claude/settings.json` to include `SessionStart` and `SessionEnd` hooks.
2. **Cursor**: Updates `~/.cursor/hooks.json` with `beforeSubmitPrompt` and `stop` hooks.
3. **Opencode**: Creates a plugin in `~/.config/opencode/plugin` to track sessions.
4. **Codex CLI**: Adds aliases to `.zshrc` and `.bashrc`.

## Configuration

Users can configure Focus settings in Raycast Preferences:
- **Focus Goal**: The title shown when Focus starts.
- **Focus Categories**: Comma-separated categories to block (e.g., `social,news`).

## Credits

Inspired by a tweet from [@theo](https://x.com/theo/status/2006524110265106510)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions extensions/fifteen-million-merits/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const { defineConfig } = require("eslint/config");
const raycastConfig = require("@raycast/eslint-config");

module.exports = defineConfig([
...raycastConfig,
]);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading