← Back to Skills
Productivity

tensorpm

neo552 By neo552 👁 6 views ▲ 0 votes

AI-powered project management - a Notion and Jira alternative

GitHub
---
name: tensorpm
description: "AI-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"
compatibility: Requires TensorPM desktop app to be running for MCP tools and A2A communication. Available on macOS, Windows, and Linux.
metadata:
  homepage: https://tensorpm.com
  author: tensorpm team
---

# TensorPM Skill

**AI-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.

## Download

### macOS (Homebrew)

```bash
brew tap neo552/tensorpm
brew install --cask tensorpm
```

### Linux (Terminal)

```bash
curl -fsSL https://tensorpm.com/download/linux -o ~/TensorPM.AppImage
chmod +x ~/TensorPM.AppImage
```

### Direct Downloads

- **Windows:** [TensorPM-Setup.exe](https://github.com/Neo552/TensorPM-Releases/releases/latest/download/TensorPM-Setup.exe)
- **macOS:** [TensorPM-macOS.dmg](https://github.com/Neo552/TensorPM-Releases/releases/latest/download/TensorPM-macOS.dmg)
- **Linux:** [TensorPM-Linux.AppImage](https://github.com/Neo552/TensorPM-Releases/releases/latest/download/TensorPM-Linux.AppImage)

**Release Notes:** <https://github.com/Neo552/TensorPM-Releases/releases/latest>

**Alternative:** <https://tensorpm.com>

## Setup

### MCP Integration (Automatic)

TensorPM includes a built-in MCP server that runs locally. Install from within the app:

1. Open TensorPM
2. Go to **Settings → Integrations**
3. Click **Install** for your AI client

**Requirement:** TensorPM must be running for MCP tools to work.

### Setting AI Provider Keys via MCP

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.

### A2A Configuration

TensorPM exposes a local A2A agent endpoint on port `37850`.

**No authentication required** — A2A runs on localhost only, all local requests are trusted.

### Agent Discovery

**Step 1: Get Root Agent Card**
```bash
curl http://localhost:37850/.well-known/agent.json
```

Returns the root agent card with links to all project agents.

**Step 2: List Projects**
```bash
curl http://localhost:37850/projects
```

Returns:
```json
[
  {
    "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**
```bash
curl http://localhost:37850/projects/{projectId}/.well-known/agent.json
```

Returns the A2A agent card for a specific project with capabilities and supported methods.

### Talking to a Project Agent

Send messages to a project's AI agent using JSON-RPC:

```bash
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`:
```json
{
  "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"}]
    }
  }
}
```

### Task Management

Tasks track the lifecycle of message requests. States: `submitted`, `working`, `input-required`, `completed`, `canceled`, `failed`.

```json
{
  "jsonrpc": "2.0",
  "method": "tasks/get",
  "id": "1",
  "params": {"id": "task-uuid", "historyLength": 10}
}
```

### A2A REST Endpoints

| 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.

## Available MCP Tools

| 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.

## Action Item Fields

| 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) |

## Dependencies

Action items support dependencies for sequential task execution. Dependencies define which tasks must complete (or start) before others can begin.

### Dependency Types

| 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) |

### Creating Dependencies

When creating action items via `submit_action_items`, specify dependencies as:

```json
{
  "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`.

### Updating Dependencies

Use `update_action_items` to modify dependencies. Setting `dependencies` replaces all existing dependencies:

```json
{
  "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.


## A2A REST API Examples

### Create a project via A2A

**Basic** (instant):
```bash
curl 

... (truncated)
productivity

Comments

Sign in to leave a comment

Loading comments...