---
title: Projects
description: "Projects group the business's docs, tables and contacts. 4 tools."
group: projects
tools: [projects.list, projects.activity, projects.create, projects.update]
source: [packages/agents/src/tools/features.ts, packages/agents/src/tools/project.ts]
generated: true
---

> Roadstar docs for agents. Every page, as markdown: https://docs.roadstar.app/llms.txt

A project groups the business's docs, tables and contacts around one piece of work, such as "Juniper Dental rebrand" or "Bookkeeping 2026". Every [doc](/tools/docs/) goes in one.

Use the project the owner named. Otherwise list them and pick the one the work belongs to, or create one named after the job.

## How to use it

What `find_tools` sends with these tools, word for word:

> Projects group the owner's docs, tables and contacts, and every doc goes in one. Use the project the owner named; else list them and pick the one the work belongs to, or create one named after the job.

## Tools

| Tool | What it does | Owner's yes |
| --- | --- | --- |
| [projects.list](#list) | Every project in the workspace | No |
| [projects.activity](#activity) | Recent changes across the workspace | No |
| [projects.create](#create) | Create a project | No |
| [projects.update](#update) | Rename a project or change its description | Checked |

## list

`projects.list` · Every project in the workspace.

**Owner's yes:** No. Nothing of the owner's changes.

| Input | Type | Required | Limits |
| --- | --- | --- | --- |
| `offset` | whole number | no | 0 or more |

Returns:

```ts
{
  items: {
    id: string;
    organizationId: string;
    name: string;
    description: string;
    createdByUserId: string | null;
    updatedByUserId: string | null;
    createdAt: string;
    updatedAt: string;
  }[];
  nextOffset: number | null;
}
```

## activity

`projects.activity` · Recent changes across the workspace.

**Owner's yes:** No. Nothing of the owner's changes.

| Input | Type | Required | Limits |
| --- | --- | --- | --- |
| `offset` | whole number | no | 0 or more |

Returns:

```ts
{
  items: WorkspaceActivityItem[];
  nextOffset: number | null;
}
```

## create

`projects.create` · Create a project.

**Owner's yes:** No. It makes something new.\
**Your work:** listed on Home.

| Input | Type | Required | Limits |
| --- | --- | --- | --- |
| `name` | text | yes | 1–120 characters |
| `description` | text | no | up to 4,000 characters, default "" |

Returns:

```ts
{
  name: string;
  description: string;
  id: string;
  createdAt: string;
  organizationId: string;
  createdByUserId: string | null;
  updatedByUserId: string | null;
  updatedAt: string;
} | {
  id: string;
  organizationId: string;
  name: string;
  description: string;
  createdByUserId: string | null;
  updatedByUserId: string | null;
  createdAt: string;
  updatedAt: string;
}
```

## update

`projects.update` · Rename a project or change its description.

**Owner's yes:** Checked. It changes what's there.\
**Your work:** listed on Home.

| Input | Type | Required | Limits |
| --- | --- | --- | --- |
| `projectId` | id | yes |  |
| `name` | text | yes | 1–120 characters |
| `description` | text | yes | up to 4,000 characters |

Returns:

```ts
{
  id: string;
  organizationId: string;
  name: string;
  description: string;
  createdByUserId: string | null;
  updatedByUserId: string | null;
  createdAt: string;
  updatedAt: string;
}
```

## Types

Named types in the results above.

```ts
type WorkspaceActivityItem = {
  id: string;
  kind: "question" | "thesis" | "company" | "comment" | "member" | "chat" | "project" | "annotation" | "dataset" | "investment";
  title: string;
  summary: string;
  occurredAt: string;
  actorName: string | null;
  projectId: string | null;
  projectName: string | null;
  target: {
    type: "page" | "workspace" | "company" | "project";
    id: string;
  } | {
    type: "dataset";
    id: string;
    projectId?: string;
  } | {
    type: "chat";
    id: string;
    projectId: string;
  };
  private: boolean;
}
```
