--- 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. ### 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's workspace storage: the storage that this environment uses. When omitted, storage follows the creator's effective default environment. If that default is unavailable and only one storage owner is available, the project uses that owner. The project does not save the environment, and it does not change where runs execute. - `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" } ``` Workspace storage is fixed at creation. A change of `executionWorkspacePolicy.storageProviderPluginId` returns `409` (`project_storage_locked`). Runs use the agent's environment, not a project setting. ## 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} ```