Skip to content
kazma.
ع Star 7 Get Started

Native Skills

Native skills are in-process Python tools that ship with Kazma and are auto-registered on the LocalToolRegistry at startup (no subprocess, no network round-trip — unlike MCP servers). They live in kazma-skills/kazma_skills/native/ and are discovered by the NativeSkillLoader.

Skills always load even when an optional dependency is missing — calling a tool whose backend isn’t installed returns a friendly install-hint string instead of failing. Install the extra to activate that backend: pip install -e ".[document,database,web]".

For the full per-tool list (names, args, danger classification), see the Tools Catalog.


Headless browser control via Playwright for JS-rendered pages a plain HTTP fetch can’t read. Requires the [web] extra + a one-time browser install:

Terminal window
pip install -e ".[web]"
playwright install chromium
ToolWhat it does
browser_navigateOpen a URL, return title + visible body text
browser_clickClick an element by CSS selector
browser_extract_textExtract text from elements (or full body)
browser_screenshotFull-page screenshot → kazma-data/images/
browser_fill_formFill inputs from a {selector: value} mapping
browser_eval_jsEvaluate page-side JavaScript — HITL-gated as danger

A shared headless Chromium context persists across calls for efficiency.


Read and manage events. Three backends, selected by vault-backed credentials (the same store Gmail uses). Env vars are an override, not the source of truth.

  • Google Calendar — Settings → Email → Connect with Google (Calendar scope is included) or Connect Calendar. Tokens live in the vault as calendar.google.*. Enable the Google Calendar API in the Cloud project. A Gmail-only token is never sent to Calendar.
  • Microsoft Outlook (MS Graph) — Settings → Email → Connect with Microsoft (requests Calendars.ReadWrite). Reconnect if your grant is mail-only.
  • Sandbox — in-memory local calendar when no account is connected (provider=auto). Explicit provider="google" / "outlook" fails closed with a connect hint — it does not pretend to be an empty real calendar.
Terminal window
# Optional override only — prefer Settings → Email → Connect Calendar
export GOOGLE_CALENDAR_TOKEN=ya29...
ToolWhat it does
list_eventsList events in a time range (ISO 8601; defaults next 7 days)
create_eventCreate an event (summary, start, end, location, description)
update_eventUpdate an event by id
delete_eventDelete an event by id
find_free_slotsFind free slots of a given duration on a date

Use provider="auto" (default) to pick the first credentialed backend, or provider="google" / "outlook" to pin one.


Document platform (document_platform) — preferred

Section titled “Document platform (document_platform) — preferred”

Durable, tenant-scoped document intelligence via the shared DocumentIngestionService. Opaque IDs, restart-safe jobs, fenced reads. See Document Intelligence.

ToolPurpose
document_importWorkspace-safe file → durable ingest + parse
document_statusJob / document state
document_readPaged fenced content by opaque id
document_indexPublish into a Knowledge library (library_id)
document_searchSearch library (fenced hits)
document_cancelCancel job by id
document_convertConvert format → artifact id
document_redactPhysical PDF redaction → new artifact

No special [document] extra is required for the coordinator itself; optional render/redaction engines (pymupdf, WeasyPrint, LibreOffice) affect conversion and some PDF mutations only.

Document generation (document_generator) — simple / legacy path

Section titled “Document generation (document_generator) — simple / legacy path”

Create simple documents from structured content without the durable platform. Files land under kazma-data/documents/. Prefer document_platform when you need opaque IDs, ACL, jobs, or re-ingest.

Requires the [document] extra for PDF/DOCX/XLSX:

Terminal window
pip install -e ".[document]" # reportlab, python-docx, openpyxl
ToolOutputLibrary
generate_pdf.pdf in kazma-data/documents/reportlab
generate_docx.docxpython-docx
generate_xlsx.xlsx (multi-sheet)openpyxl
generate_markdown_doc.md(no dependency)

Each tool takes a title + sections ([{heading, body}]), or sheets for XLSX.

Arabic PDF fonts: generate_pdf uses the same IBM Plex Sans Arabic pair as the web UI and the Docusaurus docs (vendored under kazma_core/documents/assets/fonts/). Coverage is verified against Arabic presentation forms before the face is accepted; Amiri remains a naskh fallback if Plex is absent. Override the directory with KAZMA_DOCUMENT_FONT_DIR. When an Arabic font is active, all styles (title, headings, body) use it with TA_RIGHT alignment.


A built-in core tool (generate_image in kazma_core/tools/image_gen.py), not a native skill — multi-backend via image_backends/router.py:

BackendProvider keyNeeds
Pollinationspollinationsnothing (keyless, default)
DALL-E (OpenAI)dall-eOPENAI_API_KEY
Stability (SDXL)stabilitySTABILITY_API_KEY
Flux (FAL.ai)fluxFAL_KEY

provider="auto" picks the first credentialed backend. Override with KAZMA_IMAGE_PROVIDER. Output → kazma-data/images/.


Query databases read-only. SQLite is built-in; Postgres/MySQL/Mongo need the [database] extra:

Terminal window
pip install -e ".[database]" # psycopg, pymysql, pymongo
ToolWhat it does
inspect_db_schemaTables, columns, types, PKs, indexes
execute_db_queryRead-only SELECT (dialect auto-detected from URI scheme)
sqlite_queryConvenience alias for local SQLite

Dialect is detected from the db_uri scheme: postgresql:// → Postgres (psycopg3), mysql:// → MySQL (pymysql), mongodb:// → Mongo (JSON filter), else SQLite. All SQL dialects enforce read-only (SELECT/WITH only; write keywords blocked).


SkillToolsNotes
email_manageremail_list/get/send/delete/categorize/analyzeGmail, MS Graph, IMAP/POP, sandbox
git_github_managergit_status/commit/push_pull, github_create_pr/list_issues
secret_vaultvault_store/retrieve/list/deleteAES-256-GCM encrypted
advanced_web_crawlerweb_search_duckduckgo, crawl_page, parse_documentCSV/JSON/XLS/PDF parsing
system_health_monitorget_system_stats, list_active_processes, read_system_logs
task_scheduler_cronschedule_task, list_scheduled, cancel_scheduledHITL-gated
x_publisherx_status, x_post, x_delete_post, x_schedule_post, x_list_scheduled, x_cancel_scheduled_postOfficial X API v2. Chat writes always HITL. Web compose/plan is X Studio (/x)
environment_bootstrapperinstall_python_packages, install_npm_packages, check_environmentHITL-gated
visual_interpreter_generatoranalyze_local_image, generate_ui_mockup
arabic_bilingual_nlparabic_translate, hijri_convert, insert_diacritics
chat_platform_dispatcherdispatch_notification, send_approval_request, send_messagecross-platform notify
code_analyzer_linterlint_code, format_code, run_unit_testsruff + pytest
code-review, fix-lint, refactor-file, write-tests(manifest-only, no tools)prompt/workflow skills

See Creating Skills and the Skill Manifest Spec. A minimal skill is a directory under native/<name>/ with skill_manifest.yaml (metadata + tool keys) and tools.py (async functions whose names match the manifest keys). Tools are auto-discovered — no registration call needed.