Little AI gremlin in your sheet.
Project description
g-gremlin — the little AI gremlin in your sheet
Local-shadow CLI for Google Sheets that pulls to CSV, diffs, and pushes back with safety rails (concurrency token, formula protection, previews).
Setup
- Python 3.11+
- From repo root:
python -m pip install --upgrade pipthenpython -m pip install -e . - If you have an older
g-gremlinin user/site-packages, remove it first. A stale non-editable install can shadow the repo checkout in ad hoc Python runs. - Obtain a Google OAuth client (Desktop app) from Google Cloud Console.
- Set
G_GREMLIN_CREDENTIALS=/path/to/credentials.jsonor place it at~/.g_gremlin/credentials.json.
- Set
- Tokens live at
~/.g_gremlin/token.json; delete to re-auth.
MCP
- Install the MCP runtime with package extras:
python -m pip install "g-gremlin[mcp]"
or withpipx:pipx install "g-gremlin[mcp]"
- Canonical CLI entrypoint:
g-gremlin mcp serve --provider sfdc
- Wrapper-friendly launcher:
g-gremlin-mcp --provider sfdc
- Providers currently exposed through the MCP runtime:
sfdcdynamicsapollooutreachzoominfo
- Auth bootstrap remains CLI-first. Configure credentials before attaching a host:
- Salesforce:
g-gremlin sfdc connect --org-alias <alias> - Dynamics:
g-gremlin auth set dynamics - Apollo:
g-gremlin auth set apollo - Outreach:
g-gremlin outreach oauth connect - ZoomInfo:
g-gremlin zoominfo oauth connect
- Salesforce:
- First smoke tests after install:
g-gremlin-mcp --help- Connect a host or inspector and call
sfdc.doctor,dynamics.doctor, orzoominfo.doctor
- Starter MCP prompts now ship in the server for the first-run workflows:
crm-doctoronsfdcanddynamicssfdc-snapshotonsfdc
- Host-specific setup examples live in
docs/runbooks/mcp_host_setup.md.
Usage
- Pull a range to CSV:
g-gremlin pull SPREADSHEET_ID --range "Leads!A1:Z" --output leads.csv
- Diff two CSVs:
g-gremlin diff --original leads.csv --modified leads_edited.csv --key-col Id --limit 10
- Summary + preview; writes
.g_gremlin/diff.json.
- Summary + preview; writes
- Push changes back (ETag/concurrency guarded, formula-aware):
g-gremlin push --dry-run # preview updates g-gremlin push # apply updates
- Uses
.g_gremlin/state.jsonand.g_gremlin/diff.json. - Requires a concurrency token from the last pull; if missing, re-run pull.
- Skips cells that contain formulas (warns) and aborts if the remote version changed unless
--forceis provided.
- Uses
- Validate a CSV against rules:
g-gremlin validate --csv account_dim.csv --rules rules/account_dim.yaml --output .g_gremlin/validate_result.json # or run a formula pre-flight (no rules) with allowed sheet refs: g-gremlin validate --csv model.csv --refs "FY26_Assumptions,FY27_Assumptions"
- Inspect (profile) a sheet without modifying it:
g-gremlin inspect # uses state.json from last pull g-gremlin inspect -s SPREADSHEET_ID -r "Leads!A1:E200" -o .g_gremlin/profile.json
- Reads values and formulas, infers column types/stats, lists formula cells.
- Captures named ranges and a basic role per column (dimension/measure/derived/unknown) to help AI tools understand inputs vs metrics vs derived outputs.
- Writes
.g_gremlin/profile.json; running inspect before heavy workflows helps avoid overwriting formulas during push. - Semantic inspect adds
semantic_type(e.g.,sfdc_account_id,date_excel_serial), optionalvalidation, tabclassification, anddetected_sfdc_patternsto the JSON profile. - Use
--structureto capture formula dependency graphs (drivers, OFFSET lags, IFERROR wrappers, cross-sheet refs). - Use
--lintto scan formulas for common issues; combine with--fixto auto-quote bad sheet references.
- Repair inherited spreadsheets (the "broken model" rescue flow):
g-gremlin repair analyze -s SPREADSHEET_ID -r "Model!A1:Z100" -o repair_plan.json g-gremlin repair fix --plan repair_plan.json --auto -s SPREADSHEET_ID g-gremlin repair fix --plan repair_plan.json -s SPREADSHEET_ID # interactive for remaining items
- Use
repair stub-sheetsto create placeholders for missing tabs;repair patternsfor anomaly-only scans;repair diffto compare to a baseline tab/file. repair diffaccepts--baseline(CSV file),--baseline-tab, or--baseline-sheetand writes.g_gremlin/repair_diff.json.
- Use
- Send in the gremlin (hero command):
g-gremlin rescue SPREADSHEET_ID \ --band "J:M=FY26_Assumptions" \ --band "N:Q=FY27_Assumptions" \ --receipt
- Scans all tabs, fixes everything it safely can, prompts only when needed (e.g., missing sheet remap vs stub), writes a JSON report to
.g_gremlin/rescue_report.json, and a receipt to.g_gremlin/rescues/when requested. Flags:--dry-run,--auto,--output FILE,--receipt,--backup/--no-backup(placeholder),--throttle/--no-throttle(pacing + quota backoff; default on).
- Scans all tabs, fixes everything it safely can, prompts only when needed (e.g., missing sheet remap vs stub), writes a JSON report to
- Style a range (headers/stripes/fonts):
g-gremlin style -s SPREADSHEET_ID -r "Tab!A1:Q200" --header-fill "#1f4e79" --stripe --font-size 11
- Flags:
--header-rows,--header-bold/--no-header-bold,--header-fill,--header-font-color,--stripe/--no-stripe,--stripe-color,--font-size,--font-color.
- Flags:
- Write a CSV directly to a tab (creates it if missing):
g-gremlin write SPREADSHEET_ID --tab "Cleaned" --csv cleaned.csv --mode overwrite g-gremlin write SPREADSHEET_ID --tab "Cleaned" --csv delta.csv --mode append # with backup copy before writing: g-gremlin write SPREADSHEET_ID --tab "Master_Enriched" --csv master_final.csv --mode overwrite --backup
- Copy a tab safely (preserves cross-sheet references):
g-gremlin copy-tab SPREADSHEET_ID --source "MH 2026" --dest "Orion_FY27_Assumptions" --overwrite
- Merge multiple CSVs by key with optional source flags:
g-gremlin merge --sources cw_opps.csv,commure_opps.csv --key "Account ID" --output merged.csv --source-flag-col Source
- Fuzzy-match names between two files: ```bash g-gremlin fuzzy-match --source master_list.csv --source-col "Account Name" --target account_dim.csv --target-col AccountName --output matched.csv --threshold 0.8 - Merge multiple CSVs by key with optional source flags:
- Quick safety + doctor checks:
g-gremlin doctor SHEET_ID --live --sfdc --format json --output doctor.json g-gremlin safety
- Machine output standard:
--format json(alias--json) +--output PATH(use-for stdout).--json-summaryremains a shortcut on mutating commands.
- Machine output standard:
- Connect Apollo OAuth for FoundryMatch enrichment:
g-gremlin apollo setup --show-redirect-urls g-gremlin apollo auth --workspace-id YOUR_WORKSPACE_ID g-gremlin apollo doctor --dev
- Register the redirect URL printed by
g-gremlin apollo setupin Apollo (single callback for Sheets + CLI). - Full setup guide:
docs/APOLLO_OAUTH_SETUP.md.
- Register the redirect URL printed by
- Audit Zendesk and Salesforce identity drift with the starter workflow:
g-gremlin zendesk drift init --sf-csv ./salesforce_accounts.csv g-gremlin zendesk drift audit --config ./gremlin.zendesk_drift.yaml g-gremlin zendesk drift trace --config ./gremlin.zendesk_drift.yaml --sf-account-id 001ACME g-gremlin zendesk drift apply --plan ./artifacts/zendesk_drift/<run_id>/fix_plan.json
- Live apply is opt-in and requires both
--applyand--confirm-plan-hash. - Canonical workflow doc:
docs/runbooks/zendesk_drift_workflow.md.
- Live apply is opt-in and requires both
Recipes (agent-friendly)
- Deploy a spreadsheet model:
g-gremlin diff ...(optional) →g-gremlin lint ...→g-gremlin sync SHEET_ID --config g_gremlin.yaml(dry-run preview) →g-gremlin sync ... --apply(backed up; plan hash + run ID emitted). - Resolve accounts to SFDC + writeback:
g-gremlin pull ... --range "Accounts!A:Z" --output accounts.csv→ match domains withg-gremlin fg search/fg lookuporg-gremlin fuzzy-match→ stage updates in CSV →g-gremlin sfdc preview-push --csv updates.csv --object Account --id-column Id --fields "Type,Industry" --output preview→g-gremlin push --dry-run→g-gremlin push. - Build contacts from an account universe: export with
g-gremlin pull ... --range "Contacts!A:Z"→ enrich withg-gremlin enrich --csv contacts.csv --company-col Company --output enriched.csv→ dedupe/merge viag-gremlin fuzzy-matchormerge→ link IDs in the sheet withg-gremlin write/sync(prefer dry-run first). - Notify a webhook on completion (piped from another command):
g-gremlin sync SHEET_ID --config sync.yaml --apply --json-summary \ | g-gremlin notify webhook https://hooks.slack.com/... --apply
- Sequence contacts (Instantly, Smartlead, Apollo):
g-gremlin sequencer doctor --provider apollo g-gremlin sequencer campaigns list --provider instantly --format json g-gremlin sequencer push --provider smartlead --csv leads.csv --campaign-id XYZ --apply
- Credentials: set
G_GREMLIN_INSTANTLY_API_KEY,G_GREMLIN_SMARTLEAD_API_KEY, orG_GREMLIN_APOLLO_API_KEY(or useg-gremlin auth set ...).
- Credentials: set
Command map (everything in the CLI)
pull/write/push— core read/write with concurrency + formula safety.diff/merge/fuzzy-match/transform— local CSV utilities.inspect/inspect-formulas/find-refs/trace/check-bands/generate-lag— analysis/lineage helpers.repair/rescue/copy-tab/style— sheet fixing and formatting.sync/names/ranges/formula— config-driven writes, named range, and formula helpers.lint/validate/schema-validate— linting and schema validation.enrich/fullenrich/dedup/apify/hubspot/sfdc/zendesk/fg/outreach/gdocs/gslides— enrichment, dedup, and integrations (Apify, HubSpot, Salesforce, Zendesk, FoundryGraph, Outreach, Google Docs, Google Slides).apollo— Apollo OAuth connect/check/disconnect for FoundryMatch enrichment (server-held tokens).recipe/chain— prebuilt flows and chained pull→enrich→transform→write (with optional sink).query— DuckDB-backed read-only SQL over CSV/Parquet.sink— land CSV data to BigQuery, S3, GCS, Snowflake, or Redshift.snapshot— create/list/diff/restore spreadsheet snapshots with rollback support.notify— job-level notifications to webhooks (Slack/Discord/custom).sequencer— push contacts to Instantly, Smartlead, or Apollo sequences.provenance— sidecar cleanup;stats— gremlin achievements.autopilot— localhost web UI + CLI-runnable plays (workflow templates).docs/help— built-in docs and JSON introspection.
Autopilot Plays
Pre-built workflow templates that run without AI assistance. They extract data and metadata from connected systems into structured artifacts for documentation and analysis.
Quick Start
# List available plays (shows credential status)
g-gremlin autopilot play list
# Validate a play definition
g-gremlin autopilot play validate document_cpq
# Run a play (dry-run preview)
g-gremlin autopilot play run test_echo --dry-run
# Run a play with parameters
g-gremlin autopilot play run document_cpq -p output_format=markdown
# Specify output directory
g-gremlin autopilot play run document_cpq --output-dir ./my_output
Available CRM Documentation Plays
| Play | Description | Credentials |
|---|---|---|
document_cpq |
Document CPQ config (products, pricing, quotes) | salesforce |
document_lead_routing |
Document lead assignment and territories | salesforce |
document_case_routing |
Document case routing and entitlements | salesforce |
document_renewals |
Document renewal process and contracts | salesforce |
document_revenue_process |
Document opportunity stages and forecasting | salesforce |
test_echo |
Smoke test play (no external dependencies) | none |
Output Structure
Each play run creates an artifacts directory:
artifacts/<play_name>/<timestamp>/
metadata_inventory.md # Summary of extracted data
final_doc.md # Documentation skeleton
risks_and_edge_cases.md # Automated risk flags
run_summary.json # Execution details + step results
logs/ # Per-step execution logs
metadata/ # Retrieved SF metadata (flows, validations)
*.csv # Extracted data files
Operator Prompts
Each CRM play has a matching .prompt.md file in config/plays/ for AI-assisted synthesis:
- Run the play to extract data
- Use the operator prompt with an AI assistant to synthesize artifacts into client-ready documentation
Documentation
- PLAYBOOKS.md — Full user guide
- PLAY_AUTHORING.md — Create custom plays
- AUTOPILOT_SCOUTS.md — Scout catalog and configuration
Gremlin Triage (Sheets add-on)
One-click answer to “What should I do with this sheet?”
-
Endpoint:
POST /api/v2/gremlin/triage(headers:X-Sheets-Token), body:{ spreadsheet_id, sheet_name?, range? }(defaults to active sheet,A1:Z2000). -
Returns: deterministic summary (row/col counts, headers, SFDC ID detection, B2C/duplicate %, formula density),
suggested_actions(2-4 routed flows), optionalai_summaryfor Pro+ tiers. -
Client entry points: Sheets add-on sidebar button “🧭 What should I do with this?” and menu: FoundryMatch → Model Intelligence → 🧭 What should I do?
-
Actions route to existing flows (scan/fix/explain model, dedupe, match to accounts, SFDC enrich placeholders). Free tiers get deterministic summary; Pro/Scale/Unleashed add AI natural-language summary (Gemini).
-
Model building helpers:
# Pre-flight validate a CSV and allowed sheet refs g-gremlin validate --csv model.csv --refs "FY26_Assumptions,FY27_Assumptions" # Check column bands reference expected sheets g-gremlin check-bands --csv model.csv --band "J:M=FY26_Assumptions" --band "N:Q=FY27_Assumptions" # Generate lagged OFFSET formulas across a row g-gremlin generate-lag --source "E5:Q5" --lag 2 --output lag_row.csv # Copy a tab safely without breaking cross-sheet references g-gremlin copy-tab SPREADSHEET_ID --source "Template" --dest "Target" --overwrite
-
Salesforce helpers:
g-gremlin sfdc connect --org-alias canopy g-gremlin sfdc audit --csv account_dim.csv --id-column AccountId --object Account --report .g_gremlin/sfdc_audit.json g-gremlin sfdc enrich --csv account_dim.csv --id-column AccountId --object Account --fields Type,Industry --output account_enriched.csv # Aliasing fields: g-gremlin sfdc enrich --csv account_dim.csv --id-column AccountId --object Account --fields "CS_Scorecard_GPA__c AS 'CS Scorecard GPA'" --output account_enriched.csv # Preview SFDC changes from a CSV (does not push): g-gremlin sfdc preview-push --csv master_final.csv --object Account --id-column AccountId --fields Type,Industry --output sfdc_preview
sfdc auditchecks ID format, prefix, duplicates, and SFDC existence; default report path is.g_gremlin/sfdc_audit.json.sfdc preview-pushonly compares CSV vs SFDC and writes<output>.jsonand<output>.md; it never writes to SFDC.- Zendesk:
g-gremlin zendesk connect --subdomain your_subdomain --email you@domain.com --api-token ****
- Recipe: build a simple Account Dim from opp exports:
g-gremlin recipe build-account-dim --opp-sources cw_opps.csv,commure_opps.csv --key-column "Account ID" --name-column "Account Name" --output account_dim.csv # with optional master list attach g-gremlin recipe build-account-dim --opp-sources cw_opps.csv,commure_opps.csv --key-column "Account ID" --name-column "Account Name" --master-list master.csv --master-name-col "Account Name" --output account_dim.csv # optional: specify stage/close/amount columns to compute Has_ClosedWon, ARR_Estimate, latest close/end dates g-gremlin recipe build-account-dim --opp-sources cw.csv,commure.csv --key-column "Account ID" --name-column "Account Name" --stage-column "StageName" --close-date-column "CloseDate" --amount-column "Amount" --output account_dim.csv
- Recipe: enrich-from-sfdc (recipe wrapper for sfdc enrich):
g-gremlin recipe enrich-from-sfdc \ --csv account_dim.csv \ --id-column AccountId \ --object Account \ --fields Type,Industry,BillingCity \ --output account_enriched.csv
- Recipe: resolve-unmatched (surface rows missing IDs with SOQL hints):
g-gremlin recipe resolve-unmatched \ --csv account_dim.csv \ --id-column AccountId \ --name-column "Original_Master_Name" \ --output unmatched.csv
- Recipe: detect open renewals on accounts:
g-gremlin recipe detect-open-renewals \ --csv account_dim.csv \ --id-column AccountId \ --renewal-col "Open Renewal?" \ --renewal-id-col "Open Renewal ID" \ --output account_dim_with_renewals.csv
- Recipe: attach products from OpportunityLineItems per account:
g-gremlin recipe attach-products \ --csv account_dim_with_renewals.csv \ --id-column AccountId \ --products-column "Direct Products" \ --stage "7 - Closed Won" \ --output master_enriched.csv
- Recipe: Zendesk user stats by email:
g-gremlin recipe zendesk-user-stats \ --csv master_enriched.csv \ --email-column "Primary Contact Email" \ --tickets-count-col "ZD Ticket Count" \ --open-tickets-col "ZD Open Tickets" \ --last-ticket-col "ZD Last Ticket At" \ --output master_with_zd.csv
- Recipe: Zendesk org stats by org URL/ID:
g-gremlin recipe zendesk-org-stats \ --csv master_enriched.csv \ --org-column "Zendesk_URL" \ --total-tickets-col "ZD_Total_Tickets" \ --open-tickets-col "ZD_Open_Tickets" \ --last-ticket-col "ZD_Last_Ticket_At" \ --org-created-col "ZD_Created_At" \ --output master_with_org_stats.csv
- Transform a CSV (rename/add/calculated columns):
g-gremlin transform --input data.csv --output data_out.csv --rename Old=New --add-column CSM_Assigned --calc "Days_To_Renewal=Latest_End_Date-TODAY"
- Chain pull → enrich → transforms → write → sink:
</code></pre> </li> </ul> <p>g-gremlin chain --spreadsheet-id SPREADSHEET_ID --pull-range "Sheet!A1:Z" <br /> --enrich-object Account --enrich-fields "Type,Industry" --enrich-id-column AccountId <br /> --calc "Days_To_Renewal=Latest_End_Date-45997" --add-column "CSM_Assigned" <br /> --write-tab "Output_Tab"</p> <h1><a href="#user-content-chain-with-sink-to-bigquery" aria-hidden="true" class="anchor" id="user-content-chain-with-sink-to-bigquery"></a>Chain with sink to BigQuery</h1> <p>g-gremlin chain --spreadsheet-id SPREADSHEET_ID --pull-range "Data!A1:Z" <br /> --enrich-object Account --enrich-fields "Type,Industry" <br /> --sink bq --sink-project myproj --sink-dataset revops --sink-table enriched</p> <pre><code>- Chains pull → optional SFDC enrich → transforms → optional write → optional sink; default output lands at `.g_gremlin/chain/chain_output.csv`. - Manifest example at `.g_gremlin/state.json`: ```json { "spreadsheet_id": "...", "range": "Leads!A1:Z", "output_file": "leads.csv", "concurrency_token": "...", "pulled_at": "2025-01-01T12:34:56Z" }
Example flow
- Pull, merge two sources, fuzzy-match account names to a dimension, then write back:
g-gremlin pull SPREADSHEET_ID --range "Opps!A1:Z" --output opps.csv g-gremlin merge --sources opps.csv,commure_opps.csv --key "Account ID" --output merged.csv --source-flag-col Source g-gremlin fuzzy-match --source merged.csv --source-col "Account Name" --target account_dim.csv --target-col AccountName --output matched.csv --threshold 0.82 g-gremlin write SPREADSHEET_ID --tab "Matched" --csv matched.csv --mode overwrite
- Extend with SFDC enrich:
g-gremlin recipe build-account-dim --opp-sources opps.csv,commure_opps.csv --key-column "Account ID" --name-column "Account Name" --output account_dim.csv g-gremlin sfdc enrich --csv account_dim.csv --id-column "Account ID" --object Account --fields Type,Industry,BillingCity --output account_dim_enriched.csv g-gremlin write SPREADSHEET_ID --tab "Master_Enriched" --csv account_dim_enriched.csv --mode overwrite
- Pull, merge two sources, fuzzy-match account names to a dimension, then write back:
Backup & Rollback
All destructive commands support automatic backup snapshots with restore-on-error:
# Backup is ON by default for: write, push, repair fix, rescue, sync, chain, copy-tab, style g-gremlin write SPREADSHEET_ID --tab "Data" --csv data.csv # Creates pre-write snapshot g-gremlin write SPREADSHEET_ID --tab "Data" --csv data.csv --no-backup # Skip backup # Auto-rollback for CI/agents (restores on any error) g-gremlin push SPREADSHEET_ID --auto-rollback # Manual snapshot management g-gremlin snapshot create SPREADSHEET_ID --name "before-refactor" --tabs "Sheet1,Sheet2" g-gremlin snapshot list SPREADSHEET_ID --json g-gremlin snapshot diff SPREADSHEET_ID --name "before-refactor" g-gremlin snapshot restore SPREADSHEET_ID --name "before-refactor" g-gremlin snapshot restore SPREADSHEET_ID --name "before-refactor" --force # Override safety checks
Safety checks on restore:
- ETag mismatch: Blocked if spreadsheet modified since snapshot
- Shape drift: Blocked if rows/columns changed
- Use
--forceto override (data may be lost)
Data Sink (
g-gremlin sink)Land CSV data to external systems:
# BigQuery g-gremlin sink bq --csv accounts.csv --project myproj --dataset revops --table accounts --mode replace # S3 / GCS g-gremlin sink s3 --csv data.csv --bucket my-bucket --prefix exports/2025/ --compress g-gremlin sink gcs --csv data.csv --bucket my-bucket --prefix exports/2025/ --compress # Snowflake (via S3/GCS staging) g-gremlin sink snowflake --csv accounts.csv \ --stage-bucket my-staging --database ANALYTICS --schema REVOPS --table ACCOUNTS # Redshift (via S3 staging) g-gremlin sink redshift --csv accounts.csv \ --stage-bucket my-staging --host cluster.redshift.amazonaws.com \ --database analytics --schema revops --table accounts \ --iam-role arn:aws:iam::123456789:role/RedshiftCopyRole # Cleanup old staging files g-gremlin sink cleanup --older-than 7 --delete-from-cloud
Optional dependencies:
pip install g-gremlin[sink-bq] # BigQuery pip install g-gremlin[sink-s3] # S3 (boto3) pip install g-gremlin[sink-gcs] # GCS pip install g-gremlin[sink-snowflake] # Snowflake pip install g-gremlin[sink-redshift] # Redshift (psycopg2) pip install g-gremlin[sink-all] # All sinks
Notes
- Dependencies: click, google-auth, google-auth-oauthlib, google-api-python-client, requests, pyyaml.
Close the GTM Loop (Common Room → HeyReach → Docs)
- New integrations: Common Room (CSV ingest now; webhooks later), HeyReach activation, docs sinks (Notion + Outline + Confluence). They are independent entry points; use the ones you need.
- Safety: All mutation commands are dry-run by default; add
--applyto execute. Defaults are conservative (HeyReach 10/batch, 500ms delay, 100/day; Notion 3 req/sec built-in; Outline honorsRetry-Afteron 429s). - Notion updates replace the existing page body to keep re-publish idempotent. Large pages can update slowly because Notion requires per-block deletes, and if a replace fails mid-flight the next publish will repair the page body.
- Quick start (pick any provider):
g-gremlin auth set commonroom --key webhook_secret g-gremlin commonroom doctor g-gremlin commonroom import --source signals.csv --output enriched.csv --min-intent-score 0.6 --apply g-gremlin auth set heyreach --key api_key g-gremlin heyreach doctor g-gremlin heyreach enroll --csv enriched.csv --campaign-id ABC123 --apply g-gremlin auth set notion --key token g-gremlin docs doctor --provider notion g-gremlin docs publish-batch --csv enriched.csv --provider notion --database-id XYZ789 --template src/g_gremlin/templates/intent-brief.md.j2 --external-id-column signal_id --apply --profile prod g-gremlin auth set outline --key api_token g-gremlin auth set outline --key api_base --value https://wiki.example.com/api g-gremlin docs doctor --provider outline g-gremlin docs publish-batch --csv enriched.csv --provider outline --collection-id COLLECTION_ID --template src/g_gremlin/templates/intent-brief.md.j2 --external-id-column signal_id --apply --profile prod g-gremlin auth set confluence --key api_base --value https://acme.atlassian.net g-gremlin auth set confluence --key email --value user@acme.com g-gremlin auth set confluence --key api_token --value $CONFLUENCE_TOKEN g-gremlin docs doctor --provider confluence g-gremlin docs publish --provider confluence --markdown-file plan.md --space-key SPACE --apply
- Outline auth keys:
api_token,api_base(e.g.https://wiki.example.com/api), optionaldefault_collection_id. - Confluence auth keys:
api_base,email,api_token, optionaldefault_space_key,default_parent_id. Install with:pip install g-gremlin[docs-confluence] - Confluence sugar: blockquotes → panels,
[STATUS: ON TRACK]→ status lozenge,::: expand Titleblocks. - Optional chaining can come later via recipes; today each command stands alone. Deferred: Sheets writeback, Common Room webhook endpoint, richer template gallery.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file g_gremlin-0.1.26.tar.gz.
File metadata
- Download URL: g_gremlin-0.1.26.tar.gz
- Upload date:
- Size: 4.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
441874ae5739644d70c37e92d129e8576fdb04e0b219caf1dbc76441e264f570
|
|
| MD5 |
1e602e428b8fbce18d631179b5ee88cf
|
|
| BLAKE2b-256 |
6079bb989eb31817e8faa65ccffd3eb7fc1b06cd09af2ebcf1b692d4c592dde3
|
File details
Details for the file g_gremlin-0.1.26-py3-none-any.whl.
File metadata
- Download URL: g_gremlin-0.1.26-py3-none-any.whl
- Upload date:
- Size: 4.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
078f0c14c4148c2757beb70ce164bc7a2cb45d3feab97f3bc4145a9c95a3cabc
|
|
| MD5 |
a8c65fbc0666318962371c89b87eac29
|
|
| BLAKE2b-256 |
b1ee87fc8b45c6fb8e786401fac0a3800c0bcc7a66ec0851306b0f70f98d7778
|