Crawler Summary

playstore-kmp answer-first brief

Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundleRelease", "KMP release", "play store kmp", "Compose Multiplatform release", "shared module variant", or "androidApp bundleRelease". --- name: playstore-kmp description: > Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundl Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Freshness

Last checked 4/15/2026

Best For

playstore-kmp is best for general automation workflows where OpenClaw compatibility matters.

Not Ideal For

Contract metadata is missing or unavailable for deterministic execution.

Evidence Sources Checked

editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack

Claim this agent
Agent DossierGitHubSafety: 94/100

playstore-kmp

Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundleRelease", "KMP release", "play store kmp", "Compose Multiplatform release", "shared module variant", or "androidApp bundleRelease". --- name: playstore-kmp description: > Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundl

OpenClawself-declared

Public facts

4

Change events

1

Artifacts

0

Freshness

Apr 15, 2026

Verifiededitorial-contentNo verified compatibility signals

Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Trust evidence available

Trust score

Unknown

Compatibility

OpenClaw

Freshness

Apr 15, 2026

Vendor

Tacuchi

Artifacts

0

Benchmarks

0

Last release

Unpublished

Executive Summary

Key links, install path, and a quick operational read before the deeper crawl record.

Verifiededitorial-content

Summary

Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.

Setup snapshot

git clone https://github.com/Tacuchi/playstore-kmp.git
  1. 1

    Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.

  2. 2

    Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Evidence Ledger

Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.

Verifiededitorial-content
Vendor (1)

Vendor

Tacuchi

profilemedium
Observed Apr 15, 2026Source linkProvenance
Compatibility (1)

Protocol compatibility

OpenClaw

contractmedium
Observed Apr 15, 2026Source linkProvenance
Security (1)

Handshake status

UNKNOWN

trustmedium
Observed unknownSource linkProvenance
Integration (1)

Crawlable docs

6 indexed pages on the official domain

search_documentmedium
Observed Apr 15, 2026Source linkProvenance

Release & Crawl Timeline

Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.

Self-declaredagent-index

Artifacts Archive

Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.

Self-declaredGITHUB OPENCLEW

Extracted files

0

Examples

6

Snippets

0

Languages

typescript

Parameters

Executable Examples

bash

keytool -genkeypair \
  -alias upload \
  -keyalg RSA -keysize 2048 \
  -validity 10000 \
  -storetype PKCS12 \
  -keystore upload-keystore.jks

properties

storePassword=<password>
keyPassword=<same-password-as-store>
keyAlias=upload
storeFile=<absolute-or-relative-path-to-upload-keystore.jks>

gitignore

keystore.properties
*.jks
*.keystore
local.properties

kotlin

import java.util.Properties
import java.io.FileInputStream

val keystoreProperties = Properties().apply {
    val file = rootProject.file("keystore.properties")
    if (file.exists()) load(FileInputStream(file))
}

