Subscribe to

The seventh episode of WandaVision contains one of the biggest twists and turns of the series: Agnes, Wanda’s curious neighbor, not only shows herself in the series’ masquerade, but also largely responsible for it. Up to this point, it seemed as if Wanda was in control and created a TV land reality to live in as an alternative to the harsh truths of her real life, but with the seams becoming increasingly indelible – in this episode, objects in Wanda’s house turn themselves into outdated versions of themselves -, it becomes clear that someone else’s influence is at work The fact that this later twist (there are only two episodes in the season) works as well as it is due to the ace of the show, which is multi-year scene stealer Kathryn Hahn Hahn an actress who has never shown bad performance even in bad films The way WandaVision shows its maps only makes it clearer that this is one of their best work

As Agnes, Hahn not only plays two roles – “Agnes” and the actual witch behind her, Agatha Harkness – but balances two diametrically opposed character types. Agnes is the comic buddy – she comes to deliver a punch or two and Wanda’s straight man to be the hammy slide – but Agatha appears to be the bad guy (or at least a bad guy), complete with a song in which she begins revealing her evil plan (Hahn himself sings the chorus: “It was the whole Zeit Agatha ”) This fits perfectly with Hahn’s keen comic book energy, which while always fun, is all the more fascinating when it always feels a little dangerous. For most of the show, that edge manifests itself in the clues here and there, that life in Westview isn’t all it seems, like Agnes’ behavioral break in episode five when she asks Wanda if she should try to replay a scene or if she and another neighbor, Herb, in the third episode seem to hide a broader knowledge of what is going on, and above all to be afraid of the consequences of breaking the illusion

The best of movies, TV, music, books, and more gets delivered to your inbox three times a week

The overall unsettling tone of WandaVision has everything to do with these scenes, as realizing that Wanda’s grief creates such ripples comes with realizing that all of Westview’s residents are mind-driven to keep up that little screen facade of the few Pauses that vision encounters it seems like a really terrible, painful experience that these normal people cannot escape for themselves Hahn’s performance is perfectly attuned to watching Agnes’ mask slide up and down depending on the scene, and the eerily resigned and dutiful demeanor that suddenly replaces her initial bubbly is a show highlight, as Agnes’ closeness to the spotlight as Wanda’s crazy friend makes her bright and blinking signs that something is seriously wrong

But that shift is an exciting spectacle in its own right, especially since the more sitcom scenes she’s given allow her to flex her comedic muscles as Agnes is incredibly brave, not just in terms of her physicality The way your whole body seems to vibrate as you walk Just watch the scene in the first episode where she interrupts a dinner party and Wanda tries to get her out of the house but in their exaggerated facial expressions it’s an exaggeration that feels completely convincing in its context – who else could say, “I actually bit a child once” and sing with such apparent ease? And it’s her dedication to that achievement, with everything in quotes, which makes it all the more unsettling when the cracks show (Elizabeth Olsen, as Wanda, is tasked with playing the same style of play in most episodes, and though she does an admirable job, she can’t always muster the same level of vim)

And even if Agatha is revealed, a bit of that hamminess remains.The real Agatha exists halfway between the Truman Show-style charade that she continues and the more disturbing reality that she hides her energy during her song more mischievous than the former, but more playful than the latter, which already makes Agatha a compelling “new” character even though she was really herself for only a minute or two when she scoffs at the camera and crows at it like no one has noticed Has pulled her by the strings, neglecting almost works because her pleasure is contagious: the new cool girl is in town and it’s impossible not to want to be friends with her

As Slate noted back in 2012, Hahn is a fearless improviser with seemingly bottomless charisma, not to mention her status as the “patron saint of middle-aged women,” which she casts perfectly as Agnes Wenn WandaVision is primarily due to the nature and the way it messed up the Marvel formula, episode 7 might force us to wonder how much of that Kathryn Hahn has been all along

Readers like you make our work possible! Help us continue to deliver reports, comments, and criticism you won’t find anywhere else

Slate is published by The Slate Group, a Graham Holdings Company
All content © 2021 The Slate Group LLC All rights reserved

Slate relies on advertising to support our journalism. If you value our work, please deactivate your ad blocker

By joining Slate Plus you support our work and receive exclusive content and you will never see this message again

