Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.mirage.strukto.ai/llms.txt

Use this file to discover all available pages before exploring further.

The Google Slides resource exposes presentations as a virtual filesystem mounted at some prefix such as /gslides/. For Google OAuth setup, see Google Workspace Setup.

Config

import os

from mirage import MountMode, Workspace
from mirage.resource.gslides import GSlidesConfig, GSlidesResource

config = GSlidesConfig(
    client_id=os.environ["GOOGLE_CLIENT_ID"],
    client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
    refresh_token=os.environ["GOOGLE_REFRESH_TOKEN"],
)
resource = GSlidesResource(config=config)
ws = Workspace({"/gslides": resource}, mode=MountMode.READ)

Filesystem Layout

/gslides/
  owned/
    <YYYY-MM-DD>_<sanitized-title>__<presentation-id>.gslide.json
    ...
  shared/
    <YYYY-MM-DD>_<sanitized-title>__<presentation-id>.gslide.json
    ...
Example:
/gslides/
  owned/
    2026-04-04_QBR_Deck__1AbCdEf.gslide.json
    2026-04-10_Team_Update__2BcDeFg.gslide.json
  shared/
    2026-04-03_Design_Review__9XyZ.gslide.json
Presentations are split into owned (presentations you created) and shared (presentations shared with you). The filename shape is:
<YYYY-MM-DD>_<sanitized-title>__<presentation-id>.gslide.json
If the modified date is unavailable, the date prefix is omitted. Reading a presentation file returns the full Google Slides API JSON for that presentation.

Cache

The Google Slides resource uses IndexCacheStore. Index entries store presentation IDs and metadata. There is no separate content cache — file content caching is handled by the workspace IOResult mechanism.

Example

import asyncio
import os

from dotenv import load_dotenv

from mirage import MountMode, Workspace
from mirage.resource.gslides import GSlidesConfig, GSlidesResource

load_dotenv(".env.development")

config = GSlidesConfig(
    client_id=os.environ["GOOGLE_CLIENT_ID"],
    client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
    refresh_token=os.environ["GOOGLE_REFRESH_TOKEN"],
)
resource = GSlidesResource(config=config)


async def main():
    ws = Workspace({"/gslides": resource}, mode=MountMode.READ)

    # List structure
    r = await ws.execute("ls /gslides/")
    print(await r.stdout_str())

    # List owned presentations
    r = await ws.execute("ls /gslides/owned/")
    print(await r.stdout_str())

    # Read a presentation
    r = await ws.execute(
        "cat /gslides/owned/2026-04-04_QBR_Deck__1AbCdEf.gslide.json")
    print(await r.stdout_str())

    # Extract title with jq
    r = await ws.execute(
        'jq ".title"'
        " /gslides/owned/2026-04-04_QBR_Deck__1AbCdEf.gslide.json")
    print(await r.stdout_str())

    # Search across all presentations
    r = await ws.execute('rg "quarterly" /gslides/owned/')
    print(await r.stdout_str())

    # Tree view
    r = await ws.execute("tree -L 1 /gslides/")
    print(await r.stdout_str())

    # Create a new presentation
    r = await ws.execute(
        'gws-slides-presentations-create --json \'{"title":"MIRAGE Deck"}\'')
    print(await r.stdout_str())

    # Batch update a presentation
    r = await ws.execute(
        'gws-slides-presentations-batchUpdate'
        ' --params \'{"presentationId":"1AbCdEf"}\''
        ' --json \'{"requests":[]}\'')
    print(await r.stdout_str())


if __name__ == "__main__":
    asyncio.run(main())
See examples/gslides/gslides.py for the full working example.

Shell Commands

Standard commands available on the mounted Google Slides tree:
CommandNotes
lsList owned/shared presentations
catRead presentation JSON
head / tailFirst/last N lines
grep / rgPattern search
jqQuery JSON fields
wcLine/word/byte counts
statFile metadata
findRecursive search
treeDirectory tree view
basename / dirname / realpathPath utilities
nlNumber lines
Resource-specific commands:

gws-slides-presentations-create

Create a new presentation.
gws-slides-presentations-create --json '{"title":"MIRAGE Deck"}'
OptionRequiredDescription
--jsonyesJSON body with title field
Returns the created presentation JSON.

gws-slides-presentations-batchUpdate

Batch update a presentation.
gws-slides-presentations-batchUpdate --params '{"presentationId":"1AbCdEf"}' --json '{"requests":[]}'
OptionRequiredDescription
--paramsyesJSON with presentationId
--jsonyesJSON with requests array
Returns the batch update response JSON.