ワンクリックで
search-objects
Search, browse, and pull EDSL objects (Surveys, Results, AgentLists, etc.) from Expected Parrot cloud
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Search, browse, and pull EDSL objects (Surveys, Results, AgentLists, etc.) from Expected Parrot cloud
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Analyze EDSL Results objects - load by UUID or file path, export survey documentation, and generate analysis reports
Answer questions about a generated analysis report - reads report artifacts, performs additional analysis if needed, and saves the answer with metadata
Design complete surveys from free text requirements - generates a Python script with Survey, ScenarioList, and AgentList definitions
Design a detailed experimental plan from a research question - includes literature review, randomization plan, survey design, power analysis, and sample size recommendation
EDSL agent reference - AgentList operations, trait manipulation, templates, codebooks, and instructions
Save/load Surveys, Agents, and AgentLists locally, push/pull to Expected Parrot cloud, git versioning
| name | search-objects |
| description | Search, browse, and pull EDSL objects (Surveys, Results, AgentLists, etc.) from Expected Parrot cloud |
| allowed-tools | Read, Glob, Bash(python:*), AskUserQuestion, Write |
| user-invocable | true |
| arguments | search query or UUID |
Search, browse, and retrieve EDSL objects stored on the Expected Parrot cloud using the Coop API.
/search-objects customer survey
/search-objects 123e4567-e89b-12d3-a456-426614174000
/search-objects surveys about hiring
/search-objects
Determine what the user provided:
8-4-4-4-12): go directly to step 4 (Retrieve)http): extract UUID or alias, go to step 4AskUserQuestion to ask:Question: "What are you looking for?"
Header: "Search"
Options:
- "Browse my objects" / "See your own objects on Expected Parrot"
- "Search community" / "Search public objects shared by others"
- "Pull by UUID" / "Retrieve a specific object by its UUID or URL"
Then follow up with type/keyword questions as needed.
Run a Python script to search using Coop().list():
from edsl import Coop
coop = Coop()
# Search with filters
objects = coop.list(
object_type=None, # or "survey", "results", etc.
search_query="keyword", # searches description field
visibility=None, # "private", "public", "unlisted", or None for all
community=False, # True to search public objects by others
page=1,
page_size=10,
sort_ascending=False, # newest first by default
)
# Pagination info
print(f"Page {objects.current_page} of {objects.total_pages} ({objects.total_count} total)")
# Display results as a table
print(f"{'#':<4} {'Type':<15} {'Description':<50} {'Owner':<15} {'Visibility':<10} {'UUID':<36}")
print("-" * 130)
for i, obj in enumerate(objects, 1):
desc = (obj.get("description") or "")[:50]
print(f"{i:<4} {obj['object_type']:<15} {desc:<50} {obj.get('owner_username',''):<15} {obj['visibility']:<10} {obj['uuid']}")
Type extraction hints — map natural language to object_type:
"survey""results""agent_list" (or "agent" for single)"scenario_list" (or "scenario" for single)"question""model" or "model_list""cache""notebook""macro" or "composite_macro"Supported object types (all 13):
agent, agent_list, cache, model, model_list, notebook, question, results, scenario, scenario_list, survey, macro, composite_macro
If multiple results are returned, present them to the user with AskUserQuestion:
If only one result, confirm with the user before pulling, or proceed directly if the match is clearly what they asked for.
Pull the selected object using the class-level .pull() method. First determine the correct class from the object type:
from edsl.coop.utils import ObjectRegistry
# Get the EDSL class for the object type
edsl_class = ObjectRegistry.get_edsl_class_by_object_type(object_type)
# Pull the object
obj = edsl_class.pull(uuid)
Or use Coop().pull() directly:
from edsl import Coop
coop = Coop()
obj = coop.pull(uuid, expected_object_type=object_type)
After pulling, display a summary based on the object type:
| Object Type | Summary to Show |
|---|---|
survey | Question count, question names, has rules/memory |
results | Row count, column names (answer/agent/scenario columns) |
agent_list | Agent count, trait names, sample agent traits |
agent | Agent name, trait names and values |
scenario_list | Scenario count, key names, sample values |
scenario | Key names and values |
question | Question type, name, text, options (if applicable) |
cache | Entry count |
model / model_list | Model name(s), parameters |
notebook | Cell count |
macro / composite_macro | Description, components |
Summary examples:
# Survey
print(f"Survey with {len(obj)} questions: {obj.question_names}")
# Results
df = obj.to_pandas()
answer_cols = [c for c in df.columns if c.startswith('answer.')]
agent_cols = [c for c in df.columns if c.startswith('agent.')]
scenario_cols = [c for c in df.columns if c.startswith('scenario.')]
print(f"Results: {len(df)} rows, {len(answer_cols)} questions, {len(agent_cols)} agent traits, {len(scenario_cols)} scenario vars")
# AgentList
print(f"AgentList with {len(obj)} agents, traits: {obj.trait_names}")
# ScenarioList
print(f"ScenarioList with {len(obj)} scenarios, keys: {list(obj[0].keys()) if len(obj) > 0 else []}")
Ask the user if and where to save locally:
Question: "Save this object locally?"
Header: "Save"
Options:
- "Yes, default filename" / "Save as {slug}.json.gz in current directory"
- "Yes, custom filename" / "Choose a filename and location"
- "No" / "Don't save, just inspect"
Generate a default filename from the description:
import re
def slugify(text, max_length=60):
text = text.lower().strip()
text = re.sub(r'[^\w\s-]', '', text)
text = re.sub(r'[\s_]+', '-', text)
text = text.strip('-')
if len(text) > max_length:
text = text[:max_length].rsplit('-', 1)[0]
return text
filename = slugify(description) + ".json.gz"
Save using the .save() method:
obj.save(filename)
print(f"Saved to: {filename}")
If "custom filename", use AskUserQuestion to get the desired filename, then save.
Summarize what was done:
# To load this object later:
from edsl import {ClassName}
obj = {ClassName}.load("{filename}")
# Or pull fresh from the cloud:
obj = {ClassName}.pull("{uuid}")
Map object types to import names for the load-back reference:
| Object Type | Class Name |
|---|---|
survey | Survey |
results | Results |
agent | Agent |
agent_list | AgentList |
scenario | Scenario |
scenario_list | ScenarioList |
question | Question |
cache | Cache |
model | Model |
model_list | ModelList |
notebook | Notebook |
macro | Macro |
composite_macro | CompositeMacro |
If there are multiple pages of results:
# Check pagination
if objects.total_pages > 1:
print(f"\nShowing page {objects.current_page} of {objects.total_pages} ({objects.total_count} total)")
print("Use /search-objects to search again or ask for 'next page'")
To get the next page, re-run with page=page+1.
community=True)EXPECTED_PARROT_API_KEY env var or run edsl config)/search-objects surveys about customers
→ Extracts type="survey", query="customers" → runs coop.list(object_type="survey", search_query="customers") → shows results → user picks one → pulls and summarizes → offers to save
/search-objects 123e4567-e89b-12d3-a456-426614174000
→ Detects UUID → runs coop.pull(uuid) → shows summary → offers to save
/search-objects
→ No input → asks what user is looking for → user picks "Search community" → asks for type/keywords → searches with community=True → shows results