tensorpmAI-powered project management - a Notion and Jira alternative with local-first architecture. Manage projects, track action items, and coordinate teams via MCP tools or A2A agent communication. Signed & notarized. https://tensorpm.com
Install via ClawdBot CLI:
clawdbot install Neo552/tensorpmAI-Powered Project Management - Intelligently manage projects, track action items, and coordinate teams with context-driven prioritization.
Local-first, no account required. Full app, free forever — use your own API keys (OpenAI, Claude, Gemini, Mistral) or local models (Ollama, vLLM, LLM studio). Optional: Account with cloud sync enables E2E encrypted collaboration across devices and teams.
Interact with TensorPM via MCP tools or A2A agent communication.
Signed & Notarized: macOS builds are code-signed and notarized by Apple. Windows builds are signed via Azure Trusted Signing.
brew tap neo552/tensorpm
brew install --cask tensorpm
curl -fsSL https://tensorpm.com/download/linux -o ~/TensorPM.AppImage
chmod +x ~/TensorPM.AppImage
Release Notes:
Alternative:
TensorPM includes a built-in MCP server that runs locally. Install from within the app:
Requirement: TensorPM must be running for MCP tools to work.
Use the set_api_key tool to configure AI providers directly from your AI client:
set_api_key
provider: "openai" # openai, anthropic, google, mistral
api_key: "sk-..."
Keys are securely stored in TensorPM. Write-only - keys cannot be read back.
TensorPM exposes a local A2A agent endpoint on port 37850.
No authentication required — A2A runs on localhost only, all local requests are trusted.
Step 1: Get Root Agent Card
curl http://localhost:37850/.well-known/agent.json
Returns the root agent card with links to all project agents.
Step 2: List Projects
curl http://localhost:37850/projects
Returns:
[
{
"id": "project-uuid",
"name": "My Project",
"agentUrl": "http://localhost:37850/projects/project-uuid/a2a",
"agentCardUrl": "http://localhost:37850/projects/project-uuid/.well-known/agent.json"
}
]
Step 3: Get Project Agent Card
curl http://localhost:37850/projects/{projectId}/.well-known/agent.json
Returns the A2A agent card for a specific project with capabilities and supported methods.
Send messages to a project's AI agent using JSON-RPC:
curl -X POST http://localhost:37850/projects/{projectId}/a2a \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "message/send",
"id": "1",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "List high-priority items"}]
}
}
}'
Supported JSON-RPC methods:
| Method | Description |
|--------|-------------|
| message/send | Send a message and get a blocking response |
| message/stream | Send a message and stream the response via SSE |
| tasks/get | Retrieve a task by ID with full state history |
| tasks/list | List tasks for the project with optional filters |
| tasks/cancel | Cancel a running task |
| tasks/resubscribe | Resume streaming updates for a running task |
Continue a conversation by passing contextId:
{
"jsonrpc": "2.0",
"method": "message/send",
"id": "2",
"params": {
"contextId": "context-uuid-from-previous-response",
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "Tell me more about the first item"}]
}
}
}
Tasks track the lifecycle of message requests. States: submitted, working, input-required, completed, canceled, failed.
{
"jsonrpc": "2.0",
"method": "tasks/get",
"id": "1",
"params": {"id": "task-uuid", "historyLength": 10}
}
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /.well-known/agent.json | Root agent card |
| GET | /projects | List all projects with agent URLs |
| POST | /projects | Create a new project |
| GET | /projects/:id | Get complete project data |
| GET | /projects/:id/.well-known/agent.json | Project agent card |
| GET | /projects/:id/contexts | List conversations |
| GET | /projects/:id/contexts/:ctxId/messages | Get message history |
| GET | /projects/:id/action-items | List action items (supports filters) |
| POST | /projects/:id/action-items | Create action items |
| PATCH | /projects/:id/action-items/:itemId | Update an action item |
| POST | /projects/:id/a2a | JSON-RPC messaging |
| GET | /workspaces | List all workspaces with active workspace ID |
| POST | /workspaces/:id/activate | Switch to a different workspace |
Optional Auth: Set A2A_HTTP_AUTH_TOKEN env var before starting TensorPM to enable token validation.
| Tool | Description |
|------|-------------|
| list_projects | List all projects with names and IDs |
| create_project | Create a new project (basic, fromPrompt, or fromFile mode) |
| get_project | Get complete project data (read-only) |
| list_action_items | Query and filter action items |
| submit_action_items | Create new action items |
| update_action_items | Update existing action items |
| propose_updates | Submit project updates for human review |
| set_api_key | Set AI provider API key (openai, anthropic, google, mistral) |
| list_workspaces | List all workspaces (local + cloud) with active workspace ID |
| set_active_workspace | Switch to a different workspace |
Note: MCP tools provide direct access to action items. Core project context (profile, budget, people, categories) can only be modified by the TensorPM project manager agent — use A2A message/send to request changes.
Tool parameters: Use the MCP tool schemas for detailed parameter information.
| Field | Type | Description |
|-------|------|-------------|
| id | string | Unique identifier (auto-generated on create) |
| displayId | number | Human-readable sequential ID (e.g., 1, 2, 3) |
| text | string | Short title/summary |
| description | string | Detailed description |
| status | string | open, inProgress, completed, blocked |
| categoryId | string | Category UUID |
| assignedPeople | string[] | Array of Person UUIDs or names |
| dueDate | string | ISO date (YYYY-MM-DD) - required, cannot be cleared |
| startDate | string | ISO date (YYYY-MM-DD), or null to clear |
| urgency | string | very low, low, medium, high, overdue |
| impact | string | minimal, low, medium, high, critical |
| complexity | string | very simple, simple, moderate, complex, very complex |
| priority | number | Priority score (1-100) |
| planEffort | object | {value: number, unit: "hours" \| "days"}, or null to clear |
| planBudget | object | {amount: number, currency?: string}, or null to clear |
| manualEffort | object | Actual effort: {value: number, unit: "hours" \| "days"}, or null to clear |
| isBudget | object | Actual budget spent: {amount: number, currency?: string}, or null to clear |
| blockReason | string | Reason when status is blocked |
| dependencies | array | Task dependencies (sourceId + type) |
Action items support dependencies for sequential task execution. Dependencies define which tasks must complete (or start) before others can begin.
| Type | Name | Meaning |
|------|------|---------|
| FS | Finish-to-Start | Task B cannot start until Task A finishes (most common) |
| SS | Start-to-Start | Task B cannot start until Task A starts |
| FF | Finish-to-Finish | Task B cannot finish until Task A finishes |
| SF | Start-to-Finish | Task B cannot finish until Task A starts (rare) |
When creating action items via submit_action_items, specify dependencies as:
{
"actionItems": [
{
"text": "Task A - Research",
"complexity": "simple"
},
{
"text": "Task B - Implementation",
"complexity": "moderate",
"dependencies": [
{"sourceId": "<id-of-task-A>", "type": "FS"}
]
}
]
}
Note: sourceId must reference an existing action item already in the project. In MCP tools, targetId is set automatically to the current item, so you only provide sourceId and type.
Use update_action_items to modify dependencies. Setting dependencies replaces all existing dependencies:
{
"updates": [
{
"id": "<action-item-id>",
"dependencies": [
{"sourceId": "<other-item-id>", "type": "FS"},
{"sourceId": "<another-item-id>", "type": "SS"}
]
}
]
}
Set to empty array [] to clear all dependencies.
Basic (instant):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "New Project", "description": "Optional description"}'
From prompt (AI-generated, async):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "Mobile App", "mode": "fromPrompt", "prompt": "Build a habit tracker with streaks"}'
From file (AI-generated from document, async):
curl -X POST http://localhost:37850/projects \
-H "Content-Type: application/json" \
-d '{"name": "From Brief", "mode": "fromFile", "documentPath": "/path/to/brief.pdf"}'
Async modes return status: "generating". AI populates goals, scope, milestones, risks in background.
curl http://localhost:37850/projects/{projectId}
curl "http://localhost:37850/projects/{projectId}/action-items?status=open&limit=10"
curl -X POST http://localhost:37850/projects/{projectId}/action-items \
-H "Content-Type: application/json" \
-d '{
"actionItems": [
{"text": "New task", "urgency": "high", "complexity": "moderate"}
]
}'
curl -X PATCH http://localhost:37850/projects/{projectId}/action-items/{itemId} \
-H "Content-Type: application/json" \
-d '{"status": "completed"}'
curl http://localhost:37850/workspaces
Returns all accessible workspaces (local and cloud) with project counts and the active workspace ID.
curl -X POST http://localhost:37850/workspaces/{workspaceId}/activate
Switches to the specified workspace. Closes all open projects.
list_projects first to get available project IDsget_project to retrieve category and person IDs for filteringpropose_updates submissions require human approval before being appliedlocalhost:37850 — no auth required (localhost only)set_api_key) or in TensorPM SettingsGenerated Mar 1, 2026
A distributed software team uses TensorPM to manage sprints, track bugs, and prioritize features via AI-driven insights. Developers interact through MCP tools in their IDEs, while project managers use A2A to automate status reports and action item assignments, reducing manual overhead.
A marketing agency employs TensorPM to plan and execute multi-channel campaigns, with AI suggesting optimal timelines and resource allocation. Team members collaborate on tasks via local-first sync, using A2A to generate performance summaries and adjust strategies in real-time.
A university research group utilizes TensorPM to organize experiments, literature reviews, and paper drafts, leveraging AI for context-driven prioritization. Researchers access the tool offline and use A2A to query project data and automate progress updates without cloud dependencies.
A solo freelancer manages multiple client projects with TensorPM, using AI to balance deadlines and workload. They integrate via MCP with their communication tools to log hours and update tasks, while A2A helps generate invoices and client reports automatically.
A non-profit organization coordinates volunteer-driven events with TensorPM, tracking action items and budgets through AI-assisted scheduling. Team leads use A2A to send reminders and gather feedback, ensuring efficient collaboration without account requirements.
Offer the core app for free with local-first functionality, monetizing through optional paid subscriptions for E2E encrypted cloud sync, team collaboration features, and advanced analytics. This attracts individual users while upselling to teams needing cross-device access.
Provide enterprise versions with enhanced security, custom integrations, and dedicated support for large organizations. Revenue comes from annual licenses, training, and consulting services, leveraging the signed and notarized builds for compliance needs.
Generate revenue by partnering with AI providers to offer curated model integrations within TensorPM, taking a commission on API usage or premium model access. This capitalizes on the app's flexibility with multiple AI backends like OpenAI and local models.
💬 Integration Tip
Ensure TensorPM is running before using MCP tools, and for A2A, start with the root agent discovery to list projects before sending messages to specific agents.
Manage Trello boards, lists, and cards via the Trello REST API.
Sync and query CalDAV calendars (iCloud, Google, Fastmail, Nextcloud, etc.) using vdirsyncer + khal. Works on Linux.
Manage tasks and projects in Todoist. Use when user asks about tasks, to-dos, reminders, or productivity.
Master OpenClaw's timing systems. Use for scheduling reliable reminders, setting up periodic maintenance (janitor jobs), and understanding when to use Cron v...
Calendar management and scheduling. Create events, manage meetings, and sync across calendar providers.
Kanban-style task management dashboard for AI assistants. Manage tasks via CLI or dashboard UI. Use when user mentions tasks, kanban, task board, mission con...