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
Crawler Summary
Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC EDGAR data. Uses 100% free public APIs β no subscriptions or API keys required. --- name: stock-analysis description: > Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC Capability contract not published. No trust telemetry is available yet. Last updated 3/1/2026.
Freshness
Last checked 3/1/2026
Best For
stock-analysis is best for scanned, call 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
Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC EDGAR data. Uses 100% free public APIs β no subscriptions or API keys required. --- name: stock-analysis description: > Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC
Public facts
4
Change events
1
Artifacts
0
Freshness
Mar 1, 2026
Capability contract not published. No trust telemetry is available yet. Last updated 3/1/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Mar 1, 2026
Vendor
Portlandmobile
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. Last updated 3/1/2026.
Setup snapshot
git clone https://github.com/portlandmobile/OC_stock_analysis_trend.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
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.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Portlandmobile
Protocol compatibility
OpenClaw
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
bash
ls {skillDir}/*.py 2>/dev/nullbash
mkdir -p {skillDir}/databash
pip3 install yfinance pandas numpy requests finviz --break-system-packages
bash
pip3 install TA-Lib --break-system-packages || echo "TA-Lib not available, will use numpy fallback"
text
1. cash_test:
value = (cash + short_term_investments) / total_debt
target = > 1.0
tags: cash=CashAndCashEquivalentsAtCarryingValue,
investments=ShortTermInvestments,
debt=LongTermDebt + ShortTermBorrowings
2. debt_to_equity:
value = total_liabilities / stockholders_equity
target = < 0.5
tags: liabilities=Liabilities, equity=StockholdersEquity
3. free_cash_flow:
value = (operating_cash_flow - capex) / total_debt
target = > 0.25
tags: ocf=NetCashProvidedByUsedInOperatingActivities,
capex=PaymentsToAcquirePropertyPlantAndEquipment,
debt=LongTermDebt + ShortTermBorrowings
4. return_on_equity:
value = net_income / stockholders_equity
target = > 0.15 (15%)
tags: income=NetIncomeLoss, equity=StockholdersEquity
5. current_ratio:
value = current_assets / current_liabilities
target = > 1.5
tags: current_assets=AssetsCurrent, current_liabilities=LiabilitiesCurrent
6. operating_margin:
value = operating_income / revenue
target = > 0.12 (12%)
tags: oi=OperatingIncomeLoss,
revenue=Revenues|RevenueFromContractWithCustomerExcludingAssessedTax|SalesRevenueNet
7. asset_turnover:
value = revenue / total_assets
target = > 0.5
tags: revenue=(same as above), assets=Assets
8. interest_coverage:
value = operating_income / interest_expense
target = > 3.0
tags: oi=OperatingIncomeLoss, interest=InterestExpense
special: if interest_expense is 0 or None, mark as PASS (no debt burden)
9. earnings_stability:
value = count of years with positive net income over last 10 fiscal years
target = >= 8
tags: NetIncomeLoss (fetch all annual values, count positives in last 10)
10. capital_allocation:
value = net_income / stockholders_equity (same as ROE)
target = > 0.15 (15%)
tags: income=NetIncomeLoss, equity=StockholdersEquitytext
π S&P 500 Oversold Scan Scanned: 503 | Found: N oversold (X%) π΄ EXTREME (< -95): N stocks 1. TICK β %R: -99.3 | EMA: -97.1 ... π VERY STRONG (-95 to -90): N stocks ... β‘ Xs (cached) | β οΈ Not financial advice.
Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC EDGAR data. Uses 100% free public APIs β no subscriptions or API keys required. --- name: stock-analysis description: > Wall Street-grade S&P 500 stock screener. Three commands: "oversold" scans all 503 S&P 500 stocks for technically oversold signals using Williams %R in 15-30 seconds. "screen" combines technical oversold signals with Warren Buffett's 10 fundamental quality formulas to find the best opportunities. "analyze TICKER" runs a deep Buffett analysis on a single stock using official SEC
Professional S&P 500 stock screener combining technical analysis (Williams %R) with Warren Buffett's 10 fundamental quality formulas. All data is free: Yahoo Finance for prices, SEC EDGAR for financials, GitHub CSV for the S&P 500 ticker list.
Before running any command, check whether the required Python scripts exist in the skill directory. If any are missing, generate them automatically.
ls {skillDir}/*.py 2>/dev/null
If the output shows all 11 scripts below, skip to the command sections. If any are missing, proceed to Step 2.
mkdir -p {skillDir}/data
pip3 install yfinance pandas numpy requests finviz --break-system-packages
For TA-Lib β try pip first, fall back to numpy if it fails:
pip3 install TA-Lib --break-system-packages || echo "TA-Lib not available, will use numpy fallback"
Generate each missing script by writing it to {skillDir}/. Use the detailed
specifications in this SKILL.md as the source of truth for every script.
After writing each file, verify it exists before moving to the next.
The 11 required scripts and what each must do:
sp500_tickers.pyFetches the S&P 500 ticker list from GitHub CSV and returns it as a Python list.
Must implement:
get_sp500_tickers() β returns list of ~503 ticker stringshttps://raw.githubusercontent.com/datasets/s-and-p-500-companies/main/data/constituents.csvSymbol from the CSV{skillDir}/data/sp500_tickers.json with
a 7-day TTL so it doesn't re-fetch on every rundatabase.pySQLite caching layer used by price_data.py and sec_api.py.
Must implement:
PriceCache(db_path) class:
get(ticker, days) β returns DataFrame or None if expired/missingstore(ticker, df) β saves OHLCV DataFrame to SQLiteSECCache(db_path) class:
get(cik) β returns dict or None if expired/missingstore(cik, data) β saves SEC companyfacts dict to SQLiteprice_data.pyYahoo Finance price fetching with SQLite caching.
Must implement:
PriceDataManager(db_path="{skillDir}/data/price_cache.db") class:
get_daily_prices(ticker, days=90, force_refresh=False) β DataFrame
yf.Ticker(ticker).history(period=f"{days}d")batch_fetch_prices(tickers, days=90, workers=10, force_refresh=False) β dict
workers threadstechnical_indicators.pyWilliams %R and EMA calculations.
Must implement:
calculate_williams_r(df, period=21) β pandas Series
((high_period.max - close) / (high_period.max - low_period.min)) * -100period days on High and Low columnsimport talib; talib.WILLR(high, low, close, timeperiod=period)calculate_ema(series, period=13) β pandas Series
talib.EMA(series.values, timeperiod=period)series.ewm(span=period, adjust=False).mean()classify_intensity(williams_r_value) β string
= -80: "NEUTRAL"
sec_api.pySEC EDGAR API client with caching and retry logic.
Must implement:
SECClient(cache_db="{skillDir}/data/askten.db") class:
get_cik_map() β dict mapping tickerβCIK
https://www.sec.gov/files/company_tickers.json{skillDir}/data/cik_map.json with 30-day TTLstr(cik).zfill(10)get_companyfacts(cik, force_refresh=False) β dict
https://data.sec.gov/api/xbrl/companyfacts/CIK{cik}.json{'User-Agent': 'StockAnalysis/1.0 openclaw@local'}resolve_ticker(ticker) β CIK string or None
extract_fact(companyfacts, tags, period='annual') β (value, provenance_dict) or (None, None)
tags is a list of XBRL tag names to try in order (aliases)formulas.pyWarren Buffett's 10 investment formulas.
Must implement:
FormulaEngine(facts_dict) class where facts_dict contains extracted SEC valuesevaluate_all() β list of result dicts, one per formula{name, status, value, target, description, provenance}The 10 formulas and their exact logic:
1. cash_test:
value = (cash + short_term_investments) / total_debt
target = > 1.0
tags: cash=CashAndCashEquivalentsAtCarryingValue,
investments=ShortTermInvestments,
debt=LongTermDebt + ShortTermBorrowings
2. debt_to_equity:
value = total_liabilities / stockholders_equity
target = < 0.5
tags: liabilities=Liabilities, equity=StockholdersEquity
3. free_cash_flow:
value = (operating_cash_flow - capex) / total_debt
target = > 0.25
tags: ocf=NetCashProvidedByUsedInOperatingActivities,
capex=PaymentsToAcquirePropertyPlantAndEquipment,
debt=LongTermDebt + ShortTermBorrowings
4. return_on_equity:
value = net_income / stockholders_equity
target = > 0.15 (15%)
tags: income=NetIncomeLoss, equity=StockholdersEquity
5. current_ratio:
value = current_assets / current_liabilities
target = > 1.5
tags: current_assets=AssetsCurrent, current_liabilities=LiabilitiesCurrent
6. operating_margin:
value = operating_income / revenue
target = > 0.12 (12%)
tags: oi=OperatingIncomeLoss,
revenue=Revenues|RevenueFromContractWithCustomerExcludingAssessedTax|SalesRevenueNet
7. asset_turnover:
value = revenue / total_assets
target = > 0.5
tags: revenue=(same as above), assets=Assets
8. interest_coverage:
value = operating_income / interest_expense
target = > 3.0
tags: oi=OperatingIncomeLoss, interest=InterestExpense
special: if interest_expense is 0 or None, mark as PASS (no debt burden)
9. earnings_stability:
value = count of years with positive net income over last 10 fiscal years
target = >= 8
tags: NetIncomeLoss (fetch all annual values, count positives in last 10)
10. capital_allocation:
value = net_income / stockholders_equity (same as ROE)
target = > 0.15 (15%)
tags: income=NetIncomeLoss, equity=StockholdersEquity
technical_only.pyFast Williams %R oversold scanner. This is the main entry point for the
oversold command.
Must implement as a runnable script with argparse:
--threshold FLOAT default -80.0--top-n INT default 20--format STRING default "telegram"--force-refresh flagLogic:
get_sp500_tickers() from sp500_tickers.pyPriceDataManager().batch_fetch_prices(tickers, days=90, workers=10)calculate_williams_r(df, period=21)calculate_ema(williams_r, period=13)williams_r.iloc[-1]Output format (telegram):
π S&P 500 Oversold Scan
Scanned: 503 | Found: N oversold (X%)
π΄ EXTREME (< -95): N stocks
1. TICK β %R: -99.3 | EMA: -97.1
...
π VERY STRONG (-95 to -90): N stocks
...
β‘ Xs (cached) | β οΈ Not financial advice.
analyze.pyDeep Buffett fundamental analysis for a single stock or for all stocks from a
FinViz screener. Main entry point for analyze TICKER and for "analyze FinViz
screener" (nanobot: use --finviz-screener to get stocks from finviz_screeners.db
and run analysis on each; output includes metadata per stock when available).
Must implement as a runnable script with argparse:
--ticker STRING optional β single ticker (required if not using --finviz-screener)--finviz-screener STRING optional β "all" or a specific screener name (e.g. "refined 50D drop")--date-range STRING optional β date for screener filter (YYYY-MM-DD). Default: today.--format STRING default "telegram"--force-refresh flagLogic:
--ticker is set): resolve CIK, get companyfacts, extract facts, FormulaEngine, print. No metadata line.--finviz-screener is set):
on_date = --date-range if provided, else today (YYYY-MM-DD).finviz_db.ScreenerCache, call get_tickers_with_metadata(screener_name, on_date) to get rows from finviz_screeners.db where date(updated_at) = on_date. Each row includes ticker plus Company, Sector, Industry, Country, PE, MarketCap (from finviz_sync). Use screener name as given, or "all" for distinct tickers from any screener (one row per ticker).on_date are processed; older dates are ignored unless --date-range is set.π {TICKER} β Buffett Analysis line, print one line: Company | Industry | P/E: {PE} | Market Cap: {MarketCap}. Use N/A for any missing value (Company, Industry, PE, or MarketCap).--ticker or --finviz-screener must be provided.Output format (telegram), single-ticker:
π {TICKER} β Buffett Analysis
Score: X/10 Buffett Criteria
...
Output format (telegram), FinViz screener mode (per stock):
π {TICKER} β Buffett Analysis
{Company} | {Industry} | P/E: {PE} | Market Cap: {MarketCap}
Score: X/10 Buffett Criteria
β
Strengths
| Metric | Value | Target |
...
β Concerns
| Metric | Value | Target |
...
π Data: SEC EDGAR 10-K ({period_end})
β οΈ Not financial advice.
Missing Company, Industry, PE, or MarketCap are shown as N/A.
screening.pyCombined technical + fundamental screen. Main entry point for screen command.
Must implement as a runnable script with argparse:
--min-score INT default 5--threshold FLOAT default -80.0--top-n INT default 10--format STRING default "telegram"--force-refresh flagLogic:
tech_score = (williams_r + 100) / 100
fundamental_score = pass_count / 10
combined_score = (tech_score * 0.3) + (fundamental_score * 0.7)
Output format (telegram):
π S&P 500 Quality Screen
Filter: Williams %R < {threshold} AND Buffett β₯ {min_score}/10
Top {N} Opportunities:
1. TICK β Combined: 8.2/10
%R: -94.3 π΄ | Buffett: 8/10
2. TICK β Combined: 7.6/10
%R: -89.1 π‘ | Buffett: 7/10
...
β± Xm Xs | Yahoo Finance + SEC EDGAR | β οΈ Not financial advice.
finviz_db.pySQLite layer for FinViz screener results. Used by finviz_sync.py (writes) and analyze.py (reads tickers + metadata for screener mode).
Must implement:
ScreenerCache(db_path="{skillDir}/data/finviz_screeners.db") class:
screener_stocks: columns screener_name, ticker, updated_at, Company, Sector, Industry, Country, PE, MarketCap (no spaces in column names; P/E β PE, Market Cap β MarketCap). PRIMARY KEY (screener_name, ticker).is_fresh(screener_name) β True if screener has data and updated_at is within TTLget_tickers(screener_name) β list of ticker strings, or None if missing/staleget_tickers_for_date(screener_name, on_date) β list of tickers where date(updated_at) = on_date (on_date str "YYYY-MM-DD"); screener_name "all" returns distinct tickers from any screener for that dateget_tickers_with_metadata(screener_name, on_date) β list of dicts, each with keys ticker, Company, Sector, Industry, Country, PE, MarketCap for rows where date(updated_at) = on_date; for "all", dedupe by ticker (one row per ticker). Used by analyze.py in FinViz screener mode to display metadata per stock.store(screener_name, rows) β replace all rows for that screener; each row is a dict with ticker and optionally Company, Sector, Industry, Country, PE, MarketCapfinviz_sync.pyFetch stocks from a FinViz screener URL and store them in SQLite (1-day TTL).
Enriches each ticker with finviz.get_stock(ticker) to store Company, Sector,
Industry, Country, P/E (as PE), Market Cap (as MarketCap). Skips fetch if
screener data is already fresh unless --force-refresh is used.
Must implement as a runnable script with argparse:
--screener STRING optional β screener label (e.g. "refined 50D drop")--url STRING optional β FinViz screener URL (e.g. from finviz.com)--force-refresh flag--clean STRING optional β "true" (default) or "false". When true, exclude from storage: Industry = "Asset Management", Industry contains "Closed-End Fund", Industry = "REIT - Office", Country = "China". Use --clean false to disable filtering.Logic:
--screener and --url are passed: sync that one screenerfinviz_config.json from skill directory;
each node must have screener and url; sync each screener in orderScreener.init_from_url(url) (finviz library), extract tickers from
row["Ticker"], then for each ticker call finviz.get_stock(ticker) to get
Company, Sector, Industry, Country, P/E, Market Cap; build rows and pass to
ScreenerCache.store(screener_name, rows). If --clean is true, filter out
rows matching the excluded Industry/Country rules before storing.Config format (finviz_config.json):
[
{"screener": "refined 50D drop", "url": "https://finviz.com/screener.ashx?v=111&f=..."},
{"screener": "another", "url": "https://finviz.com/screener.ashx?..."}
]
Requires the finviz Python package (pip install finviz). FinViz table v
must be a type the library supports (e.g. 111 Overview); if the URL uses
an unsupported view (e.g. 110), use v=111 in the URL.
Once all scripts exist, execute commands as follows.
cd {skillDir}
python3 technical_only.py --top-n 20 --format telegram
With custom threshold:
python3 technical_only.py --threshold -90 --top-n 10 --format telegram
cd {skillDir}
python3 analyze.py --ticker AAPL --format telegram
cd {skillDir}
python3 finviz_sync.py
When the user asks to analyze a FinViz screener (e.g. "analyze finviz screener refined 50D drop"), get the stock list with metadata from finviz_screeners.db and run Buffett analysis on each. Only process stocks whose screener updated date is today (or the date given by --date-range). For each stock, analyze uses get_tickers_with_metadata so it can display Company, Industry, P/E, Market Cap from the DB right after the ticker line (shows N/A for any missing value).
cd {skillDir}
# Specific screener (stocks updated today)
python3 analyze.py --finviz-screener "refined 50D drop" --format telegram
# All screeners (distinct tickers updated today)
python3 analyze.py --finviz-screener all --format telegram
# Use a specific date (e.g. yesterday)
python3 analyze.py --finviz-screener "refined 50D drop" --date-range 2025-02-22 --format telegram
Ensure finviz_sync.py has been run for the desired screener(s) so that finviz_screeners.db has rows (with metadata) and the desired updated_at date.
cd {skillDir}
python3 screening.py --min-score 5 --top-n 10 --format telegram
With high quality filter:
python3 screening.py --min-score 8 --top-n 10 --format telegram
time.sleep(0.5) between batchesUser: oversold
β python3 technical_only.py --top-n 20 --format telegram
User: oversold --threshold -95
β python3 technical_only.py --threshold -95 --top-n 20 --format telegram
User: analyze V
β python3 analyze.py --ticker V --format telegram
User: analyze AAPL
β python3 analyze.py --ticker AAPL --format telegram
User: analyze finviz screener refined 50D drop
β python3 analyze.py --finviz-screener "refined 50D drop" --format telegram
(Output includes Company, Industry, P/E, Market Cap per stock from finviz_screeners.db; N/A if missing.)
User: analyze finviz screener all
β python3 analyze.py --finviz-screener all --format telegram
(Output includes metadata per stock as above.)
User: screen
β python3 screening.py --min-score 5 --top-n 10 --format telegram
User: screen --min-score 8
β python3 screening.py --min-score 8 --top-n 10 --format telegram
User: finviz sync
β python3 finviz_sync.py
Always append to every Telegram response:
β οΈ This is not financial advice. Data: Yahoo Finance + SEC EDGAR.
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/snapshot"
curl -s "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/contract"
curl -s "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
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
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
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
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 6d ago
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
Rank
70
The Frontend for Agents & Generative UI. React + Angular
Traction
No public download signal
Freshness
Updated 23d ago
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/portlandmobile-oc-stock-analysis-trend/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/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-17T02:44:47.139Z"
}
},
"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"
},
{
"key": "scanned",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "call",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:scanned|supported|profile capability:call|supported|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": "Portlandmobile",
"href": "https://github.com/portlandmobile/OC_stock_analysis_trend",
"sourceUrl": "https://github.com/portlandmobile/OC_stock_analysis_trend",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-03-01T06:05:57.804Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-03-01T06:05:57.804Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/portlandmobile-oc-stock-analysis-trend/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 stock-analysis and adjacent AI workflows.