Claude-code-plugins-plus-skills palantir-hello-world
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/palantir-pack/skills/palantir-hello-world" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-palantir-hello-world && rm -rf "$T"
manifest:
plugins/saas-packs/palantir-pack/skills/palantir-hello-world/SKILL.mdsource content
Palantir Hello World
Overview
Build a minimal working example that connects to Palantir Foundry, queries Ontology objects via the REST API, reads a dataset, and applies an action. Uses real
foundry-platform-sdk Python API calls.
Prerequisites
- Completed
setuppalantir-install-auth - Valid bearer token or OAuth2 credentials
- At least one Ontology with object types configured in your Foundry enrollment
Instructions
Step 1: List Available Ontologies
import os import foundry client = foundry.FoundryClient( auth=foundry.UserTokenAuth( hostname=os.environ["FOUNDRY_HOSTNAME"], token=os.environ["FOUNDRY_TOKEN"], ), hostname=os.environ["FOUNDRY_HOSTNAME"], ) # List all ontologies you have access to for ont in client.ontologies.Ontology.list(): print(f"Ontology: {ont.api_name} RID: {ont.rid}")
Step 2: Query Ontology Objects
# List objects of type "Employee" from the default ontology # The object type api_name comes from your Ontology configuration ONTOLOGY = "your-ontology-api-name" OBJECT_TYPE = "Employee" objects = client.ontologies.OntologyObject.list( ontology=ONTOLOGY, object_type=OBJECT_TYPE, page_size=5, ) for obj in objects.data: props = obj.properties print(f" {props.get('fullName', 'N/A')} — {props.get('department', 'N/A')}")
Step 3: Get a Single Object by Primary Key
employee = client.ontologies.OntologyObject.get( ontology=ONTOLOGY, object_type=OBJECT_TYPE, primary_key="EMP-001", ) print(f"Found: {employee.properties}")
Step 4: Read a Dataset
# Read rows from a Foundry dataset (tabular) DATASET_RID = "ri.foundry.main.dataset.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Get dataset metadata dataset = client.datasets.Dataset.get(dataset_rid=DATASET_RID) print(f"Dataset: {dataset.name}, Path: {dataset.path}") # Read rows from the dataset (CSV format) content = client.datasets.Dataset.read( dataset_rid=DATASET_RID, branch_id="master", format="arrow", # or "csv" ) print(f"Read {len(content)} bytes of data")
Step 5: Apply an Ontology Action
# Actions modify objects — e.g., updating an employee's department result = client.ontologies.Action.apply( ontology=ONTOLOGY, action_type="updateDepartment", parameters={ "employeeId": "EMP-001", "newDepartment": "Engineering", }, ) print(f"Action result: {result.validation}")
Step 6: Run and Verify
set -euo pipefail python hello_foundry.py # Expected output: # Ontology: my-company RID: ri.ontology.main.ontology.xxx # Employee: Jane Doe — Engineering # Action result: VALID
Output
- Authenticated connection to Palantir Foundry
- Listed ontologies and object types
- Retrieved objects with property values
- Read dataset content
- Applied an action to modify an object
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Wrong | Check Ontology Manager for exact object type names |
| Invalid primary key | Verify the key exists; keys are case-sensitive |
| Missing required params | Check action definition for required parameters |
| Wrong RID or no access | Verify RID in Foundry UI; check project permissions |
| Token expired | Regenerate in Developer Console |
Examples
Using the REST API Directly (curl)
# List objects via REST curl -s -H "Authorization: Bearer $FOUNDRY_TOKEN" \ "https://$FOUNDRY_HOSTNAME/api/v2/ontologies/my-ontology/objects/Employee?pageSize=5" \ | python -m json.tool
TypeScript OSDK Equivalent
import { createClient } from "@osdk/client"; import { Employee } from "@my-app/sdk"; // generated from OSDK const employees = await client(Employee) .where({ department: "Engineering" }) .fetchPage({ pageSize: 10 }); employees.data.forEach(emp => console.log(emp.fullName));
Resources
Next Steps
- Set up iterative development:
palantir-local-dev-loop - Build data pipelines with transforms:
palantir-core-workflow-a - Query and link objects:
palantir-core-workflow-b