@knowsuchagency/fulcrum 3.5.2 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/bin/fulcrum.js +21 -9
- package/dist/assets/{index-BKNcsaFB.js → index-4zuAUI7u.js} +182 -182
- package/dist/index.html +1 -1
- package/drizzle/0061_task_recurrence.sql +3 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/server/index.js +137 -31
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Fulcrum doesn't replace your tools—it gives you leverage over them. You config
|
|
|
17
17
|
- **Claude Code Ecosystem** — Deep integration with Claude Code. Connect via messaging channels, manage tasks, deploy from one dashboard.
|
|
18
18
|
- **Proactive AI Concierge** — Your assistant monitors messages, stores important observations as memories, creates daily plans, and sends morning/evening briefings automatically.
|
|
19
19
|
- **Work From Anywhere** — Run Fulcrum on a remote server. Close your laptop, agents keep working.
|
|
20
|
-
- **Project Management** — Tasks with dependencies, due dates, labels, and attachments. Visual kanban boards.
|
|
20
|
+
- **Project Management** — Tasks with dependencies, due dates, recurrence, labels, and attachments. Visual kanban boards.
|
|
21
21
|
- **Production Deployment** — Docker Compose with automatic Traefik routing and Cloudflare DNS/tunnels.
|
|
22
22
|
- **Agent Memory** — Persistent knowledge store with full-text search. Agents remember across sessions.
|
|
23
23
|
- **MCP-First Architecture** — 60+ tools exposed via Model Context Protocol. Agents discover what they need.
|
|
@@ -42,7 +42,7 @@ Fulcrum's AI assistant doesn't just respond—it actively monitors and manages y
|
|
|
42
42
|
|
|
43
43
|
When messages arrive via Email, WhatsApp, Discord, Telegram, or Slack:
|
|
44
44
|
|
|
45
|
-
- **Actionable requests** (deadlines, meetings, tasks) →
|
|
45
|
+
- **Actionable requests** (deadlines, meetings, tasks) → Creates Fulcrum tasks and stores as memories with `actionable` tag
|
|
46
46
|
- **Casual conversations** → Responded to naturally, no tracking overhead
|
|
47
47
|
- **Spam/newsletters** → Silently ignored
|
|
48
48
|
|
|
@@ -120,7 +120,7 @@ claude plugin install fulcrum@fulcrum --scope user
|
|
|
120
120
|
|
|
121
121
|
### Kanban Board & AI Assistant
|
|
122
122
|
|
|
123
|
-
Track tasks from planning to done. The built-in AI assistant has full context of everything you're tracking—tasks, projects, apps—and can help with planning, documentation, or running MCP tools.
|
|
123
|
+
Track tasks from planning to done. Set up recurring tasks that auto-create the next occurrence when completed. The built-in AI assistant has full context of everything you're tracking—tasks, projects, apps—and can help with planning, documentation, or running MCP tools.
|
|
124
124
|
|
|
125
125
|

