# Core Features of the Macro Project: A Unified Workspace Built on Graph Architecture

> Explore Macro's core features: an all-in-one workspace unifying email chat docs tasks AI agents calls storage PRs & CRM. Built on a bidirectional graph for seamless content linking.

- Repository: [Macro/macro](https://github.com/macro-inc/macro)
- Tags: deep-dive
- Published: 2026-08-20

---

**Macro is an all-in-one workspace that unifies email, chat, documents, tasks, AI agents, calls, file storage, pull requests, and CRM into a single, searchable system built on a bidirectional graph where every piece of content is natively linked.**

The `macro-inc/macro` repository delivers a modular productivity platform designed to eliminate context switching. Understanding the core features of the Macro project reveals how interchangeable **blocks** share a common backend to create a seamlessly interconnected environment for technical teams.

## Modular Architecture: Blocks and the Bidirectional Graph

Macro's architecture centers on **blocks**, interchangeable components that each provide a best-in-class experience while operating on the same backend infrastructure. According to the repository's [`README.md`](https://github.com/macro-inc/macro/blob/main/README.md), every piece of content is stored as a node in a graph, enabling **bidirectional @-linking** between entities. This allows a task created directly from an email to maintain a two-way edge to its source, or a document to @-mention a channel message with instant navigation back to the conversation.

The **unified memory** system synthesizes all workspace activity into a single, searchable knowledge base through nightly cron jobs, as implemented in [`services/worker_trigger/src/main.rs`](https://github.com/macro-inc/macro/blob/main/services/worker_trigger/src/main.rs). This enables AI agents to query historical context across every block type.

## Communication and Coordination Features

### Unified Email and Messaging

The **Email** block provides a multi-account unified inbox with keyboard-first shortcuts and shared inboxes, offering deep Gmail integration as documented in [`README.md`](https://github.com/macro-inc/macro/blob/main/README.md). The **Messages** block delivers focused, thread-based chat designed for technical discussions with inline replies and permissioned threads.

Both communication blocks are graph-linked to other workspace elements, allowing seamless transitions from conversation to actionable items.

### Voice and Video Calls

Macro's **Calls** block records and transcribes conversations, storing them directly in the graph for agent analysis and search retrieval. This ensures meeting content remains discoverable and actionable without leaving the unified workspace.

## Content Creation and Knowledge Management

### Real-Time Collaborative Documents

The **Docs** block provides real-time collaborative markdown editing using CRDTs (Conflict-free Replicated Data Types), supporting @-mentions, live editing, and version control. As detailed in [`services/document_storage_service/README.md`](https://github.com/macro-inc/macro/blob/main/services/document_storage_service/README.md), the document storage backend serves as the heart of the content system, powering not only Docs but also the File block and @-linking infrastructure.

### Visual Organization with Canvas

**Canvas** offers a 2-D board for visual organization where users can embed @-links to tasks, files, and emails. This spatial interface complements the linear document structure, providing flexibility for brainstorming and project planning.

### Intelligent File Storage

The **File storage** block auto-imports attachments from email and channels, making PDFs, images, and documents fully searchable. The efficiency of this system is demonstrated in [`services/email_service/src/bin/cleanup_unused_sfs/README.md`](https://github.com/macro-inc/macro/blob/main/services/email_service/src/bin/cleanup_unused_sfs/README.md), which handles cleanup of file-storage objects to maintain performance.

## Workflow Automation and Intelligence

### Task Management

**Tasks** provide Linear-style task management tightly coupled with chat, email, and agents, featuring auto-linking to source context. When a task is created from an email thread, the bidirectional graph automatically maintains references to both the original message and any related documents or channel discussions.

### AI Agents with Unified Memory

**Agents** operate with team-level memory, acting on behalf of users or bots to edit documents, run AI-powered actions, and synthesize information. Agents query the unified memory system to access transcribed calls, documents, and messages, enabling context-aware automation across the entire workspace.

### Integrated CRM and Pull Requests

The **CRM** block manages customer and contact objects with automatic email sync, @-mentions, and bidirectional linking to conversations and tasks. **Pull requests** integrate directly into the graph, linking to tasks and becoming embeddable in channels where agents can monitor and interact with development workflows.

## Building on Macro with the TypeScript SDK

Macro exposes its core features through the `@macro/sdk` package, providing a high-level, ORM-like API for all resources. As documented in [`packages/sdk/README.md`](https://github.com/macro-inc/macro/blob/main/packages/sdk/README.md), the SDK supports webhook handling, bot development, and type-safe interactions with the graph.

### SDK Usage Examples

Initialize the client using environment variables:

```typescript
// Create a Macro client (auth via env vars)
import { Macro } from '@macro/sdk';
const macro = new Macro({}); // uses MACRO_API_KEY env var
// Source: packages/sdk/README.md

```

Create documents and send rich messages with @-mentions:

```typescript
// Create a new document
const doc = await macro.documents.create({
  name: 'Weekly update',
  markdown: '# Week 32\n\n- shipped the thing',

});

// Send a rich message that @-mentions a user and a document
import { msg, here } from '@macro/sdk';
const channel = macro.channels.byId('chan_1');
const user = macro.users.byId('user_1');
await channel.send(msg`Hey ${user}, take a look at ${doc}. cc ${here}`);
// Source: packages/sdk/README.md

```

Interact with collections using auto-pagination and search:

```typescript
// List recent documents (auto-paginated generator)
for await (const d of macro.documents.recent()) {
  console.log(await d.name());
}

// Search documents
for await (const hit of macro.documents.search('quarterly revenue')) {
  console.log(hit.webUrl());
}

// Mark a document as a favorite and set a custom property
await doc.favorite();
await doc.setProperty(macro.properties.byId('prop_status'), { text: 'In review' });
// Source: packages/sdk/README.md

```

The live indexing pipeline powering these search capabilities is detailed in [`services/search_processing_service/README.md`](https://github.com/macro-inc/macro/blob/main/services/search_processing_service/README.md), while deployment instructions for the web UI that unifies all blocks appear in [`infra/stacks/web-app/README.md`](https://github.com/macro-inc/macro/blob/main/infra/stacks/web-app/README.md).

## Summary

- **Macro unifies** email, chat, documents, tasks, agents, calls, file storage, pull requests, and CRM into a single workspace built on a bidirectional graph.
- **Blocks** provide interchangeable, best-in-class experiences that share a common backend, ensuring every entity is natively linked to every other entity.
- **Bidirectional @-linking** creates two-way edges between nodes, enabling instant navigation and context retrieval across the entire workspace.
- **Unified memory** synthesizes all activity into a searchable knowledge base that powers AI agent capabilities.
- **The TypeScript SDK** provides ORM-like access to resources, supporting bot development and custom integrations.

## Frequently Asked Questions

### How does Macro's bidirectional graph improve team productivity?

Unlike traditional productivity tools that isolate data in silos, Macro stores every entity as a node in a graph with two-way edges between related items. This means clicking an @-mention in a document instantly navigates to the referenced email, task, or message, eliminating context switching and preserving relationship history across the workspace.

### What programming languages does the Macro SDK support?

The official SDK is available as a TypeScript package (`@macro/sdk`) that provides type-safe access to all Macro resources. According to [`packages/sdk/README.md`](https://github.com/macro-inc/macro/blob/main/packages/sdk/README.md), it supports modern JavaScript/TypeScript environments with features like auto-pagination, webhook handling, and template literal functions for rich messaging.

### How do Macro agents access historical workspace data?

Agents query the **unified memory** system, which is maintained by background workers (entry point at [`services/worker_trigger/src/main.rs`](https://github.com/macro-inc/macro/blob/main/services/worker_trigger/src/main.rs)) that run nightly synthesis jobs. This process ingests emails, transcribed calls, documents, and messages into a searchable knowledge base, enabling agents to provide context-aware assistance based on the complete history of team activities.

### Can Macro integrate with existing development workflows?

Yes. The **Pull requests** block links directly to tasks and can be embedded in channels, while the **CRM** block syncs automatically with email. Developers can use the SDK to build bots that respond to pull request events, update tasks based on email content, or automate documentation workflows, all while maintaining bidirectional links to source data.