Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
e7635db
chore(logging): remove redis-progress-markers feature flag (#5287)
waleedlatif1 Jun 30, 2026
4298e57
fix(workflow-renderer): validate dropbox host in note embed renderer …
waleedlatif1 Jun 30, 2026
ca0a7ff
feat(rich-markdown-editor): live media embeds + shared embed detectio…
waleedlatif1 Jun 30, 2026
d0aed14
feat(integrations): wave-4 tool-depth (Slack/Asana/Jira/Google Docs/T…
waleedlatif1 Jun 30, 2026
8bf1989
feat(providers): add Claude Sonnet 5 model (#5291)
waleedlatif1 Jun 30, 2026
0613ceb
feat(db): resolve DATABASE_URL per role (DATABASE_URL_<ROLE> with fal…
TheodoreSpeaks Jun 30, 2026
84c22f1
fix(emcn): keep Prism grammar registrations in bundle, never throw on…
waleedlatif1 Jun 30, 2026
ccddb62
feat(broadcast): add LinkedIn footer social icon (#5295)
waleedlatif1 Jun 30, 2026
ad19f7f
improvement(landing): refine hero and mothership visuals (#5181)
andresdjasso Jun 30, 2026
32b6a42
improvement(landing): SSR-friendly URL-state filters + cleanup pass +…
waleedlatif1 Jun 30, 2026
c17c003
feat(input-format): upload files in file fields via the file uploader…
waleedlatif1 Jun 30, 2026
8c8e4b7
refactor(landing): DRY page metadata via buildLandingMetadata + deriv…
waleedlatif1 Jun 30, 2026
bdaeb65
feat(broadcast): add july-1 newsletter (template, assets, font) (#5302)
waleedlatif1 Jun 30, 2026
604d03e
improvement(sendblue): audit fixes for optional group numbers, seat_i…
waleedlatif1 Jun 30, 2026
c1b84e4
feat(linq): audit fixes + native auto-registering webhook trigger (#5…
waleedlatif1 Jul 1, 2026
495460d
perf(landing): defer Features preview, memoize integration grid, trim…
waleedlatif1 Jul 1, 2026
ed6e8c2
fix(input-format): file-field mode toggle uses canonical arrow icon o…
waleedlatif1 Jul 1, 2026
7662ecc
feat(forking): resource copying UX to help with setup speed (#5294)
icecrasher321 Jul 1, 2026
48752c6
fix(media-embed): remove ReDoS-prone regexes in host-gated providers …
waleedlatif1 Jul 1, 2026
fbcdcd0
fix(sidebar): suppress collapse->expand transition flash on fresh loa…
waleedlatif1 Jul 1, 2026
75c364a
improvement(docs): README redesign — banner + platform screenshot (#5…
andresdjasso Jul 1, 2026
5055b31
improvement(billing): ux around on demand toggling and one-off credit…
icecrasher321 Jul 1, 2026
0990a17
fix(settings): chip-consistency + shared credential-style resource ro…
waleedlatif1 Jul 1, 2026
2c38e63
improvement(emails): align transactional emails with the platform neu…
waleedlatif1 Jul 1, 2026
44a954d
fix(emcn): stop calendar content bleeding through the modal backdrop …
waleedlatif1 Jul 1, 2026
ff16b1b
fix(hitl): build the full enabled-block DAG so any persisted resume t…
icecrasher321 Jul 1, 2026
ca34301
fix(mailer): permissions entitlements for enabling/disabling (#5312)
icecrasher321 Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1,206 changes: 1,206 additions & 0 deletions .agents/skills/design-taste-frontend/SKILL.md

Large diffs are not rendered by default.

679 changes: 679 additions & 0 deletions .agents/skills/emil-design-eng/SKILL.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions .claude/commands/add-block.md
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,13 @@ Please provide the SVG and I'll convert it to a React component.
You can usually find this in the service's brand/press kit page, or copy it from their website.
```

When converting the SVG: a **monochrome** logo (single white or black mark) must
use `fill='currentColor'`, never a hardcoded `#fff`/`#000000`. Block icons render
both inside their `bgColor` tile and "bare" on a neutral page (the home Suggested
actions list) in light and dark mode; a hardcoded white/black mark goes invisible
bare on the matching background. Multi-color brand logos keep their own fills.
Verify with `bun run check:bare-icons`.

## Advanced Mode for Optional Fields

Optional fields that are rarely used should be set to `mode: 'advanced'` so they don't clutter the basic UI. This includes:
Expand Down
26 changes: 26 additions & 0 deletions .claude/commands/add-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,31 @@ Once the user provides the SVG:
2. Create a React component that spreads props
3. Ensure viewBox is preserved from the original SVG

### Theme-safety (bare rendering) — REQUIRED

The icon renders both inside its colored `bgColor` tile AND "bare" (no tile) on a
neutral page — e.g. the home **Suggested actions** list — in both light and dark
mode. A monochrome logo whose paths hardcode a single near-white or near-black
fill is invisible bare on the matching background (white-on-white in light mode,
black-on-black in dark mode).

Rules when adding the SVG:

- **Monochrome logos** (a single white or black mark): draw the shape with
`fill='currentColor'`, not `fill='#fff'` / `fill='#000000'`. It then inherits
white inside dark tiles, near-black inside light tiles (via
`getTileIconColorClass`), and the theme-aware `var(--text-icon)` bare — legible
everywhere. Do NOT set `iconColor` for these.
- **Multi-color brand logos** (their own vivid fills): keep the hardcoded fills.
They read on any background. Only set `iconColor` (a vivid brand hex, never a
near-black/near-white tile color) if the bare icon should adopt a brand tint.
- A large white shape with a tiny vivid accent (e.g. a logo where the body is the
white negative space) still vanishes bare — convert the body to `currentColor`.

Verify with `bun run check:bare-icons` (also runs in CI). It flags purely
monochrome hazards; for partial-accent logos, eyeball the suggested-actions list
in both light and dark mode.

## Step 5: Create Triggers (Optional)

If the service supports webhooks, create triggers using the generic `buildTriggerSubBlocks` helper.
Expand Down Expand Up @@ -466,6 +491,7 @@ If creating V2 versions (API-aligned outputs):
- [ ] Asked user to provide SVG
- [ ] Added icon to `components/icons.tsx`
- [ ] Icon spreads props correctly
- [ ] Monochrome marks use `fill='currentColor'` (not hardcoded white/black) so the icon renders bare in light AND dark mode — verified with `bun run check:bare-icons`

### Triggers (if service supports webhooks)
- [ ] Created `triggers/{service}/` directory
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/design-taste-frontend
1 change: 1 addition & 0 deletions .claude/skills/emil-design-eng
2 changes: 1 addition & 1 deletion .cursor/rules/constitution.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: Sim product language, positioning, and tone guidelines
globs: ["apps/sim/app/(landing)/**", "apps/sim/app/(home)/**", "apps/docs/**", "apps/sim/app/manifest.ts", "apps/sim/app/sitemap.ts", "apps/sim/app/robots.ts", "apps/sim/app/llms.txt/**", "apps/sim/app/llms-full.txt/**", "apps/sim/app/(landing)/**/structured-data*", "apps/docs/**/structured-data*", "**/metadata*", "**/seo*"]
globs: ["apps/sim/app/(landing)/**", "apps/docs/**", "apps/sim/app/manifest.ts", "apps/sim/app/sitemap.ts", "apps/sim/app/robots.ts", "apps/sim/app/llms.txt/**", "apps/sim/app/llms-full.txt/**", "apps/sim/app/(landing)/**/structured-data*", "apps/docs/**/structured-data*", "**/metadata*", "**/seo*"]
---

# Sim — Language & Positioning
Expand Down
2 changes: 1 addition & 1 deletion .cursor/rules/landing-seo-geo.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description: SEO and GEO guidelines for the landing page
globs: ["apps/sim/app/(home)/**/*.tsx"]
globs: ["apps/sim/app/(landing)/**/*.tsx"]
---
# Landing Page — SEO / GEO

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,9 @@ jobs:
- name: Client boundary import audit
run: bun run check:client-boundary

- name: Bare-icon theme-safety audit
run: bun run check:bare-icons

- name: Verify realtime prune graph
run: bun run check:realtime-prune

Expand Down
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<p align="center">
<a href="https://sim.ai" target="_blank" rel="noopener noreferrer">
<img src="apps/sim/public/static/readme-hero.gif" alt="Sim — your workflow agent for solving automations. Build, deploy, and manage AI agents visually, conversationally, or with code." width="100%"/>
<img src="apps/sim/public/static/readme-banner.png" alt="Sim — Integrate, Context, Build, and Monitor AI agents" width="100%"/>
</a>
</p>

Expand All @@ -35,7 +35,7 @@ Open [http://localhost:3000](http://localhost:3000)
Docker must be installed and running. Use `-p, --port <port>` to run Sim on a different port, or `--no-pull` to skip pulling the latest Docker images.

<p align="center">
<img src="apps/sim/public/static/readme-tour.gif" alt="How Sim worksIntegrate, Context, Build, Monitor — shown end to end: start a chat to build an agent, connect Slack and other integrations, add a knowledge base, build the workflow visually, deploy it, and monitor runs in the logs" width="100%"/>
<img src="apps/sim/public/static/readme-platform.png" alt="The Sim platform — chat on the left, the visual workflow builder on the right" width="100%"/>
</p>

## Capabilities
Expand All @@ -46,6 +46,33 @@ Docker must be installed and running. Use `-p, --port <port>` to run Sim on a di
- Ingest files, knowledge bases, and structured table data
- Monitor runs, logs, schedules, and workflow activity

## One workspace, every surface

<p align="center">Chat and workflows are just the start — tables, files, knowledge, and scheduled tasks all live in the same workspace.</p>

<table>
<tr>
<td width="50%" valign="top">
<img src="apps/sim/public/static/readme-tables.png" alt="Tables in Sim — structured data your agents can query" width="100%"/>
<p align="center"><b>Tables</b> — a database, built in</p>
</td>
<td width="50%" valign="top">
<img src="apps/sim/public/static/readme-files.png" alt="Files in Sim — documents for your team and every agent" width="100%"/>
<p align="center"><b>Files</b> — one store for your team and every agent</p>
</td>
</tr>
<tr>
<td width="50%" valign="top">
<img src="apps/sim/public/static/readme-knowledge.png" alt="Knowledge bases in Sim — synced docs your agents can search" width="100%"/>
<p align="center"><b>Knowledge</b> — your agents' memory</p>
</td>
<td width="50%" valign="top">
<img src="apps/sim/public/static/readme-scheduled-tasks.png" alt="Scheduled tasks in Sim — recurring agent runs on a calendar" width="100%"/>
<p align="center"><b>Scheduled tasks</b> — runs on your schedule</p>
</td>
</tr>
</table>

## Self-hosting

### Docker Compose
Expand Down Expand Up @@ -120,6 +147,9 @@ See the [environment variables reference](https://docs.sim.ai/self-hosting/envir

## Tech Stack

<details>
<summary>Next.js · Bun · PostgreSQL · Drizzle · Better Auth · Tailwind — and the rest of the stack</summary>

- **Framework**: [Next.js](https://nextjs.org/) (App Router)
- **Runtime**: [Bun](https://bun.sh/)
- **Database**: PostgreSQL with [Drizzle ORM](https://orm.drizzle.team)
Expand All @@ -136,6 +166,8 @@ See the [environment variables reference](https://docs.sim.ai/self-hosting/envir
- **Remote Code Execution**: [E2B](https://www.e2b.dev/)
- **Isolated Code Execution**: [isolated-vm](https://github.com/laverdet/isolated-vm)

</details>

## Contributing

We welcome contributions! Please see our [Contributing Guide](.github/CONTRIBUTING.md) for details.
Expand Down
183 changes: 183 additions & 0 deletions apps/docs/content/docs/en/integrations/asana.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,187 @@ Add a comment (story) to an Asana task
| ↳ `gid` | string | Author GID |
| ↳ `name` | string | Author name |

### `asana_create_subtask`

Create a subtask under an existing Asana task

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `taskGid` | string | Yes | GID of the parent Asana task \(numeric string\) |
| `name` | string | Yes | Name of the subtask |
| `notes` | string | No | Notes or description for the subtask |
| `assignee` | string | No | User GID to assign the subtask to |
| `due_on` | string | No | Due date in YYYY-MM-DD format |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | Subtask globally unique identifier |
| `name` | string | Subtask name |
| `notes` | string | Subtask notes or description |
| `completed` | boolean | Whether the subtask is completed |
| `created_at` | string | Subtask creation timestamp |
| `permalink_url` | string | URL to the subtask in Asana |

### `asana_delete_task`

Delete an Asana task by its GID (moves it to the trash)

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `taskGid` | string | Yes | GID of the Asana task to delete \(numeric string\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | GID of the deleted task |
| `deleted` | boolean | Whether the task was deleted |

### `asana_add_followers`

Add one or more followers to an Asana task

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `taskGid` | string | Yes | GID of the Asana task \(numeric string\) |
| `followers` | array | Yes | Array of user GIDs to add as followers to the task |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | Task globally unique identifier |
| `name` | string | Task name |
| `followers` | array | Current followers on the task after the update |
| ↳ `gid` | string | Follower GID |
| ↳ `name` | string | Follower name |

### `asana_create_project`

Create a new project in an Asana workspace

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `workspace` | string | Yes | Asana workspace GID \(numeric string\) where the project will be created |
| `name` | string | Yes | Name of the project |
| `notes` | string | No | Notes or description for the project |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | Project globally unique identifier |
| `name` | string | Project name |
| `notes` | string | Project notes or description |
| `archived` | boolean | Whether the project is archived |
| `color` | string | Project color |
| `created_at` | string | Project creation timestamp |
| `modified_at` | string | Project last modified timestamp |
| `permalink_url` | string | URL to the project in Asana |

### `asana_get_project`

Retrieve a single Asana project by its GID

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectGid` | string | Yes | Asana project GID \(numeric string\) to retrieve |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | Project globally unique identifier |
| `name` | string | Project name |
| `notes` | string | Project notes or description |
| `archived` | boolean | Whether the project is archived |
| `color` | string | Project color |
| `created_at` | string | Project creation timestamp |
| `modified_at` | string | Project last modified timestamp |
| `permalink_url` | string | URL to the project in Asana |

### `asana_list_workspaces`

List all Asana workspaces and organizations the authenticated user belongs to

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `workspaces` | array | Array of workspaces |
| ↳ `gid` | string | Workspace GID |
| ↳ `name` | string | Workspace name |
| ↳ `resource_type` | string | Resource type \(workspace\) |

### `asana_create_section`

Create a new section in an Asana project

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectGid` | string | Yes | GID of the Asana project \(numeric string\) to add the section to |
| `name` | string | Yes | Name of the section |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `gid` | string | Section globally unique identifier |
| `name` | string | Section name |
| `created_at` | string | Section creation timestamp |

### `asana_list_sections`

List all sections in an Asana project

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `projectGid` | string | Yes | GID of the Asana project \(numeric string\) to list sections from |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `success` | boolean | Operation success status |
| `ts` | string | Timestamp of the response |
| `sections` | array | Array of sections in the project |
| ↳ `gid` | string | Section GID |
| ↳ `name` | string | Section name |
| ↳ `resource_type` | string | Resource type \(section\) |


Loading
Loading