Skip to main content

concinno-skills-knowledge

Knowledge-base agent skills for Concinno. Native Python API, no MCP required. MIT / Apache-2.0 / BSD licensed SDKs only — we deliberately keep the Concinno ecosystem permissive-licence-clean.

Status

MVP (0.1.0) — five one-shot tools covering Notion, Confluence, and local Obsidian vaults:

Tool class Platform Underlying SDK SDK licence
NotionPage Notion notion-client MIT
NotionDatabase Notion (DB) notion-client MIT
ConfluencePage Atlassian Cloud atlassian-python-api Apache-2.0
ObsidianVault Obsidian (local) stdlib + python-frontmatter MIT
ObsidianDailyNote Obsidian (local) stdlib + python-frontmatter MIT

Dendron, Logseq, and Evernote are intentionally deferred until a maintained Python SDK with a permissive licence exists. Atlassian Server / Data Center is out of scope (Atlassian stopped selling it in 2024).

Install

pip install concinno-skills-knowledge

All three SDK dependencies are hard requirements and pulled in automatically. python-frontmatter is used by the Obsidian tools only; it is <50kB so we do not gate it behind an optional extra.

Credentials

All credentials live under well-known keys in the Concinno CredentialStore, which reads (in order):

  1. Process runtime overrides via CredentialStore.set(...).
  2. Env var CONCINNO_CRED_<UPPER_KEY>.
  3. ~/.concinno/credentials.json.
Key Env var
notion_token CONCINNO_CRED_NOTION_TOKEN
confluence_url CONCINNO_CRED_CONFLUENCE_URL
confluence_email CONCINNO_CRED_CONFLUENCE_EMAIL
confluence_api_token CONCINNO_CRED_CONFLUENCE_API_TOKEN
obsidian_vault_path CONCINNO_CRED_OBSIDIAN_VAULT_PATH

Example ~/.concinno/credentials.json:

{
  "notion_token": "ntn_...",
  "confluence_url": "https://mycompany.atlassian.net",
  "confluence_email": "me@mycompany.com",
  "confluence_api_token": "atl-...",
  "obsidian_vault_path": "C:\\Users\\me\\Vault"
}

Obsidian has no server, but the vault root path lives in the same credential store for UX consistency — users configure everything in one place. Notion expects an integration token from https://www.notion.so/profile/integrations; Confluence expects an Atlassian API token from https://id.atlassian.com/manage-profile/security/api-tokens.

If any required credential is missing the tool returns {"error": "no <service> credentials — set via CredentialStore or env ..."} rather than crashing.

Usage via Concinno ToolRegistry

When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry auto-mounts every knowledge tool:

import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"

from concinno.tools.registry import get_default_registry

reg = get_default_registry()
expected = {
    "NotionPage",
    "NotionDatabase",
    "ConfluencePage",
    "ObsidianVault",
    "ObsidianDailyNote",
}
assert expected <= set(reg.list_deferred())

page = reg.get("NotionPage")
page.call(action="search", query="agent", limit=20)

Direct Python usage

from concinno_skills_knowledge import (
    NotionPage,
    NotionDatabase,
    ConfluencePage,
    ObsidianVault,
    ObsidianDailyNote,
)

# Notion
NotionPage().call(action="search", query="roadmap", limit=10)
NotionPage().call(action="get", page_id="...")
NotionDatabase().call(
    action="query",
    database_id="...",
    filter={"property": "Status", "status": {"equals": "Done"}},
)

# Confluence
ConfluencePage().call(action="search", query="platform", limit=30)
ConfluencePage().call(
    action="create",
    space="DOCS",
    title="Agent design",
    body="<p>draft</p>",
)

# Obsidian (local)
ObsidianVault().call(action="search", query="reranker")
ObsidianVault().call(
    action="write",
    path="notes/today.md",
    content="hello",
    frontmatter={"tags": ["agent"]},
)
ObsidianDailyNote().call(action="append", text="- shipped 0.1.0")
ObsidianDailyNote().call(action="read")  # today's note

All tools return {"ok": True, ...} on success or {"error": "..."} on failure — same shape as the other Concinno built-in tools. No exceptions escape the call() surface.

Safety

ObsidianVault and ObsidianDailyNote resolve every path argument through Path.is_relative_to(vault_root) after a canonical resolve, so ../ traversal or absolute paths escape the vault are rejected with {"error": "path escapes vault subtree: ..."}. Absolute paths are also rejected up-front.

NotionPage.search and NotionDatabase.query cap limit at 100 (the Notion API's own maximum); ConfluencePage.search caps at 100 as well. ObsidianVault.search defaults to 50 hits with a 500 hard cap and returns "truncated": true when the limit is reached.

Concurrency

All five tools set is_concurrency_safe = False. KB platforms either have strict rate limits (Notion 3 req/s, Confluence tighter) or open a session-per-call (Obsidian writes); the Concinno scheduler will honour this automatically.

License

Apache-2.0.

Metadata

Release files for concinno-skills-knowledge 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for concinno-skills-knowledge 0.1.0
File Size Uploaded
concinno_skills_knowledge-0.1.0.tar.gz 47.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for concinno-skills-knowledge 0.1.0
File Interpreter ABI Platform
concinno_skills_knowledge-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 65.4 kB

Release files / concinno_skills_knowledge-0.1.0.tar.gz

Download URL concinno_skills_knowledge-0.1.0.tar.gz
Size 47.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3c188c764c8bc13faff0dc4f46c1dffe63ed233697d6b9cab95407b4f6f97eaa
BLAKE2b-256 checksum
How to use checksums
2872f5d223c6f37fe949985d1716f6cfc331868acfb5150e8cecfc4f9ff675b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release files / concinno_skills_knowledge-0.1.0-py3-none-any.whl

Download URL concinno_skills_knowledge-0.1.0-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5fad7e13ff082e899117648967eb19c037cbfea0ec4c1636e1f74ff48d82f56b
BLAKE2b-256 checksum
How to use checksums
cb92a34649718625118301ea3692257a1dbb58c8db70d8e4439ba81deb61a479
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page