Back to Skills
    🦞

    tensorpm

    AI-powered project management - a Notion and Jira alternative

    By @neo552
    View on GitHub
    SKILL.md
    ---
    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)