“)), c = d (m [isize_id] split (” x “) map (function (s) {return number (s)}), 2), swidth = c [0], sheight = c [ 1]), srubiconTargeting = (ArrayisArray (iTargeting)? ITargeting: []) reduce (function (e, t) {return e [tkey] = tvalues ​​[0], e}, {rpfl_elemid: fadUnitCode}), tpush (s )): nlogError (“Rubicon: bidRequest undefined at index position:” concat (o), r, e), t}, []) sort (function (e, t) {return (tcpm || 0) – (ecpm | | 0)})}, getUserSyncs: Function (e, t, r, n) {if (! X&&eiframeEnabled) {var i = “”; return r&& “string” == typeof rZustimmenString&&d (“typepoolANDCHARd”? i = “? gdpr =” concat (number (rgdprApplies), “&gdpr_consent =”) concat (rZustigungString): i = “? gdpr_consent =” concat (rZustigungString)), n&& (i = “” “concat (i =” “” concat (i? “”) : “?”, “us_privacy =”) concat (encodeURIComponent (n))), x =! 0, {type: “iframe”, URL: “https: //” concat (gsyncHost || “eus”, “rubiconpr ojectcom / usynchtml “) i}}}, transformBidParams: function (e) {return nconvertTypes ({accountId:” number “, siteId:” number “, zoneId:” number “}, e)}}; Function v (e, t) {var r = obgetConfig (“pageUrl”); r = eparams referrer? eparams referrer: r || trefererInfoReferer; Return eparam-proof? rReplace (/ ^ http: / i, “https:”): r} function y (e, t) {var r = eparams; if (“video” === t) {var i = []; return rvideo&&rVideoplayerWidth&&rVideoplayerHeight? i = [rVideoplayerWidth, rVideoplayerHeight]: ArrayisArray (n isArraydeepAccess (e, “mediaTypes” VideoplayerSize “)) &&1 === eMedia TypesVideoplayerSizeLength? i = eMediaTypesVideoplayerSize [0]: ArrayisArray (eSize) &&1 (t = eLANDCHAR&0eLength) (t = new array) (t = eLANDCHARCSSEC) (t = eLANDCHARCSSE) ); r ‘; var i, o}}, h = function (e) {var t = 0 = e&&tinnerWidth’ vvast_url “”: vvast_string&& (y = vvast_string),, gpre_market_bidspush: {id: vbealid_id {bid: vdealid_id [{impid: Datenow (), dealid: vdeal_id, price: vPreis, adm: y}]}], cur: vCurrency, ext: {event_log: [{}]}})}} var h = ngetBidIdParameter (“Mimen” , eparams) || [“application / javascript”, “video / mp4”, “video / webm”], _ = {id: ebidId, sure: l, video: {w: p, h: f, ext: g , mimes: h}}; “”! = ngetBidIdParameter (“price_floor”, eparams) && (_bidfloor = ngetBidIdParameter (“price_floor”, eparams)), “”! = ngetBidIdParameter (“start_params”) = 0 Boolean value (ngetBidIdParameter (“start_delay”, eparams))), “”! = ngetBidIdParameter (“min_duration”, eparams) && (_VideoMinduration = ngetBidIdParameter (“min_duration”, eparams)), “”! = ngetBidIdParameter (“max_duration”, eparams) && (_Videomaxduration = ngetBidIdParameter (“max_duration”, eparams)), “”! = ngetBidIdParameter (“placement type”, eparams) && (_VideoextPlatzierung = ngetBidIdParameter (“placement type”, eparams)), “”! = ngetBidIdParameter (“position”, eparams) && (_Videoextpos = ngetBidIdParameter (“position”, eparams)), ecrumbs&&eKrümelpubcid&CSSEidKrümel); (cub = eparams); var S = navigator language? “language”: “userLanguage”, I = {id: s, imp: _, site: {id: “”, page: a, content: “content”}, device: {h: screen height, w: screen width, dnt : ngetDNT ()? 1: 0, language: Navigator [S] split (“-“) [0], make: navigator provider? Navigator provider: “”, including: NavigatoruserAgent}, ext: {wrap_response: 1}}; ngetBidIdParameter (“number_of_ads”, eparams) && (IextAnzahl_der_ads = ngetBidIdParameter (“number_of_ads”, eparams)); var A = {}; return 1 == ngetBidIdParameter (“spotx_all_google_consent”, eparams) && (AConsent_Provider_Einrichtungen = u), t&&tgdprConsent&& (A.Agreement = tgdprConsent AgreementString, void 0! == tgdprConsentgdprApplies&&ndeepSetValue (I, “regsextgdpr” tgdprConsentgdprApplies 1: 0)), t&&tuspConsent&&ndeepSetValue (I, “regsextus_privacy” tuspConsent) ndeepAccess (e, “userIdid5iduid”) && (Aeids = Aeids || [], Aeidspush ({source: “id5-synccom”, uids: [{id: eBenutzeridentifikationid5iduid}], ext: eBenutzeridentifikationid5idext || {}})), c&& (A.fpc = c), e&&eschain&& (Isource = {ext: {schain: eschain}}), e&&euserId&&eUser identificationtdid&& (Aeids = Aeids || [], Aeidspush ({source: “adserverorg”, uids: [{id: eBenutzeridentifikationtdid, ext: {rtiPartner: “TDID”}}]})), nisEmpty (A) || (I.user = {ext: A}), {method: “POST”, url: “https: // searchspotxchangecom / openrtb / 23 / dados /” s, data: I, bidRequest: t}})}, interpretResponse: function ( e, t) {var r = [], i = ebody; return i&&nisArray (iSitzplatzgebot) &&n_each (iSitzgebot, function (s) {n_each (eGebot, function (e) {var a = {}; for (var c in tbidRequest = tequANDRequANDCaSSEBidGebote = tbidRSSEquAND] = bidEbidGebote ]); n_each (aparamspre_market_bids, function (t) {tdeal_id == eid&& (ePrice = tPrice, ichcur = tCurrency)}); var d = {requestId: abidId, currency: icur || “USD”, cpm: ePrice, creativeId : ecrid || “”, dealId: edealid || “”, ttl: 360, netRevenue:! 0, channel_id: iid, cache_key: eextcache_key, vastUrl: “https: // searchspotxchangecom / ad / vasthtml? key =” eextcache_key, videoCacheKey: eextcache_key, mediaType: sd, width: ew, height: eh}; dmeta = dmeta || {}, e&&eadomain&&0eLength) && (t = eLength); for (t = eLength (t); for (t = eLength); ? e: t} Function d (e, t, n) {! ePreload&&ePreloadThreshhold&& function (e, t, n, i) {return ttop = eshownThreshold&&! seen? (seen =! 0, setTimeout (function () {eTrigger (“shown”, new r (“shown”, t))}, 15)) :(! n || i1&& (h = e (r, MathBoden (n / o), i-1, o)), h}, diesgetVerticallyVisiblePixels = f, thisgetViewportHeight = function () {return tinnerHeight || edocumentElementclientHeight || eBodyclientHeight}, diesgetViewportWidth = function () {return tinnerWidth} eclientKidclientWidth | , diesisElementNotHidden = u, thisisElementInViewport = function (n) {var i = ngetBoundingClientRect (); return itop> = 0&&ileft> = 0&&iunten = oLength) return {done: true}; return {done: false, value: o [i]}; }, e: function e (_e) {throw _e; }, f: F}; } throw new TypeError (“Invalid attempt to iterate a non-iterable instance nTo be iterable, non-array objects must have a [Symboliterator] () method”);} var normalCompletion = true, didErr = false, err; return {s: function s () {it = o [SymbolIterator] (); }, n: function n () {var step = itNext (); normalCompletion = step done; Regression; }, e: function e (_e2) {didErr = true; err = _e2; }, f: Function f () {try {if (! normalCompletion && itreturn! = null) esRückkehr (); } finally {if (didErr) throw err; }}}; }}

Function _unsupportedIterableToArray (o, minLen) {if (! O) return; if (typeof o === “string”) return _arrayLikeToArray (o, minLen); var n = ObjectPrototyptoString calls (o) toDisk (8, -1); if (n === “Object” && oConstructor) n = oConstructorName; if (n === “Map” || n === “Set”) returns arrayof (o); if (n === “Arguments” || / ^ (?: Ui | I) nt (?: 8 | 16 | 32) (?: Clamped)? Array $ / test (n)) return _arrayLikeToArray (o, minLen ); }}

Function _arrayLikeToArray (arr, len) {if (len == null || len> arrLength) len = arrLength; for (var i = 0, arr2 = new array (len); i

Kathryn Hahn

Weltnachrichten – GB – We interrupt this programming to pay homage to Kathryn Hahn from WandaVision