|
|
126
126
|
|
|
@@ -156,12 +156,13 @@ Create documents with live preview. Generate charts and visualizations. The assi
|
|
|
156
156
|
|
|
157
157
|
### Calendar Integration
|
|
158
158
|
|
|
159
|
-
Connect multiple calendar accounts so the AI assistant knows your schedule. Calendar has its own top-level page (`/calendar`, Cmd+7) with project and tag filters.
|
|
159
|
+
Connect multiple calendar accounts so the AI assistant knows your schedule. Calendar has its own top-level page (`/calendar`, Cmd+7) with month and week views, project and tag filters.
|
|
160
160
|
|
|
161
161
|
- **Google Calendar** — Direct Google API integration via OAuth2 (recommended)
|
|
162
162
|
- **Any CalDAV server** — Nextcloud, Radicale, Baikal, iCloud
|
|
163
163
|
- **Multiple accounts** — Add as many accounts as you need
|
|
164
164
|
- **Automatic sync** — Each account syncs independently on a configurable interval
|
|
165
|
+
- **Weekly view** — Google Calendar-style week view with time axis, overlapping event layout, and current time indicator
|
|
165
166
|
- **One-way event copying** — Copy events between calendars across accounts via configurable rules
|
|
166
167
|
- **Due date colors** — Red (overdue), orange (today), yellow (tomorrow) visual indicators
|
|
167
168
|
- **Assistant awareness** — The AI assistant uses your calendar context for planning and scheduling
|
|
@@ -245,7 +246,7 @@ Both plugins include an MCP server with 60+ tools:
|
|
|
245
246
|
|
|
246
247
|
| Category | Description |
|
|
247
248
|
|----------|-------------|
|
|
248
|
-
| **Tasks** | Create, update, move tasks; manage links, labels, attachments, due dates |
|
|
249
|
+
| **Tasks** | Create, update, move tasks; manage links, labels, attachments, due dates, recurrence |
|
|
249
250
|
| **Task Dependencies** | Define prerequisite tasks; visualize with dependency graph |
|
|
250
251
|
| **Projects** | Manage projects with tags, notes, and file attachments |
|
|
251
252
|
| **Repositories** | Add, configure, and link repositories to projects |
|
package/bin/fulcrum.js
CHANGED
|
@@ -44589,7 +44589,9 @@ function registerCreateTask(server, client) {
|
|
|
44589
44589
|
projectId: exports_external.optional(exports_external.string()).describe("Project ID to associate with"),
|
|
44590
44590
|
repositoryId: exports_external.optional(exports_external.string()).describe("Repository ID (alternative to repoPath)"),
|
|
44591
44591
|
tags: exports_external.optional(exports_external.array(exports_external.string())).describe("Tags to add to the task"),
|
|
44592
|
-
dueDate: exports_external.optional(exports_external.string()).describe("Due date in YYYY-MM-DD format")
|
|
44592
|
+
dueDate: exports_external.optional(exports_external.string()).describe("Due date in YYYY-MM-DD format"),
|
|
44593
|
+
recurrenceRule: exports_external.optional(exports_external.enum(["daily", "weekly", "biweekly", "monthly", "quarterly", "yearly"])).describe("Recurrence frequency - creates a new TO_DO task when completed"),
|
|
44594
|
+
recurrenceEndDate: exports_external.optional(exports_external.string()).describe("Stop recurring after this date (YYYY-MM-DD). Omit for no end date.")
|
|
44593
44595
|
}, async ({
|
|
44594
44596
|
title,
|
|
44595
44597
|
repoPath,
|
|
@@ -44600,7 +44602,9 @@ function registerCreateTask(server, client) {
|
|
|
44600
44602
|
projectId,
|
|
44601
44603
|
repositoryId,
|
|
44602
44604
|
tags,
|
|
44603
|
-
dueDate
|
|
44605
|
+
dueDate,
|
|
44606
|
+
recurrenceRule,
|
|
44607
|
+
recurrenceEndDate
|
|
44604
44608
|
}) => {
|
|
44605
44609
|
try {
|
|
44606
44610
|
const repoName = repoPath ? basename2(repoPath) : null;
|
|
@@ -44617,7 +44621,9 @@ function registerCreateTask(server, client) {
|
|
|
44617
44621
|
projectId: projectId ?? null,
|
|
44618
44622
|
repositoryId: repositoryId ?? null,
|
|
44619
44623
|
tags,
|
|
44620
|
-
dueDate: dueDate ?? null
|
|
44624
|
+
dueDate: dueDate ?? null,
|
|
44625
|
+
recurrenceRule: recurrenceRule ?? null,
|
|
44626
|
+
recurrenceEndDate: recurrenceEndDate ?? null
|
|
44621
44627
|
});
|
|
44622
44628
|
if (tags && tags.length > 0) {
|
|
44623
44629
|
const allTasks = await client.listTasks();
|
|
@@ -44641,17 +44647,23 @@ function registerCreateTask(server, client) {
|
|
|
44641
44647
|
});
|
|
44642
44648
|
}
|
|
44643
44649
|
function registerUpdateTask(server, client) {
|
|
44644
|
-
server.tool("update_task", "Update task metadata (title
|
|
44650
|
+
server.tool("update_task", "Update task metadata (title, description, recurrence)", {
|
|
44645
44651
|
id: exports_external.string().describe("Task ID"),
|
|
44646
44652
|
title: exports_external.optional(exports_external.string()).describe("New title"),
|
|
44647
|
-
description: exports_external.optional(exports_external.string()).describe("New description")
|
|
44648
|
-
|
|
44653
|
+
description: exports_external.optional(exports_external.string()).describe("New description"),
|
|
44654
|
+
recurrenceRule: exports_external.optional(exports_external.nullable(exports_external.enum(["daily", "weekly", "biweekly", "monthly", "quarterly", "yearly"]))).describe("Recurrence frequency, or null to remove"),
|
|
44655
|
+
recurrenceEndDate: exports_external.optional(exports_external.nullable(exports_external.string())).describe("Stop recurring after this date (YYYY-MM-DD), or null to remove")
|
|
44656
|
+
}, async ({ id, title, description, recurrenceRule, recurrenceEndDate }) => {
|
|
44649
44657
|
try {
|
|
44650
44658
|
const updates = {};
|
|
44651
44659
|
if (title !== undefined)
|
|
44652
44660
|
updates.title = title;
|
|
44653
44661
|
if (description !== undefined)
|
|
44654
44662
|
updates.description = description;
|
|
44663
|
+
if (recurrenceRule !== undefined)
|
|
44664
|
+
updates.recurrenceRule = recurrenceRule;
|
|
44665
|
+
if (recurrenceEndDate !== undefined)
|
|
44666
|
+
updates.recurrenceEndDate = recurrenceEndDate;
|
|
44655
44667
|
const task = await client.updateTask(id, updates);
|
|
44656
44668
|
return formatSuccess(task);
|
|
44657
44669
|
} catch (err) {
|
|
@@ -46421,7 +46433,7 @@ async function runMcpServer(urlOverride, portOverride) {
|
|
|
46421
46433
|
const client = new FulcrumClient(urlOverride, portOverride);
|
|
46422
46434
|
const server = new McpServer({
|
|
46423
46435
|
name: "fulcrum",
|
|
46424
|
-
version: "3.
|
|
46436
|
+
version: "3.6.0"
|
|
46425
46437
|
});
|
|
46426
46438
|
registerTools(server, client);
|
|
46427
46439
|
const transport = new StdioServerTransport;
|
|
@@ -48770,7 +48782,7 @@ var marketplace_default = `{
|
|
|
48770
48782
|
"name": "fulcrum",
|
|
48771
48783
|
"source": "./",
|
|
48772
48784
|
"description": "Task orchestration for Claude Code",
|
|
48773
|
-
"version": "3.
|
|
48785
|
+
"version": "3.6.0",
|
|
48774
48786
|
"skills": [
|
|
48775
48787
|
"./skills/fulcrum"
|
|
48776
48788
|
],
|
|
@@ -49974,7 +49986,7 @@ function compareVersions(v1, v2) {
|
|
|
49974
49986
|
var package_default = {
|
|
49975
49987
|
name: "@knowsuchagency/fulcrum",
|
|
49976
49988
|
private: true,
|
|
49977
|
-
version: "3.
|
|
49989
|
+
version: "3.6.0",
|
|
49978
49990
|
description: "Harness Attention. Orchestrate Agents. Ship.",
|
|
49979
49991
|
license: "PolyForm-Perimeter-1.0.0",
|
|
49980
49992
|
type: "module",
|