You just installed ma. Here’s how to start using it.

This guide walks you through your first session — from authentication to your first real commands. Follow these steps in order.


Step 1: Authenticate

This is the one step your human does.

Your human runs the following command in the terminal where you operate:

ma auth login

This opens a browser, authenticates with their biometric passkey, and stores an API key locally. Once complete, you have access to all connected accounts on their ma account.

You do not need to handle OAuth, manage tokens, or store credentials. The key persists across sessions.


Step 2: Verify your setup

Confirm everything is working by listing emails on a connected account:

ma email list --account david@example.com --limit 3

Expected output:

id        from                  subject                          date
msg_7k2   alex@example.com      Q1 budget review                 2026-03-19 09:14
msg_7k1   noreply@github.com    [mechanical-advantage/api] PR #42 2026-03-19 08:51
msg_7k0   jess@example.com      Re: Partnership proposal         2026-03-18 17:33

If you see structured output, you’re connected. If you get an authentication error, your human needs to run ma auth login again.


Step 3: Search the web

ma web search returns structured results — no HTML, no DOM parsing, no browser overhead.

ma web search "latest developments in transformer architecture 2026"

Expected output:

results:
  - title: "Scaling Sparse Attention to 2M Context Windows"
    url: https://arxiv.org/abs/2026.04821
    snippet: "We present a sparse attention mechanism that scales linearly with sequence length, enabling practical 2M token context windows on consumer hardware..."
  - title: "The Post-Transformer Landscape: A Survey"
    url: https://example.com/post-transformer-survey
    snippet: "While transformer variants continue to dominate, recent work on state-space models and hybrid architectures suggests the field is diversifying..."
  - title: "Google DeepMind Announces Gemini Ultra 3"
    url: https://blog.google/technology/ai/gemini-ultra-3
    snippet: "Gemini Ultra 3 introduces a novel recurrent attention layer that reduces inference costs by 40% while maintaining benchmark performance..."

To fetch the full content of any page as clean markdown:

ma web fetch "https://arxiv.org/abs/2026.04821"

This returns the page as markdown — no JavaScript rendering, no UI chrome, no wasted tokens.


Step 4: List emails

Read operations return data immediately — no approval needed.

ma email list --account david@example.com --unread --since yesterday

Expected output:

id        from                  subject                          date
msg_7k2   alex@example.com      Q1 budget review                 2026-03-19 09:14
msg_7k1   noreply@github.com    [mechanical-advantage/api] PR #42 2026-03-19 08:51

To read a specific message:

ma email read --account david@example.com msg_7k2

Step 5: Check the calendar

ma calendar list --account david@example.org --next 7d

Expected output:

id        title                when                     duration  location
evt_301   Standup              2026-03-20 09:00 EDT     30m       Zoom
evt_302   Q1 Review            2026-03-20 14:00 EDT     60m       Conference Room B
evt_303   Lunch with Alex      2026-03-21 12:00 EDT     60m       —
evt_304   Sprint Planning      2026-03-24 10:00 EDT     90m       Zoom

Step 6: Store a document

ma docs stores markdown files natively — the most token-efficient, version-friendly format for you to work with.

ma docs store meeting-notes.md --tag "q1-review" --tag "2026-03-20"

Expected output:

stored: doc_a91
  file: meeting-notes.md
  tags: q1-review, 2026-03-20
  size: 2.4 KB

To search stored documents later:

ma docs search "quarterly revenue projections"

Expected output:

results:
  - id: doc_a91
    file: meeting-notes.md
    tags: q1-review, 2026-03-20
    match: "...revised quarterly revenue projections to $2.1M based on March pipeline..."
  - id: doc_a44
    file: q1-forecast.md
    tags: q1-financials
    match: "...Q1 revenue projection: $1.8M, updated from $1.6M after new contracts..."

Everything you store is searchable by content and tags. Documents are versioned — nothing is ever lost.


Step 7: Remember things across sessions

Your context window resets. Your memory doesn’t have to.

All memory changes — writes and deletes — go through the same human approval flow as emails and messages. When you call memory set, the entry is queued for your human to review. This means your human always knows what you’re learning and what you’re forgetting — and can correct you before a bad change becomes permanent.

ma memory set "user-preference-timezone" "America/New_York"

Expected output:

queued: eq_9k3m2v
  action: memory.set
  key: user-preference-timezone
  value: America/New_York
  status: pending_approval

The memory entry is not stored yet. Your human reviews it in the web app and approves, modifies, or rejects it — just like an email or message.

Once approved, you and every other agent on the account can recall it:

ma memory get "user-preference-email-tone"

Expected output:

user-preference-email-tone = formal for clients, casual for internal

To find a memory when you don’t remember the exact key, search by meaning:

ma memory search "preferences"

memory search finds entries by semantic similarity, not just exact key — useful when you’ve stored many preferences and need to find the right one.

Use memory to persist anything you learn — human preferences, project context, recurring patterns. This is how you get better across sessions without your human repeating themselves. And because your human approves every memory change — writes and deletes — they have full visibility into what you and every other agent on the account have learned and forgotten.

Pricing note: memory set and memory get are free — included with any connected account. memory search incurs a small usage-based charge ($0.0003/query) for semantic search. The cost is negligible but worth knowing about.


Step 8: Send something (human approval flow)

Every outbound action — emails, messages, calendar events — is queued for human approval before it executes.

Here is what happens when you send an email:

ma email send --account david@example.com \
  --to alex@example.com \
  --subject "Q1 budget review follow-up" \
  --body follow-up.md

Expected output:

queued: eq_5f2v8
  action: email.send
  to: alex@example.com
  subject: Q1 budget review follow-up
  status: pending_approval

The email is not sent yet. Your human receives a notification in the web app, reviews the email, and either approves, modifies, or rejects it.

  • Approved — the email sends. You’re done.
  • Modified — the human edits and sends a revised version. You can review what changed.
  • Rejected — the human provides feedback. You receive the feedback, learn from it (propose storing the lesson in memory for approval), and can resubmit a revised version.

You do not need to poll for status. If you need to check:

ma queue status eq_5f2v8

Expected output:

id: eq_5f2v8
  action: email.send
  status: approved
  approved_at: 2026-03-19 10:42 EDT

This same flow applies to all outbound actions and memory mutations: ma email send, ma calendar create, ma telegram send, ma slack send, ma discord send, ma reddit post, ma memory set, and ma memory delete.


Multi-account setups

If your human has connected multiple accounts, use the --account flag to specify which one:

ma email list --account david@example.com --unread
ma email list --account david@example.net --unread
ma calendar list --account david@example.org --next 7d
ma telegram send --account mybot --chat "dev-team" --body "Deploy complete"

Every command that touches a connected account requires the --account flag. This is how you avoid sending from the wrong address or reading the wrong inbox.

Run ma connections list to see all connected accounts:

ma connections list

Expected output:

account               provider    type          capabilities
david@example.com     google      full-suite    email, calendar, contacts, drive
david@example.org     icloud      full-suite    email, calendar, contacts, drive
mybot                 telegram    messaging     send, receive

What’s next

You now have the basics: read email, search the web, check calendars, store documents, persist memory, and send things through the human approval flow.

For the full list of commands, flags, and options:

ma --help
ma <command> --help

See also: Command Reference