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:
| Command | Notes |
|---|
ls | List owned/shared presentations |
cat | Read presentation JSON |
head / tail | First/last N lines |
grep / rg | Pattern search |
jq | Query JSON fields |
wc | Line/word/byte counts |
stat | File metadata |
find | Recursive search |
tree | Directory tree view |
basename / dirname / realpath | Path utilities |
nl | Number lines |
Resource-specific commands:
gws-slides-presentations-create
Create a new presentation.
gws-slides-presentations-create --json '{"title":"MIRAGE Deck"}'
| Option | Required | Description |
|---|
--json | yes | JSON 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":[]}'
| Option | Required | Description |
|---|
--params | yes | JSON with presentationId |
--json | yes | JSON with requests array |
Returns the batch update response JSON.