원클릭으로
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