Faits : A. A.a. Par contrat de travail du 1 er octobre 2013, B._ a engagé A._ en qualité d'«assistante personnelle» à partir du 1 er novembre 2013 pour une durée indéterminée. Le temps de travail convenu était de 32 heures par semaine, correspondant à un taux d'activité de 80%. Du lundi au jeudi à raison de 8 heures par jour, l'employée devait notamment fournir les prestations suivantes: actes ordinaires de la vie; participation à la vie sociale et loisirs; tenue du ménage; surveillance de jour. Le contrat prévoyait un salaire mensuel de 3'600 fr. bruts, un treizième salaire et quatre semaines de vacances. Il déclarait applicable le « contrat-type de travail pour les travailleurs de l'économie domestique du canton de Vaud». A.b. Au moment de son engagement, l'employée était encore liée par un contrat de travail l'obligeant à travailler à 100% pour un autre employeur jusqu'au 31 décembre 2013. Bien qu'ayant connaissance de ce fait, l'employeuse l'a engagée pour le 1er novembre 2013. Les heures non effectuées devaient être compensées ultérieurement. L'employée est parvenue à se libérer pour le 20 décembre 2013. Elle a alors travaillé quelque temps selon l'horaire convenu. A.c. En avril 2014, l'employée a ouvert une boutique de vêtements à son propre compte. En tout cas dès le 1er juin 2014, elle y a travaillé en après-midi les mardis, mercredis et jeudis. La fille de l'employeuse est venue travailler à la boutique les matins. L'employée avait promis de restituer les heures manquantes à l'employeuse et de verser de l'argent de poche à la fille de l'employeuse. Comme ces engagements n'ont pas été respectés, la fille de l'employeuse a cessé de travailler dans la boutique en septembre 2014. A.d. A compter du mois d'octobre 2014, l'employée s'est absentée plusieurs lundis après-midis pour mener son enfant chez l'ergothérapeute. Elle a manqué 8 lundis après-midis durant l'année 2014, puis 21 entre le 1er janvier et le 17 août 2015. A.e. L'employeuse a manifesté son désaccord avec le fait que l'employée n'accomplissait pas les heures dues. La première a expliqué qu'elle avait continué de verser un plein salaire parce que la seconde lui avait promis de rattraper les heures manquantes; lorsque celle-ci devait des heures, elle disait qu'elle ne pouvait pas en mettant la pression sur l'employeuse. En novembre 2014, l'employeuse a demandé à l'employée de cesser les abus et d'arrêter les absences injustifiées. L'employeuse faisait une confiance totale, voire aveugle à l'employée et aux membres de sa famille. A.f. Dès mars ou avril 2015, une fiduciaire a été chargée de verser le salaire à l'employée. Le 5 août 2015, l'employée a adressé un courriel à la fiduciaire pour s'assurer que son salaire de juillet 2015 serait versé à temps. La fiduciaire a répondu que le budget annuel (juillet 2014-juin 2015) de l'assurance-invalidité (AI) pour l'employeuse était épuisé et que la caisse AI ne payerait pas de supplément pour juillet 2015; quant au salaire d'août 2015, il serait payé au début du mois de septembre 2015. La fiduciaire a ajouté qu'au vu des nombreuses absences de l'employée, notamment durant les deux premiers mois de travail, le salaire du mois de juillet 2015 ne serait pas versé, l'employée ne devant pas profiter de la gentillesse de l'employeuse. A.g. Par courrier du 6 août 2015, l'employeuse a résilié le contrat de travail pour le prochain terme contractuel, soit le 31 octobre 2015. Elle a libéré l'employée de son obligation de travailler. Par courrier du 24 août 2015, l'employée a imparti à l'employeuse un délai de 5 jours pour lui verser son salaire de juillet 2015 et fournir une motivation écrite de son licenciement. Elle a demandé si son salaire d'août 2015 serait versé à la fin du mois avec son 13ème salaire et ses 14 jours de vacances, et si les salaires de septembre et octobre 2015 seraient payés à la fin du délai de congé. Par courrier du 7 septembre 2015, l'employée a résilié le contrat avec effet immédiat pour non-paiement des salaires de juillet et août 2015. A.h. Le 22 septembre 2015, la fiduciaire de l'employeuse a écrit à l'employée qu'elle devait rembourser à sa mandante le montant de 16'220 fr. 55 à titre de salaire perçu en trop. A.i. La caisse de chômage du canton de Vaud a versé à l'employée 3'670 fr. 05 pour la période du 6 août au 31 octobre 2015. B. B.a. Le 7 septembre 2015, l'employée a assigné l'employeuse devant l'autorité de conciliation. La caisse cantonale de chômage a déposé une requête d'intervention. Le 27 avril 2016, les deux demandes ont été portées devant le Tribunal de prud'hommes de l'arrondissement de l'Est vaudois. L'employée a conclu au paiement de 15'600 fr. bruts à titre de salaire pour les mois de juillet à octobre 2015, y compris le 13ème salaire pro rata temporis. La caisse de chômage, invoquant son droit de subrogation, a conclu au paiement de 3'670 fr. 05. L'employeuse a conclu au rejet des demandes. Elle a pris des conclusions reconventionnelles par 16'220 fr. 55 contre l'employée. B.b. Par jugement du 23 janvier 2017, le Tribunal de prud'hommes a condamné l'employeuse à payer à l'employée 6'704 fr. 55 bruts sous déduction des charges sociales usuelles, à titre de salaire pour la période du 1er juillet au 7 septembre 2015. A cette date, l'employée avait résilié le contrat avec effet immédiat sans exiger de l'employeuse qu'elle fournisse des sûretés dans un délai raisonnable (art. 337a CO). Les conclusions de la caisse de chômage ont été admises à hauteur de 1'977 fr. 80, soit pour la période du 6 août au 7 septembre 2015. Le Tribunal a par ailleurs rejeté l'action reconventionnelle, considérant que l'employeuse avait échoué à établir à satisfaction de droit le nombre d'heures de travail inexécutées. Par ailleurs, elle avait accepté en toute conscience de verser un plein salaire à l'employée malgré d'éventuelles absences. B.c. L'employeuse a saisi le Tribunal cantonal vaudois d'un appel concluant au rejet des demandes principales et, à titre reconventionnel, au paiement de 16'220 fr. 55. La caisse de chômage a conclu au rejet de l'appel. Par appel joint, l'employée a requis le paiement d'un salaire de 11'929 fr. 95 bruts pour la période du 1er juillet au 31 octobre 2015, ainsi que le rejet des conclusions reconventionnelles de l'employeuse. Par arrêt du 9 novembre 2017, le Tribunal cantonal a confirmé le jugement de première instance en tant qu'il condamnait l'employeuse au paiement de 6'704 fr. 55 envers l'employée et de 1'977 fr. 80 envers la caisse de chômage. L'employeuse avait admis ne pas avoir versé de salaire dès juillet 2015 et n'avait pas motivé ses conclusions libératoires. Quant à l'employée, elle avait résilié le contrat avec effet immédiat le 7 septembre 2015 et n'expliquait pas pour quelle raison la date du 31 octobre 2015 devrait être retenue. Cela étant, le Tribunal cantonal a entièrement admis l'action reconventionnelle, condamnant l'employée à payer 16'220 fr. 55 nets à l'employeuse pour les heures de travail inexécutées. Il a par ailleurs octroyé l'assistance judiciaire à l'employeuse. En substance, le Tribunal a retenu que pour la période du 1er novembre au 20 décembre 2013, l'employée - qui exerçait un autre emploi - n'avait travaillé que deux heures par jour sur les huit convenues pendant les quatre jours de travail hebdomadaires. Il subsistait un arriéré de six heures par jour durant 28 jours, soit au total 168 heures (6 x 28). La mère et le mari de l'employée avaient certes rendu des services à l'employeuse, mais il n'était pas établi que ceux-ci auraient compensé les heures non effectuées par l'employée. A compter du 1er juin 2014, l'employée avait manqué trois après-midis par semaine pour travailler dans sa boutique, soit douze heures hebdomadaires (3 x 4 heures). Cette absence ayant perduré pendant au moins 52 semaines, pour s'en tenir au chiffre articulé par l'employée. Il manquait de ce fait 624 heures de travail (52 x 12). Enfin, l'employée s'était absentée 29 lundis après-midis entre octobre 2014 et le 17 août 2015 pour mener son enfant chez l'ergothérapeute. A raison de 4 heures par après-midi, l'employée avait manqué 116 heures (29 x 4). Le Tribunal recensait ainsi un arriéré de 909 heures (recte: 908, soit 168 + 624 + 116). Eu égard au salaire convenu, le tarif horaire brut était de 28 fr.; ce montant devait toutefois être ramené à 25 fr. 85, conformément aux conclusions de l'employeuse. Les heures inexécutées représentaient un total de 23'497 fr. 65 (909 x 25 fr. 85; recte: 90 8 x 25 fr. 85 = 23'471 fr. 80). Comme l'employeuse avait limité ses conclusions à 16'220 fr. 55, il fallait s'en tenir à ce dernier montant. Le Tribunal cantonal a exclu tout accord tacite en vertu duquel l'employeuse aurait renoncé à la compensation des heures de travail manquantes. Elle avait à tout le moins exprimé son désaccord avec le fait que l'employée n'accomplissait pas les heures dues, ce qui suffisait à exclure un consentement tacite. Il était certes étonnant que l'employeuse, qui effectuait elle-même les décomptes, ait continué pendant un an et demi à verser un salaire ne correspondant pas aux prestations fournies. Toutefois, l'employeuse s'était justifiée en expliquant que l'employée lui avait promis de restituer les heures manquantes, et que lorsque celle-ci devait des heures, elle lui mettait la pression en disant qu'elle ne pouvait pas. Il s'avérait par ailleurs que l'employeuse avait une confiance totale, voire aveugle en l'employée et les membres de sa famille. Elle avait demandé à l'employée de cesser les abus en novembre 2014. C. L'employée a saisi le Tribunal fédéral d'un «recours en matière civile» concluant à ce que l'employeuse soit condamnée à lui payer 11'929 fr. 95 à titre de salaire pour les mois de juillet à octobre 2015 et à ce que les conclusions reconventionnelles soient rejetées. Ultérieurement, la recourante a sollicité l'effet suspensif, requête qui a été rejetée par ordonnance présidentielle du 28 février 2018. L'employeuse intimée, la caisse de chômage et l'autorité précédente ont déposé des observations sur cette requête. En revanche, elles n'ont pas été invitées à se déterminer sur le fond.