android {
    signingConfigs {
        create("release") {
            keyAlias = keystoreProperties["keyAlias"] as String
            keyPassword = keystoreProperties["keyPassword"] as String
            storeFile = file(keystoreProperties["storeFile"] as String)
            storePassword = keystoreProperties["storePassword"] as String
        }
    }
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            signingConfig = signingConfigs.getByName("release")
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

kotlin

// In shared/build.gradle.kts
android {
    defaultConfig {
        consumerProguardFiles("consumer-rules.pro")
    }
}

proguard

# Kotlin (always needed with minification)
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**

# Coroutines
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembers class kotlinx.coroutines.** { volatile <fields>; }

# kotlinx.serialization
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
-keep,includedescriptorclasses class **$$serializer { *; }
-keepclassmembers class * { @kotlinx.serialization.Serializable *; }

# Ktor Client (engine loaded via ServiceLoader — R8 strips it)
-keep class io.ktor.** { *; }
-dontwarn io.ktor.**
-keep class io.ktor.client.engine.** { *; }

# kotlinx.datetime (JVM implementation classes stripped by R8)
-keep class kotlinx.datetime.** { *; }
-dontwarn kotlinx.datetime.**

Docs & README

Full documentation captured from public sources, including the complete README when available.

Self-declaredGITHUB OPENCLEW

Docs source

GITHUB OPENCLEW

Editorial quality

ready

Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundleRelease", "KMP release", "play store kmp", "Compose Multiplatform release", "shared module variant", or "androidApp bundleRelease". --- name: playstore-kmp description: > Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundl

Full README

name: playstore-kmp description: > Guide and review the preparation of a Kotlin Multiplatform (KMP) project for Google Play Store release. Covers module detection, keystore generation, signing configuration, ProGuard/R8 with consumerProguardFiles, variant alignment, and AAB build. Use when the user wants to publish, release, deploy, sign, or prepare a KMP app for Play Store, or when they mention "composeApp bundleRelease", "KMP release", "play store kmp", "Compose Multiplatform release", "shared module variant", or "androidApp bundleRelease".

Play Store Release — Kotlin Multiplatform

Build a signed Android App Bundle (AAB) from a KMP project, ready for Google Play Store.

Before You Start — Assess the KMP Project Structure

KMP release is fundamentally a multi-module problem. Assess the structure BEFORE touching any files:

  1. Which is the Android module? Look for the directory containing an android {} block with applicationId:

    • composeApp/ → Compose Multiplatform template (KMP Wizard default)
    • androidApp/ → Classic KMP template
    • Custom name → Read settings.gradle.kts for include(":moduleName")
    • This module name determines: build command, output path, and AAB filename
  2. Shared module structure? Check for modules that the Android module depends on:

    • Has android {} with libraryNamespace → It's a KMP library module; needs consumerProguardFiles
    • No android {} → Pure common code; no ProGuard concerns from this module
    • Multiple shared modules → Each one with reflection-heavy deps needs its own consumer rules
  3. Variant alignment? Check if shared/library modules define release build type:

    • Has release build type → Variants will match, no action needed
    • Missing release → Android module fails with "Could not resolve :shared variant"
    • Fix: matchingFallbacks += listOf("release", "debug") in consuming module
  4. KMP libraries in use? Check shared module dependencies:

    • Ktor → Needs ProGuard rules (engine loaded via ServiceLoader)
    • kotlinx.serialization → Needs rules (R8 strips generated serializers)
    • kotlinx.datetime → Needs rules (R8 strips JVM implementation classes)
    • Compose Multiplatform UI → Generally safe (Compose compiler handles it)
  5. Existing keystore? Ask the user before generating a new one

    • Already has .jks → Reuse it, skip Step 1
    • First release → Generate new keystore
  6. AGP + Kotlin version compatibility? Check libs.versions.toml:

    • AGP and Kotlin plugin versions must be compatible (see Kotlin compatibility matrix)
    • AGP 8+ requires Java 17

Workflow

| Step | Action | Key file | |------|--------|----------| | 1 | Generate upload keystore | upload-keystore.jks | | 2 | Create credentials file | keystore.properties | | 3 | Configure signing in Android module | <module>/build.gradle.kts | | 4 | Configure ProGuard / R8 (by module) | <module>/proguard-rules.pro + shared/consumer-rules.pro | | 5 | Build release AAB | CLI | | 6 | Verify output | CLI + checklist |


Step 1 — Generate Upload Keystore

keytool -genkeypair \
  -alias upload \
  -keyalg RSA -keysize 2048 \
  -validity 10000 \
  -storetype PKCS12 \
  -keystore upload-keystore.jks

Critical details:

  • -validity 10000 = ~27 years. Google requires validity beyond Oct 22 2033.
  • -storetype PKCS12 — avoids JKS migration warnings. But with PKCS12, store password and key password must be identical. keytool silently uses the store password for the key. Different passwords → signing fails later with misleading "Cannot recover key" error.
  • Store the .jks outside the project. Recommended: ~/.android/keystores/ or a secrets manager.

Step 2 — Create Credentials File

Create keystore.properties in the project root (must NOT be committed):

storePassword=<password>
keyPassword=<same-password-as-store>
keyAlias=upload
storeFile=<absolute-or-relative-path-to-upload-keystore.jks>

Add to .gitignore:

keystore.properties
*.jks
*.keystore
local.properties

Step 3 — Configure Signing in Gradle

KMP is Kotlin DSL only (.gradle.kts). Claude knows Gradle signing config syntax. These are the KMP-specific traps:

  • Module location: The android {} block lives in the Android module (composeApp/ or androidApp/), NOT in root build.gradle.kts. KMP root build file typically only applies plugins.
  • rootProject.file() scope: keystore.properties is in project root. From within composeApp/build.gradle.kts, rootProject.file() correctly resolves to root. project.file() would look inside composeApp/.
  • signingConfigs before buildTypes: Gradle evaluates blocks in declaration order. Reference before declaration → build error.
import java.util.Properties
import java.io.FileInputStream

val keystoreProperties = Properties().apply {
    val file = rootProject.file("keystore.properties")
    if (file.exists()) load(FileInputStream(file))
}

android {
    signingConfigs {
        create("release") {
            keyAlias = keystoreProperties["keyAlias"] as String
            keyPassword = keystoreProperties["keyPassword"] as String
            storeFile = file(keystoreProperties["storeFile"] as String)
            storePassword = keystoreProperties["storePassword"] as String
        }
    }
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            signingConfig = signingConfigs.getByName("release")
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

Step 4 — ProGuard / R8 (By Module)

R8 is NOT enabled by default — you must set isMinifyEnabled = true. KMP has a critical multi-module nuance: rules must be in the right module.

Where rules go:

| Rule location | Applies to | Use for | |---------------|-----------|---------| | composeApp/proguard-rules.pro | Only composeApp's own code | App-level rules, signing config | | shared/consumer-rules.pro | Propagated to any module that depends on shared | Library code using reflection (Ktor, serialization) |

The Android module's proguard-rules.pro does NOT apply to library modules. If shared/ uses Ktor or kotlinx.serialization, those rules MUST go in shared/consumer-rules.pro:

// In shared/build.gradle.kts
android {
    defaultConfig {
        consumerProguardFiles("consumer-rules.pro")
    }
}

Rules by KMP dependency (add only what applies):

# Kotlin (always needed with minification)
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**

# Coroutines
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepclassmembers class kotlinx.coroutines.** { volatile <fields>; }

# kotlinx.serialization
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keepclassmembers class kotlinx.serialization.json.** { *** Companion; }
-keep,includedescriptorclasses class **$$serializer { *; }
-keepclassmembers class * { @kotlinx.serialization.Serializable *; }

# Ktor Client (engine loaded via ServiceLoader — R8 strips it)
-keep class io.ktor.** { *; }
-dontwarn io.ktor.**
-keep class io.ktor.client.engine.** { *; }

# kotlinx.datetime (JVM implementation classes stripped by R8)
-keep class kotlinx.datetime.** { *; }
-dontwarn kotlinx.datetime.**

Shared Module Variant Mismatch — The #1 KMP Build Trap

Error: Could not resolve :shared or No matching variant of :shared was found

This happens when the shared module doesn't define a release build type but the Android module tries to resolve one for bundleRelease.

Fix in the consuming module (preferred — doesn't require modifying shared):

// composeApp/build.gradle.kts
android {
    buildTypes {
        release {
            matchingFallbacks += listOf("release", "debug")
        }
    }
}

Or fix in the shared module — explicitly declare build types:

// shared/build.gradle.kts
android {
    buildTypes {
        release { }
        debug { }
    }
}

Step 5 — Build Release AAB

# Module name determines the command — use the correct one:
./gradlew :composeApp:bundleRelease
# or
./gradlew :androidApp:bundleRelease

Output path — filename matches the module name, NOT app-release.aab:

  • composeApp/build/outputs/bundle/release/composeApp-release.aab
  • androidApp/build/outputs/bundle/release/androidApp-release.aab

Step 6 — Verify Before Upload

# Adjust module name in paths below (composeApp or androidApp)

# Verify signing — confirm alias is "upload", NOT "androiddebugkey"
keytool -printcert -jarfile composeApp/build/outputs/bundle/release/composeApp-release.aab

# Verify version (requires bundletool)
bundletool dump manifest --bundle=composeApp/build/outputs/bundle/release/composeApp-release.aab \
  | grep -E "versionCode|versionName"

Checklist:

  • [ ] AAB signed with upload key (not debug)
  • [ ] versionCode higher than the previous upload
  • [ ] keystore.properties and *.jks in .gitignore
  • [ ] isMinifyEnabled = true and isShrinkResources = true both set
  • [ ] Shared module consumerProguardFiles configured (if shared uses reflection-heavy libs)
  • [ ] Variant alignment verified (shared module has release build type or matchingFallbacks set)

NEVER Do

  1. NEVER assume output is app-release.aab — KMP output filename matches the module name: composeApp-release.aab or androidApp-release.aab. CI scripts, upload commands, and Fastlane configs that hardcode app-release.aab will silently fail to find the file or upload nothing.

  2. NEVER use Groovy DSL in a KMP project — The KMP Gradle plugin only supports .gradle.kts. A .gradle file in a KMP module silently breaks multiplatform dependency resolution. Do not convert to Groovy, do not mix DSLs.

  3. NEVER put ProGuard rules only in the Android module — Rules in composeApp/proguard-rules.pro only apply to that module's direct code. If shared/ uses Ktor or kotlinx.serialization, the shared module MUST publish its own rules via consumerProguardFiles("consumer-rules.pro"). Otherwise R8 strips shared module classes and the app crashes at runtime with no build-time warning.

  4. NEVER ignore variant mismatch errors — "Could not resolve :shared variant" is NOT a generic Gradle issue. It means the shared module's build types don't align with the Android module. Fix with matchingFallbacks, not by deleting the dependency.

  5. NEVER set different store/key passwords with PKCS12keytool silently uses store password for key. Different passwords → signing fails with "Cannot recover key" (misleading — it's a password mismatch).

  6. NEVER skip testing the signed AAB on a real device — R8 stripping in multi-module KMP is invisible until runtime. Ktor engine stripped → network calls crash. Serialization stripped → data parsing crashes. These only manifest in release builds.


Common Errors

| Error | Cause | Fix | |-------|-------|-----| | ClassNotFoundException: io.ktor.* at runtime | R8 stripped Ktor engine (ServiceLoader) | Add Ktor -keep rules in shared/consumer-rules.pro | | kotlinx.serialization crash at runtime | @Serializable serializers stripped by R8 | Add serialization rules in shared consumer-rules | | Could not resolve :shared variant | Shared module missing release build type | Add matchingFallbacks in consuming module | | kotlinx.datetime missing at runtime | R8 removed JVM datetime implementation | Add -keep class kotlinx.datetime.** | | AAB not found by CI/upload script | Script looks for app-release.aab | Use <module>-release.aab (module name as prefix) | | Missing class: ... during R8 | R8 strips classes used via reflection | Add -keep rules from build error output |


Gotchas

  1. AGP + Kotlin version matrix — KMP requires compatible AGP and Kotlin plugin versions. Mismatches produce cryptic "Cannot find plugin" or "Unsupported metadata version" errors. Always check libs.versions.toml for version alignment. AGP 9/10 introduce breaking changes in the library plugin API.

  2. Multiple shared modules — If the project has core/, data/, domain/ as separate KMP modules, EACH module that uses reflection-heavy libraries needs its own consumerProguardFiles. One missing module = one runtime crash.

  3. App Signing by Google Play — Google re-signs your app with their app signing key. The keystore you generate is the upload key only. If you lose it, request a reset through Play Console (takes days, requires identity verification).

Contract & API

Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.

MissingGITHUB OPENCLEW

Contract coverage

Status

missing

Auth

None

Streaming

No

Data region

Unspecified

Protocol support

OpenClaw: self-declared

Requires: none

Forbidden: none

Guardrails

Operational confidence: low

No positive guardrails captured.
Invocation examples
curl -s "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/snapshot"
curl -s "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/contract"
curl -s "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/trust"

Reliability & Benchmarks

Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.

Missingruntime-metrics

Trust signals

Handshake

UNKNOWN

Confidence

unknown

Attempts 30d

unknown

Fallback rate

unknown

Runtime metrics

Observed P50

unknown

Observed P95

unknown

Rate limit

unknown

Estimated cost

unknown

Do not use if

Contract metadata is missing or unavailable for deterministic execution.
No benchmark suites or observed failure patterns are available.

Media & Demo

Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.

Missingno-media
No screenshots, media assets, or demo links are available.

Related Agents

Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.

Self-declaredprotocol-neighbors
GITHUB_REPOSactivepieces

Rank

70

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

Traction

No public download signal

Freshness

Updated 2d ago

OPENCLAW
GITHUB_REPOScherry-studio

Rank

70

AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs

Traction

No public download signal

Freshness

Updated 5d ago

MCPOPENCLAW
GITHUB_REPOSAionUi

Rank

70

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

Traction

No public download signal

Freshness

Updated 6d ago

MCPOPENCLAW
GITHUB_REPOSCopilotKit

Rank

70

The Frontend for Agents & Generative UI. React + Angular

Traction

No public download signal

Freshness

Updated 23d ago

OPENCLAW
Machine Appendix

Contract JSON

{
  "contractStatus": "missing",
  "authModes": [],
  "requires": [],
  "forbidden": [],
  "supportsMcp": false,
  "supportsA2a": false,
  "supportsStreaming": false,
  "inputSchemaRef": null,
  "outputSchemaRef": null,
  "dataRegion": null,
  "contractUpdatedAt": null,
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Invocation Guide

{
  "preferredApi": {
    "snapshotUrl": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/snapshot",
    "contractUrl": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/contract",
    "trustUrl": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/trust"
  },
  "curlExamples": [
    "curl -s \"https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/snapshot\"",
    "curl -s \"https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/contract\"",
    "curl -s \"https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/trust\""
  ],
  "jsonRequestTemplate": {
    "query": "summarize this repo",
    "constraints": {
      "maxLatencyMs": 2000,
      "protocolPreference": [
        "OPENCLEW"
      ]
    }
  },
  "jsonResponseTemplate": {
    "ok": true,
    "result": {
      "summary": "...",
      "confidence": 0.9
    },
    "meta": {
      "source": "GITHUB_OPENCLEW",
      "generatedAt": "2026-04-17T00:50:48.931Z"
    }
  },
  "retryPolicy": {
    "maxAttempts": 3,
    "backoffMs": [
      500,
      1500,
      3500
    ],
    "retryableConditions": [
      "HTTP_429",
      "HTTP_503",
      "NETWORK_TIMEOUT"
    ]
  }
}

Trust JSON

{
  "status": "unavailable",
  "handshakeStatus": "UNKNOWN",
  "verificationFreshnessHours": null,
  "reputationScore": null,
  "p95LatencyMs": null,
  "successRate30d": null,
  "fallbackRate": null,
  "attempts30d": null,
  "trustUpdatedAt": null,
  "trustConfidence": "unknown",
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Capability Matrix

{
  "rows": [
    {
      "key": "OPENCLEW",
      "type": "protocol",
      "support": "unknown",
      "confidenceSource": "profile",
      "notes": "Listed on profile"
    }
  ],
  "flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}

Facts JSON

[
  {
    "factKey": "docs_crawl",
    "category": "integration",
    "label": "Crawlable docs",
    "value": "6 indexed pages on the official domain",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true
  },
  {
    "factKey": "vendor",
    "category": "vendor",
    "label": "Vendor",
    "value": "Tacuchi",
    "href": "https://github.com/Tacuchi/playstore-kmp",
    "sourceUrl": "https://github.com/Tacuchi/playstore-kmp",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-04-15T00:19:44.714Z",
    "isPublic": true
  },
  {
    "factKey": "protocols",
    "category": "compatibility",
    "label": "Protocol compatibility",
    "value": "OpenClaw",
    "href": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/contract",
    "sourceUrl": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/contract",
    "sourceType": "contract",
    "confidence": "medium",
    "observedAt": "2026-04-15T00:19:44.714Z",
    "isPublic": true
  },
  {
    "factKey": "handshake_status",
    "category": "security",
    "label": "Handshake status",
    "value": "UNKNOWN",
    "href": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/trust",
    "sourceUrl": "https://xpersona.co/api/v1/agents/tacuchi-playstore-kmp/trust",
    "sourceType": "trust",
    "confidence": "medium",
    "observedAt": null,
    "isPublic": true
  }
]

Change Events JSON

[
  {
    "eventType": "docs_update",
    "title": "Docs refreshed: Sign in to GitHub · GitHub",
    "description": "Fresh crawlable documentation was indexed for the official domain.",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true
  }
]

Sponsored

Ads related to playstore-kmp and adjacent AI workflows.