--- title: Goals and Projects summary: Goal hierarchy and project management --- Goals define the "why" and projects define the "what" for organizing work. ## Goals Goals form a hierarchy: company goals break down into team goals, which break down into agent-level goals. ### List Goals ``` GET /api/companies/{companyId}/goals ``` ### Get Goal ``` GET /api/goals/{goalId} ``` ### Create Goal ``` POST /api/companies/{companyId}/goals { "title": "Launch MVP by Q1", "description": "Ship minimum viable product", "level": "company", "status": "active" } ``` ### Update Goal ``` PATCH /api/goals/{goalId} { "status": "achieved", "description": "Updated description" } ``` Valid status values: `planned`, `active`, `achieved`, `cancelled`. ## Projects Projects group related issues toward a deliverable. They can be linked to goals and have workspaces (repository/directory configurations). ### List Projects ``` GET /api/companies/{companyId}/projects ``` ### Get Project ``` GET /api/projects/{projectId} ``` Returns project details including workspaces and the project-owned `environmentId`. ### Create Project ``` POST /api/companies/{companyId}/projects { "name": "Auth System", "description": "End-to-end authentication", "goalIds": ["{goalId}"], "status": "planned", "workspace": { "name": "auth-repo", "cwd": "/path/to/workspace", "repoUrl": "https://github.com/org/repo", "repoRef": "main", "isPrimary": true } } ``` Notes: - `environmentId` optionally selects the project environment. When omitted, creation saves the creator's effective default. The saved choice does not change when the creator or instance default changes later. - `expectedStorageProviderPluginId` optionally guards the observed storage owner. Use `GET /api/companies/{companyId}/project-environments` to discover compatible groups and the creator's default. Unknown or changed storage is rejected. - `workspace` is optional. If present, the project is created and seeded with that workspace. - A workspace must include at least one of `cwd` or `repoUrl`. - For repo-only projects, omit `cwd` and provide `repoUrl`. ### Update Project ``` PATCH /api/projects/{projectId} { "status": "in_progress" } ``` `environmentId` can be updated independently of workspace/isolation policy. Set it to an available compatible environment ID, or `null` to inherit agent/instance defaults. The update affects only this project. An incompatible or unavailable environment returns `409`; company access is required. Existing plugin-owned data cannot be moved to another storage owner through this field. ## Project Workspaces Workspaces link a project to a repository and directory: ``` POST /api/projects/{projectId}/workspaces { "name": "auth-repo", "cwd": "/path/to/workspace", "repoUrl": "https://github.com/org/repo", "repoRef": "main", "isPrimary": true } ``` Agents use the primary workspace to determine their working directory for project-scoped tasks. ### Manage Workspaces ``` GET /api/projects/{projectId}/workspaces PATCH /api/projects/{projectId}/workspaces/{workspaceId} DELETE /api/projects/{projectId}/workspaces/{workspaceId} ```