From iris-dev
Fetches ObjectScript class source from IRIS via Atelier REST and summarizes its API (methods, properties, parameters, inheritance) before writing code that calls, extends, or modifies it.
How this skill is triggered — by the user, by Claude, or both
Slash command
/iris-dev:introspectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fetch the source and structure of an IRIS class **before writing any code that touches it**.
Fetch the source and structure of an IRIS class before writing any code that touches it. Works against any IRIS instance with the web server running. No Python, no MCP server needed.
CLASS="${1:-MyPackage.MyClass}"
HOST="${IRIS_HOST:-localhost}"
PORT="${IRIS_WEB_PORT:-52773}"
USER="${IRIS_USERNAME:-_SYSTEM}"
PASS="${IRIS_PASSWORD:-SYS}"
NS="${IRIS_NAMESPACE:-USER}"
PREFIX="${IRIS_WEB_PREFIX:-}"
BASE_URL="http://${HOST}:${PORT}${PREFIX:+/${PREFIX}}/api/atelier/v1"
curl -s \
-u "${USER}:${PASS}" \
"${BASE_URL}/${NS}/doc/${CLASS}.cls" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
result = data.get('result', {})
content = result.get('content', [])
# content is a list of lines
print('\n'.join(content))
"
If you get a 404: the class doesn't exist in this namespace. Try another namespace or check the class name spelling. IRIS class names are case-sensitive at the filesystem level but case-insensitive at runtime — use exact case from the source.
If you get a 401: wrong credentials. Check IRIS_USERNAME / IRIS_PASSWORD.
After fetching the source, extract and list:
Extends clause (single or multiple inheritance)ParameterDo NOT include the full implementation body in the summary — signatures and types only.
Before writing code that calls this class:
%Status return types — check with $$$ISOK / $$$ISERRByRef or Output parameters — they must be passed by reference with .Class: EnsLib.HTTP.OutboundAdapter
Extends: Ens.OutboundAdapter
Parameters:
SETTINGS = "HTTPServer,HTTPPort,URL,SSLConfig,..."
Properties:
HTTPServer As %String
HTTPPort As %String (default "80")
URL As %String
SSLConfig As %String
ClassMethods:
(none beyond inherited)
Methods:
SendFormDataArray(ByRef pHttpResponse As %Net.HttpResponse,
pFormVarNames As %String,
ByRef pData,
pUrl As %String = "") As %Status
Get(ByRef pHttpResponse As %Net.HttpResponse,
pUrl As %String = "") As %Status
Post(ByRef pHttpResponse As %Net.HttpResponse,
pUrl As %String = "",
pData As %GlobalCharacterStream = "") As %Status
for cls in MyPackage.ClassA MyPackage.ClassB Ens.BusinessOperation; do
echo "=== $cls ==="
curl -s -u "${IRIS_USERNAME:-_SYSTEM}:${IRIS_PASSWORD:-SYS}" \
"${BASE_URL}/${NS}/doc/${cls}.cls" \
| python3 -c "import json,sys; d=json.load(sys.stdin); print('\n'.join(d.get('result',{}).get('content',[])))"
echo ""
done
.cls file format). It includes /// doc comments above each method — read them.Include macros (e.g. Include %occStatus), macro names like $$$OK are defined there, not in the class itself./compile to check if the full source round-trips correctly.npx claudepluginhub intersystems-community/iris-agentic-devMaps ObjectScript codebases using MCP tools for symbol anchoring, dependency tracing, and hierarchical exploration. Bridges raw metadata and architectural understanding via iris_symbols and docs_introspect.
Drives iris-cli to search, browse, ask AI questions, and export content from an Iris architecture-knowledge repository.
Analyzes Pharo Smalltalk classes and methods via comments, references, example patterns, and searches to reveal responsibilities, usage examples, API patterns, and package overviews.