Connectors
OIKB picks the connector from the start of the source value. Anything that doesn't match a prefix below is treated as a local folder.
hrida-oikb sync github:owner/repo --kb-id ...
hrida-oikb sync confluence:ENG --kb-id ...
hrida-oikb sync s3://bucket/prefix --kb-id ...
hrida-oikb sync servicenow:incident --kb-id ...Credentials come from environment variables. Set only the ones for the connectors you use: export them in your shell, or put them in the .env file next to the production Compose file.
Slack, Discord and Teams messages are split into one file per day, so a new message only re-uploads that day's file.
Code repositories
| Connector | Source syntax | Credentials |
|---|---|---|
| GitHub | github:owner/repo or github:owner/repo/subdir | GITHUB_TOKEN (private repos) |
| GitLab | gitlab:owner/repo or gitlab:owner/repo/subdir | GITLAB_TOKEN; GITLAB_URL for self-hosted |
| Bitbucket | bitbucket:owner/repo | BITBUCKET_USER, BITBUCKET_APP_PASSWORD |
The default branch is used unless you pass --branch (or branch: in the config). Limit to a folder with --path docs/ or path:.
Cloud storage
| Connector | Source syntax | Credentials | Extra |
|---|---|---|---|
| Amazon S3 | s3://bucket/prefix | Standard AWS credentials (profile, env vars, instance role) | s3 |
| Google Cloud Storage | gs://bucket/prefix | Standard Google credentials (service account) | gcs |
| Azure Blob | az://container/prefix | AZURE_STORAGE_CONNECTION_STRING (required; no managed identity) | azure |
| Cloudflare R2 | r2://bucket/prefix | R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY | r2 |
| Oracle Cloud | oci://bucket/prefix | OCI config, plus OCI_NAMESPACE | oracle |
| Dropbox | dropbox:/path | DROPBOX_TOKEN | dropbox |
| Google Drive | gdrive:<folder-id> | GOOGLE_APPLICATION_CREDENTIALS (service account JSON) | gdrive |
| SharePoint | sharepoint:site.sharepoint.com or sharepoint:site.sharepoint.com/Library (default library Documents) | See SharePoint | sharepoint-cert for certificate auth |
| Egnyte | egnyte:/path | EGNYTE_DOMAIN, EGNYTE_TOKEN |
Object stores (S3, GCS, Azure, R2, Oracle) use each object's ETag as its checksum, so unchanged files aren't downloaded.
SharePoint
Two ways to authenticate. Set one, not both:
Client secret
export SHAREPOINT_TENANT_ID=...
export SHAREPOINT_CLIENT_ID=...
export SHAREPOINT_CLIENT_SECRET=...Certificate (recommended for production)
pip install "./hrida_oikb-1.0.3-py3-none-any.whl[sharepoint-cert]"
export SHAREPOINT_TENANT_ID=...
export SHAREPOINT_CLIENT_ID=...
export SHAREPOINT_CERTIFICATE_PATH=/path/to/cert.pem
export SHAREPOINT_CERTIFICATE_PASSWORD=... # only if the key is encryptedThe PEM file must contain both the private key and the certificate.
Wikis & knowledge bases
| Connector | Source syntax | Credentials |
|---|---|---|
| Confluence | confluence:SPACE_KEY or confluence:https://company.atlassian.net/SPACE_KEY | CONFLUENCE_URL, CONFLUENCE_USER, CONFLUENCE_TOKEN |
| Notion | notion:<page-or-database-id> | NOTION_TOKEN |
| BookStack | bookstack: | BOOKSTACK_URL, BOOKSTACK_TOKEN_ID, BOOKSTACK_TOKEN_SECRET |
| Discourse | discourse: or discourse:<category> | DISCOURSE_URL, DISCOURSE_API_KEY, DISCOURSE_API_USERNAME |
| GitBook | gitbook:<space-id> | GITBOOK_TOKEN |
| Guru | guru: or guru:<collection> | GURU_USER, GURU_TOKEN |
| Outline | outline: or outline:<collection> | OUTLINE_URL, OUTLINE_TOKEN |
| Slab | slab:<org> | SLAB_TOKEN (SLAB_ORG as fallback) |
| Document360 | document360:<project-id> | DOCUMENT360_TOKEN |
| DokuWiki | dokuwiki: or dokuwiki:<namespace> | DOKUWIKI_URL, DOKUWIKI_USER, DOKUWIKI_PASSWORD |
| Google Sites | gsites:<site-id> | GOOGLE_SITES_TOKEN (extra gsites) |
Ticketing & project management
| Connector | Source syntax | Credentials |
|---|---|---|
| Jira | jira:PROJECT with optional ?jql=...&fields=...&format=markdown&limit=... | JIRA_URL, JIRA_USER, JIRA_TOKEN |
| ServiceNow | servicenow:<table> (default incident) with optional ?query=...&fields=...&format=...&limit=... (default limit 1000) | SERVICENOW_INSTANCE, SERVICENOW_USER, SERVICENOW_PASSWORD |
| Linear | linear:<team> | LINEAR_TOKEN |
| Zendesk | zendesk: or zendesk:<subdomain> | ZENDESK_SUBDOMAIN, ZENDESK_USER, ZENDESK_TOKEN |
| Freshdesk | freshdesk: or freshdesk:<domain> | FRESHDESK_DOMAIN, FRESHDESK_TOKEN |
| Asana | asana:<project-id> | ASANA_TOKEN |
| ClickUp | clickup:<space-id> | CLICKUP_TOKEN |
| Airtable | airtable:<base-id> or airtable:<base-id>/<table> (default Table 1) | AIRTABLE_TOKEN |
| ProductBoard | productboard: | PRODUCTBOARD_TOKEN |
Example: only open bugs from Jira, as Markdown:
source: "jira:ENG?jql=type=Bug AND status!=Done&format=markdown&limit=500"Messaging & email
| Connector | Source syntax | Credentials |
|---|---|---|
| Slack | slack:<channel-id> | SLACK_TOKEN |
| Discord | discord:<channel-id> | DISCORD_TOKEN |
| Microsoft Teams | teams:<team-id>/<channel-id> | TEAMS_TENANT_ID, TEAMS_CLIENT_ID, TEAMS_CLIENT_SECRET |
| Gmail | gmail:user@domain.com or gmail:user@domain.com?q=<search> | GOOGLE_APPLICATION_CREDENTIALS (extra gmail) |
| Zulip | zulip: or zulip:<stream> | ZULIP_URL, ZULIP_EMAIL, ZULIP_KEY |
Meetings, forums, sales & web
| Connector | Source syntax | Credentials |
|---|---|---|
| Gong | gong: | GONG_ACCESS_KEY, GONG_ACCESS_KEY_SECRET |
| Fireflies | fireflies: | FIREFLIES_TOKEN |
| XenForo | xenforo: or xenforo:<forum-id> | XENFORO_URL, XENFORO_KEY |
| Salesforce | salesforce: | SALESFORCE_URL, SALESFORCE_TOKEN |
| HubSpot | hubspot: | HUBSPOT_TOKEN |
| Website | web:https://example.com | None (extra web) |
Local filesystem
Any path, for example ./docs or /srv/handbook. Supports every file type, scans recursively and respects .hrida-oikbignore.
Optional extras
These connectors need client libraries that aren't installed by default:
| Extra | Connectors |
|---|---|
s3 | Amazon S3 |
gcs | Google Cloud Storage |
azure | Azure Blob |
r2 | Cloudflare R2 |
oracle | Oracle Cloud |
dropbox | Dropbox |
gdrive | Google Drive |
gmail | Gmail |
gsites | Google Sites |
web | Website crawler |
sharepoint-cert | SharePoint certificate auth |
pip install "./hrida_oikb-1.0.3-py3-none-any.whl[s3,gdrive]" # several
pip install "./hrida_oikb-1.0.3-py3-none-any.whl[all]" # everythingAll other connectors work with the base install.