← Extractions

No 'Pundit' Intended — Rails Authorization by Yatish Mehta

At wroclove.rb 2025, Yatish Mehta (Asana) surveys Rails authorization approaches — implicit scopes, CanCan, Pundit — and their scaling problems, then introduces Fine-Grained Authorization (FGA / ReBAC) based on Google's Zanzibar. He presents his gem granity, which brings relationship-based access control with schema, tuples, smart caching, reverse lookups and audit paths to Rails apps, with Q&A on modeling sensitive tasks and syncing relationships.

Model
claude-opus-4-7
Ingestion
623af82e
Input tokens
197,088
fresh
131,154
cached
59,034
cache write
6,900
Output tokens
9,848
Duration
138.7s
Roundtrips
6
Tool calls
14
Cost
$0.00
Nodes/edges extracted
22 / 40
Read set (nodes/edges)
83 / 1

Nodes (22)

create permit.io tool
kind (empty) tool
name (empty) permit.io
slug (empty) permit-io
attrs (empty) {"category" => "service"}
description (empty) Authorization-as-a-service provider (permit.io) based on Google's Zanzibar model. Surveyed by Yatish Mehta alongside ...
short_description (empty) Authorization-as-a-service provider based on Zanzibar-style FGA.
create Figma company
kind (empty) company
name (empty) Figma
slug (empty) figma
attrs (empty) {"industry" => "design tools / SaaS"}
description (empty) Collaborative design company. Referenced by Yatish Mehta via a Figma engineering blog post stating that around 23% of...
short_description (empty) Collaborative design platform.
create Implicit Authorization concept
kind (empty) concept
name (empty) Implicit Authorization
slug (empty) implicit-authorization
attrs (empty) {"category" => "pattern"}
description (empty) Authorization approach where access control is implicit in the query: for example, fetching a project scoped to the c...
short_description (empty) Relying on query scopes to enforce access rather than explicit checks.
update Yatish Mehta person
attrs (empty) {"role" => "Tech Lead, Authorization", "location" => "San Francisco, California, USA"}
description Conference speaker. Rubyist for 10+ years based in San Francisco, California. Tech lead for authorization at Asana (HQ San Francisco, eng...
short_description Conference speaker. Ruby developer, Asana authorization tech lead, author of granity gem.
update No 'Pundit' Intended talk
description Talk at wroclove.rb 2025. wroclove.rb 2025 talk by Yatish Mehta ('Unduple the power of Rails authorization'). Walks through implicit query-scop...
short_description Talk at wroclove.rb 2025. Survey of Rails authorization approaches leading to fine-grained, relationship-based access control.
create Asana company
kind (empty) company
name (empty) Asana
slug (empty) asana
attrs (empty) {"office" => "Warsaw, Poland", "industry" => "work collaboration / productivity SaaS", "headquarters" => "San Francis...
description (empty) Work collaboration platform for managing projects and tasks. HQ in San Francisco with an engineering office in Warsaw...
short_description (empty) Work collaboration platform for projects and tasks.
create Authentication concept
kind (empty) concept
name (empty) Authentication
slug (empty) authentication
attrs (empty) {"category" => "practice"}
description (empty) Security concept dealing with identifying and verifying who a user is — username/password, SSO, SAML. Contrasted with...
short_description (empty) Verifying who a user claims to be.
create Authorization concept
kind (empty) concept
name (empty) Authorization
slug (empty) authorization
attrs (empty) {"category" => "practice"}
description (empty) Security concept dealing with what a user is allowed to do — which actions and permissions are granted to them once i...
short_description (empty) Determining what actions or resources a user is allowed to access.
create CanCan tool
kind (empty) tool
name (empty) CanCan
slug (empty) cancan
attrs (empty) {"category" => "library"}
description (empty) Authorization gem for Rails using a central ability.rb file that defines rules and permissions per user role and reso...
short_description (empty) Ruby authorization gem centralizing abilities in a single file.
create action_policy tool
kind (empty) tool
name (empty) action_policy
slug (empty) action_policy
attrs (empty) {"category" => "library"}
description (empty) Ruby authorization gem described by Yatish Mehta as 'a revised version of Pundit with additional features' — same str...
short_description (empty) Revised Pundit-style Ruby authorization gem with additional features.
update Pundit tool
description Popular Ruby authorization gem. Meedan adopted Pundit when they first built Check with GraphQL, because graphql-ruby ... Most popular Rails authorization gem. Provides Plain-Old-Ruby policy classes paired with resources, where each instan...
create Fine-Grained Authorization concept
kind (empty) concept
name (empty) Fine-Grained Authorization
slug (empty) fine-grained-authorization
attrs (empty) {"aliases" => "FGA; ReBAC; Relationship-Based Access Control", "category" => "architecture"}
description (empty) Fine-Grained Authorization (FGA), also called Relationship-Based Access Control (ReBAC). Based on Google's Zanzibar p...
short_description (empty) Relationship-based access control modeling permissions as a graph of tuples.
create Google Zanzibar resource
kind (empty) resource
name (empty) Google Zanzibar
slug (empty) google-zanzibar
attrs (empty) {"type" => "article"}
description (empty) Google paper describing Zanzibar, Google's distributed authorization system used across their products. Foundation fo...
short_description (empty) Google paper describing their distributed authorization system.
create granity tool
kind (empty) tool
name (empty) granity
slug (empty) granity
attrs (empty) {"license" => "open-source", "category" => "library", "language" => "Ruby"}
description (empty) Ruby gem created by Yatish Mehta to support Fine-Grained Authorization in Rails apps. On install it adds a migration ...
short_description (empty) Ruby gem bringing fine-grained (relationship-based) authorization to Rails.
create OpenFGA tool
kind (empty) tool
name (empty) OpenFGA
slug (empty) openfga
attrs (empty) {"category" => "service"}
description (empty) Open-source Fine-Grained Authorization service inspired by Google's Zanzibar paper. Provides its own modeling DSL, a ...
short_description (empty) Open-source authorization-as-a-service based on Google Zanzibar.
create Oso tool
kind (empty) tool
name (empty) Oso
slug (empty) oso
attrs (empty) {"category" => "service"}
description (empty) Authorization-as-a-service platform (OSO) inspired by Google's Zanzibar. One of several external FGA providers survey...
short_description (empty) Authorization-as-a-service platform based on Zanzibar-style modeling.
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale takeaway
kind (empty) takeaway
name (empty) Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scale
slug (empty) start-with-pundit-add-granity-for-fga-adopt-authorization-as-a-service-at-distributed-scale
attrs (empty) {"type" => "recommendation"}
description (empty) Yatish Mehta's summary recommendation: start simple with Pundit; when the app's permission model outgrows policies, a...
short_description (empty) Progressive path for Rails authorization complexity.
create Model permissions as a graph, check them as path existence takeaway
kind (empty) takeaway
name (empty) Model permissions as a graph, check them as path existence
slug (empty) model-permissions-as-a-graph-check-them-as-path-existence
attrs (empty) {"type" => "insight"}
description (empty) Core insight of FGA/ReBAC as presented by Yatish Mehta: rather than evaluating black-box per-permission logic, store ...
short_description (empty) Frame authorization as graph reachability over relationship tuples.
create Tuples must be kept in sync with domain data takeaway
kind (empty) takeaway
name (empty) Tuples must be kept in sync with domain data
slug (empty) tuples-must-be-kept-in-sync-with-domain-data
attrs (empty) {"type" => "warning"}
description (empty) Warning from Yatish Mehta: using FGA effectively duplicates many-to-many/foreign-key relationships from your domain m...
short_description (empty) Moving many-to-many relationships into an FGA store creates a sync obligation.
create How to model sensitive tasks in FGA? question
kind (empty) question
name (empty) How to model sensitive tasks in FGA?
slug (empty) how-to-model-sensitive-tasks-in-fga
attrs (empty) {"answer_summary" => "Introduce a sensitive_task entity related to task via an 'is_sensitive' relation; the authoriza...
description (empty) Audience question asking how Yatish Mehta's sensitive-task rule (only admins can edit a sensitive task) is modeled in...
short_description (empty) Q&A: representing a sensitive-task override in the authorization schema.
create How hard is it to keep authorization relationships in sync? question
kind (empty) question
name (empty) How hard is it to keep authorization relationships in sync?
slug (empty) how-hard-is-it-to-keep-authorization-relationships-in-sync
attrs (empty) {"answer_summary" => "Yes, it's a real overhead; duplicate relevant relationships into tuples and keep them in sync v...
description (empty) Audience question about the difficulty of keeping tuples consistent with domain models. Answer: it is a real challeng...
short_description (empty) Q&A: operational cost of maintaining tuples alongside domain data.
create Defining scopes with relationship-based access control question
kind (empty) question
name (empty) Defining scopes with relationship-based access control
slug (empty) defining-scopes-with-relationship-based-access-control
attrs (empty) {"answer_summary" => "ReBAC has no built-in scope mechanism; you must explicitly query the relationship graph. Pundit...
description (empty) Audience question: Pundit lets you define scopes within a policy for filtering collections — what is the pattern with...
short_description (empty) Q&A: equivalent of Pundit scopes in ReBAC-based authorization.

Edges (40)

update Yatish MehtaauthoredNo 'Pundit' Intended
context (empty) Yatish delivered this talk at wroclove.rb 2025.
update No 'Pundit' Intendedpresented_atwroclove.rb 2025
context (empty) Talk delivered at the March 2025 edition of wroclove.rb.
create Yatish Mehtaworks_atAsana
attrs (empty) {"role" => "Tech Lead, Authorization"}
context (empty) Tech lead for authorization at Asana, based in San Francisco with an engineering office in Warsaw.
relation (empty) works_at
source_node_id (empty) 98f7dc64-d973-47e7-8f82-2dde7d2d640a
target_node_id (empty) f751cc3c-2cee-4cb8-a5bf-c8083d983313
create Yatish Mehtaworks_ongranity
attrs (empty) {"role" => "author"}
context (empty) Author/creator of the granity gem for FGA in Rails.
relation (empty) works_on
source_node_id (empty) 98f7dc64-d973-47e7-8f82-2dde7d2d640a
target_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create No 'Pundit' IntendedaboutAuthentication
context (empty) Talk introduces the authentication vs authorization distinction.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) e1879252-4584-436e-bdcb-e159412c5299
create No 'Pundit' IntendedaboutAuthorization
context (empty) Core subject of the talk.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) f582878b-8b76-40c2-8d72-49bfceecc0e7
create No 'Pundit' IntendedaboutImplicit Authorization
context (empty) First approach surveyed — authorization via query scopes.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 3cd65ed8-2fbf-47ad-b324-cd332667ad84
create No 'Pundit' IntendedaboutCanCan
context (empty) Surveyed as the second approach, with its scaling limitations.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) f5b0bf6d-f6aa-464a-8309-afc1b91c0f65
create No 'Pundit' IntendedaboutPundit
context (empty) Surveyed as the most popular Rails authorization gem and its limitations at scale.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create No 'Pundit' Intendedaboutaction_policy
context (empty) Mentioned as a revised-Pundit alternative with the same philosophy.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 41876bfc-1d5b-4148-892e-b10738b2a7c1
create No 'Pundit' IntendedaboutFine-Grained Authorization
context (empty) Central proposal of the talk: FGA / relationship-based access control.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create No 'Pundit' IntendedaboutGoogle Zanzibar
context (empty) Cites the Google Zanzibar paper as the foundation of FGA.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) aece4012-6f32-4e96-956a-38371140ea7f
create No 'Pundit' Intendedaboutgranity
context (empty) Introduces and demos Yatish's granity gem.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create No 'Pundit' IntendedaboutOpenFGA
context (empty) Listed among external FGA providers based on Zanzibar.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) cf8610de-33c3-4888-9377-8d7cce29d455
create No 'Pundit' IntendedaboutOso
context (empty) Listed among external FGA providers.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 48bc1800-666a-4e34-9e56-2dac387ab77b
create No 'Pundit' Intendedaboutpermit.io
context (empty) Listed among external FGA providers.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 921fb6cb-5d6b-49fa-80d6-b7afd7a5b201
create No 'Pundit' IntendedaboutDevise
context (empty) Mentioned as the typical Rails gem for authentication.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 9113bde3-534a-47d0-8333-e171c4b55e79
create No 'Pundit' IntendedaboutFigma
context (empty) Cites Figma's blog claim that ~23% of SQL queries relate to access control.
relation (empty) about
source_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
target_node_id (empty) 6807c0f9-cd45-402d-8606-116e7f6e2b03
create Fine-Grained Authorizationrelated_toGoogle Zanzibar
context (empty) FGA/ReBAC is based on the Google Zanzibar paper.
relation (empty) related_to
source_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
target_node_id (empty) aece4012-6f32-4e96-956a-38371140ea7f
create granityrelated_toFine-Grained Authorization
context (empty) granity implements FGA/ReBAC for Rails.
relation (empty) related_to
source_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create OpenFGArelated_toGoogle Zanzibar
context (empty) OpenFGA is based on Zanzibar.
relation (empty) related_to
source_node_id (empty) cf8610de-33c3-4888-9377-8d7cce29d455
target_node_id (empty) aece4012-6f32-4e96-956a-38371140ea7f
create Osorelated_toGoogle Zanzibar
context (empty) Oso's model is based on Zanzibar.
relation (empty) related_to
source_node_id (empty) 48bc1800-666a-4e34-9e56-2dac387ab77b
target_node_id (empty) aece4012-6f32-4e96-956a-38371140ea7f
create permit.iorelated_toGoogle Zanzibar
context (empty) permit.io is based on Zanzibar.
relation (empty) related_to
source_node_id (empty) 921fb6cb-5d6b-49fa-80d6-b7afd7a5b201
target_node_id (empty) aece4012-6f32-4e96-956a-38371140ea7f
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scalefrom_talkNo 'Pundit' Intended
context (empty) Explicit closing recommendation of the talk.
relation (empty) from_talk
source_node_id (empty) ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scaleaboutPundit
context (empty) Recommends starting with Pundit.
relation (empty) about
source_node_id (empty) ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scaleaboutgranity
context (empty) Recommends adopting granity for FGA needs.
relation (empty) about
source_node_id (empty) ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create Start with Pundit, add granity for FGA, adopt authorization-as-a-service at distributed scaleaboutFine-Grained Authorization
context (empty) Mid-step of the recommendation: introduce FGA.
relation (empty) about
source_node_id (empty) ab08ca70-a202-4cf3-940f-c22ba195a224
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Model permissions as a graph, check them as path existencefrom_talkNo 'Pundit' Intended
context (empty) Core conceptual insight presented in the talk.
relation (empty) from_talk
source_node_id (empty) 36d05fed-f7c6-4f93-ba1f-47af4945ef77
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Model permissions as a graph, check them as path existenceaboutFine-Grained Authorization
context (empty) Insight describes how FGA frames permission checks.
relation (empty) about
source_node_id (empty) 36d05fed-f7c6-4f93-ba1f-47af4945ef77
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Tuples must be kept in sync with domain datafrom_talkNo 'Pundit' Intended
context (empty) Warning raised in Q&A and reinforced in the talk.
relation (empty) from_talk
source_node_id (empty) 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Tuples must be kept in sync with domain dataaboutgranity
context (empty) Applies directly to granity users.
relation (empty) about
source_node_id (empty) 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create Tuples must be kept in sync with domain dataaboutFine-Grained Authorization
context (empty) General property of FGA implementations.
relation (empty) about
source_node_id (empty) 8f01e666-06f3-45b7-9142-8afac5dbc62d
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create How to model sensitive tasks in FGA?asked_atNo 'Pundit' Intended
context (empty) Audience Q&A following the talk.
relation (empty) asked_at
source_node_id (empty) aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create How to model sensitive tasks in FGA?aboutFine-Grained Authorization
context (empty) About modeling special-case rules in an FGA schema.
relation (empty) about
source_node_id (empty) aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create How to model sensitive tasks in FGA?aboutgranity
context (empty) Answered in the context of granity's schema.
relation (empty) about
source_node_id (empty) aa108459-ce11-45f2-ba33-aa27d95ceb23
target_node_id (empty) ac1d7f2b-90f8-4c70-9e40-175c5ac985e4
create How hard is it to keep authorization relationships in sync?asked_atNo 'Pundit' Intended
context (empty) Audience Q&A following the talk.
relation (empty) asked_at
source_node_id (empty) a9637e9d-9bf4-4925-9d0d-f77de72ef59d
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create How hard is it to keep authorization relationships in sync?aboutFine-Grained Authorization
context (empty) About the operational cost of maintaining an FGA tuple store.
relation (empty) about
source_node_id (empty) a9637e9d-9bf4-4925-9d0d-f77de72ef59d
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2
create Defining scopes with relationship-based access controlasked_atNo 'Pundit' Intended
context (empty) Audience Q&A following the talk.
relation (empty) asked_at
source_node_id (empty) e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) a11aa48d-cf21-43f9-a02b-c3e03a8849b8
create Defining scopes with relationship-based access controlaboutPundit
context (empty) Compares ReBAC to Pundit's scopes feature.
relation (empty) about
source_node_id (empty) e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) 1ebb50fc-98ba-48a0-8720-cbf7138c2eed
create Defining scopes with relationship-based access controlaboutFine-Grained Authorization
context (empty) Discusses what ReBAC gives (and doesn't give) for collection filtering.
relation (empty) about
source_node_id (empty) e7fefda3-a6a7-4492-b035-6c1b8a724dcd
target_node_id (empty) d896a90d-cbc8-4517-aef9-3fb1d3d077e2

Read set

83 nodes

event 2NIT Nerds on Lakes Sailing Trip list_nodes_by_kind event Advent of Code list_nodes_by_kind event Brighton Ruby list_nodes_by_kind event EmberConf list_nodes_by_kind event Eventide Summit 2023 list_nodes_by_kind event Hacktoberfest list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event Rails World list_nodes_by_kind event RubyKaigi list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind event wroclove.rb 2019 list_nodes_by_kind event wroclove.rb 2022 list_nodes_by_kind event wroclove.rb 2023 list_nodes_by_kind event wroclove.rb 2024 list_nodes_by_kind event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind tool devise_token_auth search_nodes tool devise_token_authenticatable search_nodes takeaway Use devise_token_auth for API tokens search_nodes question Using external auth providers instead of Devise search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes tool Devise search_nodes tool devise-two-factor search_nodes tool Tyrant search_nodes tool Pundit search_nodes company Auth0 search_nodes question Authorization strategies in GraphQL search_nodes concept Strong Parameters search_nodes project gemcheck search_nodes tool langchainrb search_nodes talk Methods Gem for Ruby Method References search_nodes tool bump gem search_nodes tool methods gem search_nodes takeaway Name Things To Find Their Properties search_nodes project granite search_nodes tool HTTP gem search_nodes tool Ruby LLM search_nodes concept AI Agent search_nodes tool RealtimeBoard search_nodes takeaway Ask the Most Human Question Possible search_nodes company Zendesk search_nodes tool GraphQL search_nodes tool Requestly search_nodes tool Apollo GraphQL Platform search_nodes concept Direct Upload to Cloud search_nodes tool PagerDuty search_nodes company SpaceX search_nodes company ThoughtWorks search_nodes company Salesforce search_nodes tool CircleCI search_nodes tool JIRA search_nodes talk Offline Sandwich Focus Workflow search_nodes project Zite search_nodes company GitHub search_nodes tool Release Drafter search_nodes takeaway Prompts as Business Logic search_nodes tool aggregate_root search_nodes tool graphql-ruby search_nodes tool pganalyze search_nodes concept Selective MFA Rollout search_nodes takeaway Time Travel Superpower search_nodes concept Retrieval Augmented Generation search_nodes concept Action search_nodes tool Active Admin search_nodes tool acts_as_api search_nodes tool Action Cable search_nodes tool Tailwind CSS search_nodes resource shadcn/ui search_nodes company Transloadit search_nodes tool Apollo GraphQL search_nodes tool Render search_nodes tool Speaker Deck search_nodes project Ruby UI search_nodes tool Miro search_nodes question Isn't asking password confirmation business logic? search_nodes takeaway MFA improves account-sharing health search_nodes question Why MFA via email and not authenticator app or SMS? search_nodes person Yatish Mehta search_nodes+get_node_edges concept MCP Server search_nodes project Check search_nodes takeaway Collect as much video metadata as you can search_nodes tool ChatGPT search_nodes concept Rubber Duck Debugging search_nodes

1 edges